SQL Server複製中錯誤處理

2021-06-05 15:27:53 字數 1167 閱讀 1940

在sql server的複製中出現在錯誤「應用複製的命令時在訂閱伺服器上找不到該行」,換上以前的做法就是刪除掉這個複製,然後再新建乙個複製,但是這次,我突然想baidu一下,看看別人是怎麼處理這個問題的,然後發現找到的文章都是從msdn上抄下來的,因此我決定把我的做法寫下來。

首先查msdn,確定這個錯誤的id為20598,這個下面會用到;確定了錯誤id之後,有兩種方法可以跳過這個錯誤

第一種是使用「右鍵-》複製-》分發伺服器屬性-》預設配置檔案-》然後新建乙個新的配置檔案,」這樣子就可以讓分發的所有複製都使用新的配置檔案,一般用來修改一些公共的引數。

第二種是開啟複製監視器,然後雙擊你要修改的那個複製,在「操作」選單下有個**配置檔案,開啟它後新建乙個配置檔案,然後使用這個配置檔案,這種方法用來修改單個的複製的引數。

新建後修改-skiperrors這一項,點「值」欄後輸入剛剛查到的id號,就是20598,點確定,然後勾上你剛剛新建的這個配置檔案。

重啟**,開啟複製監視器,你會發現它已經跳過了這個錯誤。

如果是對等資料複製的話,要慎用,因為可能導致兩個資料庫的資料不一致,請先查明原因,然後再決定是否要跳過這個錯誤。 

於事務性複製,有兩種方法可以跳過在分發過程中遇到的錯誤:

分發**的 -skiperrors 引數,可用來跳過某種型別的錯誤。有錯誤的事務將不提交,但後續的事務將提交。

sp_setsubscriptionxactseqno 儲存過程,可用來跳過乙個或多個導致錯誤的事務。非sql server 的訂閱伺服器沒有此選項。

重要事項:

在典型的複製處理中,應該不會遇到任何需要跳過的錯誤。跳過錯誤時要謹慎,要了解發生錯誤的條件、錯誤的起因以及需要跳過錯誤或特定事務而不解決的理由。如果在訂閱伺服器上跳過發布伺服器上提交的事務,則這兩個節點就不會完全同步,這會導致其他錯誤。

-skiperrors 引數:

預設情況下,發布**遇到錯誤時就會停止。如果使用 -skiperrors 引數,並指定了預期的或不想讓其干擾複製的錯誤,則**就會記錄錯誤資訊,然後繼續執行。例如,如果要指定分發**,使其記錄重複鍵違規但繼續處理後續事務,就需要指定**跳過錯誤 2601(不能在具有唯一索引 』%.*ls』 的物件 』%.*ls』 中插入重複鍵的行。)和 2627(違反了 %ls 約束 』%.*ls』。不能在物件 』%.*ls』 中插入重複鍵): -skiperrors 2601;2627

SQL SERVER複製訂閱無法修改表的處理辦法

當你試圖刪除或者變更乙個table時,出現以下錯誤 server msg 3724,level 16,state 2,line 1 cannot drop the table object name because it is being used for replication.比較典型的情況是該...

sqlserver複製環境幾種常見錯誤的修復方法

場景1 應用複製的刪除命令時在訂閱伺服器上找不到該行。這種情況一般是發布庫存到分發庫丟包導致了訂閱伺服器上的記錄缺少,正好刪除缺少的記錄時觸發的故障。解決方案 1 先檢視是哪個表哪條記錄缺少所致 usedistribution go sp browsereplcmds 0x0000003000000...

SQL Server Try Catch錯誤處理

一。語法要點 begin try end try begin catch end catch 異常部分 在 catch 塊的作用域內,可以使用以下系統函式來獲取導致 catch 塊執行的錯誤訊息 error number 返回錯誤號。error severity 返回嚴重性。error state ...