原文:
sql server同步複製問題排查方法
1、應用複製的命令時在訂閱伺服器上找不到該行
解決方法:用系統儲存過程
sp_browsereplcmds(
返回分發資料庫中儲存的可讀版本複製命令的結果集,並將其用作診斷工具。 此儲存過程在分發伺服器上對分發資料庫執行)
sp_browsereplcmds[ [@xact_seqno_start =]'xact_seqno_start']排查方法:在分發伺服器—分發db(distribution)[,[@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 ]
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.在發布伺服器上,新...