程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server復制中錯誤處理

SQL Server復制中錯誤處理

編輯:關於SqlServer

在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved