关于非活动订阅数据丢失的问题 - SQL Server 2008

Questions about data loss with inactive subscription - SQL Server 2008

我有数据库A和B,A发布一些表给B,订阅B报错:

... has been marked as inactive and must be reinitiated... error 21704

这些数据库中有非常敏感的数据,我正试图找出一种方法来防止数据丢失,或者至少将其最小化。

我可以对比出现这个错误的数据库吗,还是需要先取消订阅?

我以前从未这样做过,除了“你完蛋了,删除并重新做”之外找不到任何其他解决方案。

这对数据的影响有多大?这个错误已经持续了几个星期了。

以防以后有人有这些疑虑,我把我的经验贴出来。

  • 可以,可以比对数据库,不需要先取消订阅。
  • "You're screwed" 部分并没有那么糟糕。由于数据库 A 仍然保留原始信息,因此 B 缺少更改。当你比较和同步它们时,你转移了过时的信息。
  • 这个错误根本没有造成任何数据问题,问题可能发生在你比较和更新数据库时,因为如果你用B更新A,而B仍然是过时的,你可能会丢失数据。 小心点.

可以在 VisualStudio 上使用 SQL 服务器数据工具进行比较,后者会自动执行任务,或者通过简单的 SQL 查询手动进行。

我通过手工学习,对制作过程有了更深的了解。这是我使用的代码:

    --RUN THIS QUERY FROM THE DESTINATION DB

    INSERT INTO TABLE_B 
    SELECT * FROM OPENQUERY([ORIGINAL-SERVER],'SELECT * FROM DB-A.DBO.TABLE_A') 
    WHERE FOREIGN_KEY NOT IN (SELECT FOREIGN_KEY FROM DB-B.DBO.TABLE_B)

希望这对以后的人有所帮助。