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

2021-09-07 16:57:46 字數 3949 閱讀 7538

原文:

sql server同步複製問題排查方法

1、應用複製的命令時在訂閱伺服器上找不到該行

解決方法:用系統儲存過程

sp_browsereplcmds

返回分發資料庫中儲存的可讀版本複製命令的結果集,並將其用作診斷工具。 此儲存過程在分發伺服器上對分發資料庫執行)

sp_browsereplcmds[ [@xact_seqno_start =]'xact_seqno_start']

[,[@xact_seqno_end =]'xact_seqno_end']

[,[@originator_id =]'originator_id']

[,[@publisher_database_id =]'publisher_database_id']

[,[@article_id= ]'article_id']

[,[@command_id=] command_id ]

[,[@agent_id= ] agent_id ]

[,[@compatibility_level= ] compatibility_level ]

排查方法:在分發伺服器—分發db(distribution)

use [distribution] 

go--查詢1:通常事務序列號,查到command_id=1的執行語句

exec sp_browsereplcmds @xact_seqno_start='0x00044ed500008f3e00ab00000000',@xact_seqno_end='0x00044ed500008f3e00ab00000000'

--查詢2:檢視同步物件表(在以上結果集中找到article_id/publication_id字段值)

select *from msarticles where article_id=344

--查詢3:同步命令太多時,檢視可指定@command_id[如圖1](必須可傳@publisher_database_id[查詢2])

exec sp_browsereplcmds

@xact_seqno_start='0x00044ed500008f3e00ab00000000'

,@xact_seqno_end='0x00044ed500008f3e00ab00000000'

,@publisher_database_id=4

,@command_id=1 --

--第1個語句會出現以下兩種情況

(a/b)

--a、更新時找不到該行

--b、刪除時找不到該行

了解同步儲存過程:

訂閱端同步介面格式如下:

--新增呼叫儲存過程格式:((訂閱客戶端新增時同步儲存不會丟擲錯誤碼))

create procedure [dbo].[sp_msins_dbotablename]

@c1 tinyint,

@c2 nvarchar(50),

@c3 time,

@c4 time

asbegin

insert into [dbo].[tablename](

[id],

[name],

[starttime],

[endtime]

) values (

@c1,

@c2,

@c3,

@c4 )

end

go--更新呼叫儲存過程格式:(訂閱客戶端修改資料時沒有找到記錄更新時;錯誤碼:20598)

create procedure [dbo].[sp_msupd_dbotablename]

@c1 tinyint = null,

@c2 nvarchar(50) = null,

@c3 time = null,

@c4 time = null,

@pkc1 tinyint = null,

@bitmap binary(1)

asbegin

update [dbo].[tablename] set

[name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [name] end,

[starttime] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [starttime] end,

[endtime] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [endtime] end

where [id] = @pkc1

if @@rowcount = 0

if @@microsoftversion>0x07320000

exec sp_msreplraiserror 20598

end

go--刪除呼叫儲存過程格式:(訂閱客戶端刪除資料時沒有找到記錄更新時;錯誤碼:20598)

create procedure [dbo].[sp_msdel_dbotablename]

@pkc1 tinyint

asbegin

delete [dbo].[tablename]

where [id] = @pkc1

if @@rowcount = 0

if @@microsoftversion>0x07320000

exec sp_msreplraiserror 20598

end

go

解決方法1:(a

、更新、b

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

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

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

解決方法3:使用發布**的skiperrors引數來忽略跳過錯誤20598(會造成資料不同步,不能有效查詢原因,需要對比環境資料(如表:記錄數))如下圖:

--c、新增時出錯

{call

[dbo]

.[sp_msins_dbo表] 

解決方法4:(c

、新增時出錯):新增時出錯,解決方法根據提示可能是標識值或主健id已在(刪除訂閱端該行資料)或表結構不值造成的

SQL SERVER 2005 同步複製技術

sql server 2005 同步複製技術 以下實現複製步驟 以快照複製為例 執行平台sql server 2005 一 準備工作 1 建立乙個 windows 使用者,設定為管理員許可權,並設定密碼,作為發布快照檔案的有效訪問使用者。2 在sql server下實現發布伺服器和訂閱伺服器的通訊正...

SQL SERVER 2005 同步複製技術

sql server 2005 同步複製技術 以下實現複製步驟 以快照複製為例 執行平台sql server 2005 一 準備工作 1 建立乙個 windows 使用者,設定為管理員許可權,並設定密碼,作為發布快照檔案的有效訪問使用者。2 在sql server下實現發布伺服器和訂閱伺服器的通訊正...

SQLServer2000同步複製技術實現步驟

一 預備工作 1.發布伺服器,訂閱伺服器都建立乙個同名的windows使用者,並設定相同的密碼,做為發布快照資料夾的有效訪問使用者 管理工具 計算機管理 使用者和組 右鍵使用者 新建使用者 建立乙個隸屬於administrator組的登陸windows的使用者 synuser 2.在發布伺服器上,新...