|
操作使用的一些技巧(事務復制類型):
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服務器端口修改過造成)。還有可能是MS SQL Server和SQL Server Agent服務沒有用域用戶身份啟動并運行,于是我把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)MS SQL Server和SQL Server Agent服務必須以域用戶身份啟動并運行,以上問題檢查中隨時注意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 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 屬性傳輸到訂閱表,則必須進行如下操作:
1. 使用 IDENTITY 屬性和 NOT FOR REPLICATION 選項手工創建訂閱表。您可以通過讓 SQL Server 在應用快照之前執行自定義腳本來執行該操作。若要指定自定義腳本,請先創建發布,再創建腳本,然后在發布屬性的“快照”選項卡
上輸入該腳本的名稱。
2. 設置名稱沖突項目屬性,以便 SQL Server 在訂閱服務器上應用快照時不會除去現有的表。該屬性在項目屬性的“快照”選項卡上。
下列已發布表包含“標識”列:
[dbo].[BookIndex]
===================
SQL Server 要求發布的存儲過程所引用的所有對象(如表和用戶定義函數)在訂閱服務器上都可用。如果引用的對象在此發布中未作為項目發布,則它們必須在訂閱服務器上手工創建。
在此發布中發布了下列存儲過程:
[dbo].[getChaNameList]
[dbo].[setUpWebsite]
it知識庫:SQL Server 2008 數據庫復制實現數據同步常見問題,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。