sql server2008數據庫複製實現數據同步常見問題

操作使用的一些技巧(事務複製類型):
1.如何修改一個已經發布的表的屬性?
將發佈所有訂閱刪除,(發佈不用刪除),就可以在發佈屬性的項目中取消表,然後就可以修改該表了,修改後,再將表加入發佈內就可以了.
2.常用的操作界面:
(1)一般都在監視器--發佈項目,可以看到快照 分發和訂閱的即時信息.
(2)另外一個操作地方是發佈的屬性,(在屬性--狀態裏可以啓動代理)
(3)還有一個是工具--複製--配置發佈、訂閱服務器和分發,需要訂閱的服務器必須在這裏指定授權後訂閱才能成功.
============
問題:數據庫無法登陸的老問題:數據庫屬性-安全裏面,不要選僅windows登陸,換另外一個模式.

0.訂閱一個快照發布(不是事務複製)出錯,"21776 名稱xxx在TransPublication集合上沒有找到",在企業管理器中,將發佈數據庫和訂閱數據庫都停止或者斷開,再啓動,重新連接就可以訂閱快照發布了.真是奇怪,有莫名其妙的問題可以嘗試重啓服務器試試,有時後一臺機器上可以正常控制訂閱操作,而另外一臺機器上卻訂閱操作出錯,也重新連接服務器試試.
1.一開始遇到的問題是,註冊的local服務器不能用,刪除後重新命名搞定,
2.sql server代理正在使用系統帳戶,它會導致複製失敗,. 這個提示點確定後,本賬戶的選項爲灰色,原來是配置發佈的服務器不是本機,到本機上操作發佈,就可以選"本賬戶"了.
3.又遇到不能署名訂閱,"不允許請求的署名訂閱",明明發布和訂閱服務器雙方都註冊了,雙方也都建立了訂閱的用戶帳號,原因:在這步,點註冊服務器,然後不能選默認的模擬sql登陸,而是要選"使用sql 身份驗證",然後輸入名稱和密碼.
如果始終彈出"不允許請求的署名訂閱",不能進到選擇登陸模式的界面,退出訂閱嚮導,在企業管理器中,進入發佈服務器,複製-右鍵-"配置發佈、訂閱服務器和分發"-訂閱服務器-添加訂閱服務器機器名和帳號,如果已經有了,直接確定下.再在進訂閱服務器訂閱就不會顯示不能署名訂閱了.
以上過程可能發現明明訂閱服務器名字已經在發佈服務器添加了,還是出現這個問題,就一定要在訂閱服務器進入發佈服務器,然後添加訂閱服務器的名字,爲什麼會這樣,可能是在發佈服務器指定了改訂閱服務器的名字後,但訂閱服務器沒有刷新,可以斷開一次訂閱服務器和發佈服務器,再來訂閱,也可以解決.
4.請求訂閱已經建立好了,但訂閱狀態顯示"正在重試", 上次動作"進程未能連接到subscriber SHD-SHD",
原因是我安裝sql後,曾經改過電腦的名字,改回SHD-SHD.(有的人是因爲sql服務器端口修改過造成).還有可能是MSSQLserver和Sqlserveragent服務沒有用域用戶身份啓動並運行,(於是我把B加到A所在的域,並且把A的管理員用戶加到B的SQLServerAgent服務的登陸用戶中,)
5.但訂閱狀態顯示"請求共享代理程序失敗", "進程未能連接到distributor...",懷疑是訂閱設置時,連接發佈數據庫的帳號有問題,在訂閱(右鍵)的歷史記錄中查看具體的錯誤原因.帳號正確後,歷史記錄又說訂閱端機器沒有配置,於是全部刪除訂閱和發佈來試,結果發佈確無法刪除發佈,出現20015錯誤,原來是訂閱的機器通過局域網,打開了快照的共享目錄沒有關閉,關閉後,成功刪除發佈.如果還無法刪,乾脆把共享的快照目錄取消共享,再刪,然後重新配置快照目錄共享
.
6.訂閱服務器上的訂閱又無法刪除了,提示"無法更新或刪除從 MSX 服務器上發起的作業",
這是因爲:計算機更換名之後就出現這種錯誤,自己不能修改自己創建的作業。
解決辦法:
在msdb的sysjobs表中把originating-server中的值全部改爲更改後的計算機名
update   msdb..sysjobs   set   originating_server   =   '現服務器名'
有時可以到管理-sql server代理--作業,查看更多情況和操作.
7.全部重新創建發佈和訂閱成功,執行卻又出現"發佈內容 null"的提示,是因爲訂閱服務器沒有連接到分發服務器,(1)SQLSERVERAGENT沒啓動.(2)MSSQLserver和Sqlserveragent服務必須以域用戶身份啓動並運行,以上問題檢查中隨時注意SQLSERVERAGENT(控制面板-管理-服務)服務是否已經啓動,
8.訂閱服務器已經登陸上發佈服務器,但在建立訂閱時看不見該服務器的發佈,是因爲沒有配置分發
服務器,工具-複製-"配置發佈、訂閱服務器和分發",再檢查SQLSERVERAGENT是否運行.
然後再在發佈屬性-發佈訪問列表,添加訂閱服務器登陸的登陸名,訂閱端終於看見發佈了.
9.發佈 'xxx' 的初始快照尚不可用。
保證SQLSERVERAGENT已經運行,複製=》發佈內容=》發佈項目mytab=》右擊右側的訂閱=》重新初始化
如果還不行,複製監視器--發佈服務器--xxx--發佈的項目--快照,看到進程未能創建文件“//XXZ/SQLPUB/unc”,到該文件夾重新配置sql的帳號對該文件夾權限爲"完全".
10.訂閱端產生 "快照尚不可用 發生操作系統錯誤 53",訂閱服務器帳號訪問快照文件夾出權限不夠,分配權限,還有檢查防火牆,被禁止了訪問.
11.有個表無法發佈,選擇框顯示紅叉,沒有主鍵的表無法發佈.
12.進程未能從表“[dbo].[syncobj_0x3745373834413345]”向外大容量複製。
在寫 BCP 數據文件時發生 I/O 錯誤(源: ODBC SQL Server Driver (ODBC); 錯誤代碼: 0)
解決方法:就是字符類型全部改爲n類型的解決問題(char-nchar,varchar-nvarchar,ntext).
13、在數據發佈時報如下錯誤信息:在BCP數據文件中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):錯誤代碼:S1000)
這是因爲數據庫中含有TEXT或nTExt或Image字段引起的,只要在某項發佈屬性頁中選擇<快照>-<快照格式>-<字符模式格式>,即可解決該問題.
14、另外,在建數據發佈時,報如下錯誤:違反了Primary Key約束'PK_@snapshot_seqnos_7fab3fda'.不能在對象'#7EB71BA1'中插入重複鍵.(源:zzb_stockserver(數據源);錯誤代碼:2627)
這是因爲在建發佈時,數據庫數據正在執行插入或修改動作引起的,只要該發佈的快照重新運行一下即可。
15、對某些大型數據表無法生成快照的問題,數據庫報如下錯誤:
進程未能從表"[dbo].[syncobj_0x3436383044343035]"向外大容量複製,在寫 BCP 數據文件時發生 I/O 錯誤(源: ODBC SQL Server Driver (ODBC);錯誤代碼: 0)
這是因爲該表有問題或表數據太大造成的,可用如下方法試着解決一下:
a、用DBCC checktable 對該表檢查一下,數據表是否有問題,然後再試一下重新生成數據快照。
b、如果上述問題仍無法解決,可以用數據導出功能將數據表導到訂閱服務器中。
c、然後重建一個針對該數據表的數據發佈,選擇不生成快照功能,然後運行下述問題4的解決方法,解決出現的問題。
16、在建立訂閱時,選擇不初始化訂閱方數據表,則在訂閱服務器不產生相應的複製存貯過程,運行該發佈時,會報如下錯誤:未能找到存貯過程'sp_MSupd_XXX'...
原因如下:
Problem Deion :
======
Replication Distribution Agent reports error. The error message is "It could not find the stored procedure sp_MSins_***".
Reason :
======
If we choose "the subscriber has schema and data already" option when we create the subion, those three system auto created stored procedures will not be created in the subscribing database side, they are "sp_MSins_***"/"sp_MSupd_***"/"sp_MSdel_***".
Soltuion :
======
We could use the system command "sp_publicationcustomprocs 'pulication_name'" to create the s of those three system stored procedures. Then we run theses in the subscribing database. The problem will be resolved.
解決方案:
在發佈服務器上運行如下命令:sp_publicationcustomprocs 'xxxx', 其中xxxx爲發佈名稱,該命令會生成創建上述三個存貯過程的腳本,然後在訂閱服務器運行生成三個存貯過程即可。
17、在訂閱數據時,發生如下錯誤:
該訂閱已標記爲不活動,必須重新初始化該訂閱。需要刪除並重新創建 NoSync訂閱。
(源: zzb_stockserver (數據源); 錯誤代碼: 21074)
解決方案:在發佈服務器上,選擇某項發佈,在屬性-》訂閱-》重新初始化。可以解決上述問題
18、在數據發佈時,發生如下錯誤:不能在具有唯一索引 'PK_tbMeetingMemo' 的對象 'tbMeetingMemo' 中插入重複鍵的行。(源: ZZB-XHSTOCK (數據源); 錯誤代碼: 2601)
原因:可能是在發佈該表時,在不同的發佈中存在多次發佈該表的情況.
解決方法:
a、查明是否有多次發佈該表的情況.
在發佈服務器的發佈數據庫中用運行如下SQL語句:select * from sysarticles order by dest_table
查看在dest_table列中是否出現多次該表的信息,如是,則說明該表已被多次發佈,可以用下一步中說明的方法來查看是哪些發佈發佈了該表。
b、運行語句:select * from syspublications,查看pubid與上述信息相同的pubid的內容,則就能確定是何種發佈發佈了相同的數據表。
c、找到了發佈後,如果是增加數據表,則不用刪除該發佈下的所有訂閱,如果是去除發佈的數據表,則需刪除該發佈下的所有的訂閱信息,修改相應的發佈內容,重新制定相應的訂閱.
19.創建發佈,14294錯誤,"請提供@job_id標識作業",
是因爲你刪除了以前系統自動生成的作業。方法:工具-複製--禁用發佈,重新配置發佈、訂閱服務器和分發,完成後,發佈的數據庫顯示爲一個手型的共享圖標,再創建發佈
20.訂閱和發佈都刪除完了,但禁用發佈不成功,提示:無法除去分發數據庫'distribution',該數據庫正在使用.停止數據庫,再啓動數據庫,再禁止發佈.
21.配置發佈和分發嚮導,最後完成時錯誤18481:配置分發服務器:未能連接到服務器,因爲distributor_admin未在該服務器上定義爲遠程登錄
你肯定在裝完SQL SERVER以後,改了計算機名,雖然sql server 還可以用,但一用複製時,SQL SERVER讀取了舊的計算機實例名,不信,你試試 select @@SERVERNAME 顯示出來的,肯定不是你現在的計算機名.
於是,你用
sp_dropserver <(用select @@SERVERNAME顯示出來的舊名)>
go
sp_addserver <你現在的計算機名>, LOCAL
go
例如:sp_dropserver    'E0184D34429345F/SQL2K'
go
sp_addserver    'deboywang/SQL2K',    LOCAL
go
重啓sql server服務,問題就可以解決了
除此之外,如果要修改@@Servername還可以使用下面的方法:
1. exec sp_helpserver 檢查你的server名字
2. 如果不正確,用exec sp_setnetname修正
另外,當註冊的名字改爲其他名字後,註冊登記是成功的(在客戶端工具裏添加了匿名),發佈時就會出現這個問題。
22.強制訂閱無法刪除:在發佈服務器上先後刪除訂閱和發佈後,訂閱服務器上該強制訂閱始終存在,無法刪除,問微軟支持,得結論:
sp_removedbreplication 'job'
JOB爲訂閱複製的數據庫名稱。
其他問題:
=============
注:
0.不要去亂刪 管理--sql server代理--作業的內容.嚴格按照先刪訂閱,再刪發佈來進行.
1、如何忽略在分發中出現的報錯
a、在發佈服務器的管理-》SQL server代理->作業->中,找到該發佈的發佈JOB,在屬性->步驟->2運行代碼程序-》編輯->命令->在命令語句最後添加 -skiperrors xxxx(xxxx是分發時報的錯誤號) , 指的是忽略該錯誤的意思。
b、然後重新啓動分發引擎.
2.如何輸出出錯的信息?
在待輸出出錯信息的JOB命令最後加入 -Output c:/temp/error.txt, -Output 是命令,後面是待輸出的文件路徑和文件夾名.
================
因爲該發佈不允許使用可更新的訂閱,當 IDENTITY 列被傳輸到訂閱服務器時,不會傳輸 IDENTITY 屬性。(例如,在發佈服務器上定義爲 INT IDENTITY 的列在訂閱服務器上將定義爲 INT。)
如果想將 IDENTITY 屬性傳輸到訂閱表,則必須進行如下操作:
      使用 IDENTITY 屬性和 NOT FOR REPLICATION 選項手工創建訂閱表。您可以通過讓 SQL Server 在應用快照之前執行自定義腳本來執行該操作。若要指定自定義腳本,請先創建發佈,再創建腳本,然後在發佈屬性的“快照”選項卡上輸入該腳本的名稱。
      設置名稱衝突項目屬性,以便 SQL Server 在訂閱服務器上應用快照時不會除去現有的表。該屬性在項目屬性的“快照”選項卡上。
 下列已發佈表包含“標識”列:
[dbo].[BookIndex]
===================
SQL Server 要求發佈的存儲過程所引用的所有對象(如表和用戶定義函數)在訂閱服務器上都可用。如果引用的對象在此發佈中未作爲項目發佈,則它們必須在訂閱服務器上手工創建。
在此發佈中發佈了下列存儲過程:
[dbo].[getChaNameList]
[dbo].[setUpWebsite]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章