sql server2008資料庫複製實現資料同步常見問題

iSQlServer發表於2010-05-20

操作使用的一些技巧(事務複製型別):
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

these
s 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
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]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-663212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章