在两个数据库之间运行事务复制。我担心它们有点不同步,但我不知道哪些记录会受到影响。如果我知道的话,我可以在订阅方手动修复它。
SQL Server将给我以下消息:
在应用复制的命令时,在订阅服务器上找不到该行。(来源: MSSQLServer,错误号: 20598)
我环顾四周,试图找出哪个表,或者更好的是是什么记录导致了这个问题,但我在任何地方都找不到这些信息。
到目前为止,我发现的最详细的数据是:
事务序列号: 0x0003BB0E000001DF000600000000,命令ID: 1
但我怎么才能从中找到那张桌子和一排呢?有什么想法吗?
发布于 2010-04-21 05:15:37
这就给出了错误针对的表。
use distribution
go
select * from dbo.MSarticles
where article_id in (
select article_id from MSrepl_commands
where xact_seqno = 0x0003BB0E000001DF000600000000)这将给出命令(以及命令所针对的主键(即行))。
exec sp_browsereplcmds
@xact_seqno_start = '0x0003BB0E000001DF000600000000',
@xact_seqno_end = '0x0003BB0E000001DF000600000000'发布于 2009-02-20 04:51:22
我会用我最后使用的解决方法来回答我自己的问题。
不幸的是,我无法知道是哪个表通过Server复制接口(或事件日志)导致了问题。只是没说。
所以我想到的下一件事是,“如果即使有错误,我也可以继续复制呢?”瞧,有一条路。事实上,这很容易。有一个特殊的分发代理配置文件叫做“继续处理数据一致性错误”。如果启用该功能,则这些类型的错误将被记录并传递。一旦应用了事务并可能记录了错误(我只遇到两个),那么您就可以返回并使用RedGate SQL数据比较(或其他一些工具)来比较您的两个数据库,对订阅服务器进行任何更正,然后再次开始复制。
请记住,要使此操作正常,您的发布数据库需要在处理过程中对订阅服务器数据库进行区分和修复时保持“安静”。幸运的是,在这种情况下我有那种奢侈。
发布于 2009-02-19 22:50:07
如果您的数据库不太大,我将停止复制,重新快照,然后重新启动复制。这个technet文章描述了这些步骤。
如果由于用户不小心更改副本上的数据而导致其不同步,我将设置必要的权限来防止这种情况发生。
这个复制项目值得一读。
https://stackoverflow.com/questions/567597
复制相似问题