我正在尝试使用 sp_publication_validation 存储过程来验证我的复制设置是否正常工作。此过程非常简单,在此处进行了描述。
我正在运行这个命令:
EXEC sp_publication_validation @publication = 'MyPublication'
,@rowcount_only = 1 -- (1 - rowcnt only, 2 - rowcnt and checksum)
,@full_or_fast = 0 -- (0 - full count using COUNT(*), 1 - use sysindexes.rows, 2 - conditional)
最初一切似乎都很好,结果表明所有表都匹配。接下来我转到订阅者并从一些表中手动删除几行。我手动验证表中的行数现在在发布者和订阅者之间是不同的。最后,我再次运行 sp_publication_validation 程序,然后......它说一切都还好。这是错误的!我还尝试同时返回 rowcnt 和校验和,但它仍然没有检测到发布者和订阅者之间存在差异这一事实。
我很欣赏任何想法。
谢谢!
我的解释是
sp_publication_validation
验证发布:由发布者发送并由订阅者接收的一组文章。由于在传输过程中没有数据损坏,因此该 SP 不会报告任何错误。要检测复制表中的差异,请使用
SP_TABLE_VALIDATION
.MSDN 上的SP_TABLE_VALIDATION
好的,这就是我最终解决这个问题的方式。我基本上写了一个脚本来比较发布者和分发者的表之间的行数。一个先决条件是在两台服务器之间有一个链接服务器。在我的例子中,它被称为“distributor_ls”(因为分发服务器与订阅服务器位于同一台服务器上)。脚本的第一部分将有关已发布数据库的信息收集到名为#tmp_replcationInfo 的临时表中。脚本第一部分的功劳归于此处
然后脚本的第二部分使用此信息将表行计数收集到一个名为#result 的临时表中,用于那些行计数不同的表。然后显示差异。我知道它可能不是超级可靠,因为它依赖于存储在 sys.partitions 表中的行数,但它满足了我的需要。
我希望有人觉得它有用。