SqlServer 主從複製錯誤分析--20598

天才卧龙發表於2024-08-07

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

1、在分發伺服器執行如下指令碼

select * from MSsubscriber_info

select * from MSpublications

2、選擇分發資料庫-distribution,執行如下指令碼

sp_helpsubscriptionerrors 'IZQY9C2TQSKGS9ZTEST'
,'DBTEST' 
, 'DbPiblish' 
,'iZzvz98dbvrvv4ZTS' 
,'DBTEST'

執行完畢後,發現各種錯誤

其中最多的是 20598 ,然後

檢視導致錯誤的操作及表

--
EXEC sp_browsereplcmds @xact_seqno_start='0x000000B400015592000A00000000',@xact_seqno_end='0x000000B400015592000A00000000'

 

透過箭頭所指的欄位,繼續檢視詳細錯誤類別--此時可以看到具體的資料表名

分發訂閱時,一旦發生此類錯誤,分發訂閱就會停止,嚴重影響了資料同步及正常業務保障

如果解決這些問題?

解決方法1:(a、更新、b、刪除):在訂閱端把缺少的資料行新增(根據以上出錯ID加一條記錄)或用匯入匯出方法(SQL語句同步指定以上ID).(原因:訂閱端缺少資料行造成刪除或更新找不到資料行而出錯),

不推薦以下方法(解決方法2、解決方法3)

解決方法2:改同步儲存過程介面把丟擲錯碼判斷去掉,會造成資料不同步,如果取消最好只取消刪除時呼叫的儲存過程(如:sp_MSdel_dboTableName)

解決方法1太過複雜,且大資料情況下,錯誤很多時,沒法操作。

那麼,我們就剩下最後一個方法了,將錯誤碼忽略

如何操作?

右鍵 本地釋出,找到分發伺服器屬性,點選分發伺服器屬性

選擇 skip 這些錯誤碼

配置好後,檢視伺服器釋出是否恢復正常

已經恢復正常了。

這種跳過錯誤的操作隨不可取,但確實好用,另外,我們可以透過定時將主庫還原到從庫的方式來減少主從資料差異

參考:

事務複製中訂閱節點非活動( inactive)錯誤

SQL Server同步複製問題排查方法

sqlserver複製報”應用複製的命令時在訂閱伺服器上找不到該行“解決方法

相關文章