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

时间:2018-02-08 12:17:06

标签: sql-server synchronization database-replication

我有数据库A和B,A将一些表发布到B,而B的订阅有错误:

  

...已被标记为无效,必须重新启动...错误21704

这些数据库上存在非常敏感的数据,我试图找到一种方法来防止数据丢失,或至少将其最小化。

我可以将数据库与此错误进行比较,还是需要先取消订阅?

我之前从未这样做过,并且找不到任何其他解决方案,而不是“你已经搞砸,删除并再次执行此操作”。

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

1 个答案:

答案 0 :(得分:0)

如果将来其他人有这些疑虑,我会发布我的经验。

  • 是的,您可以比较数据库,并且无需先取消订阅。
  • “你被搞砸”的部分不是那么搞砸了。由于DB A仍保留原始信息,因此B缺少更改。当您比较并同步它们时,您将传输过时的信息。
  • 此错误根本不会导致任何数据问题,比较和更新数据库时会出现问题,因为如果使用B更新A,并且B仍然过时,则可能会丢失数据。 小心

可以在VisualStudio上使用自动执行任务的SQL Server数据工具进行比较,也可以通过简单的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)

希望这可以帮助将来的某个人。