【问题标题】:My subscriber database lost connection to the publisher and expired. Can my data be saved?我的订阅者数据库失去了与发布者的连接并过期。我的数据可以保存吗?
【发布时间】:2019-09-02 04:14:20
【问题描述】:

我有一个发布者数据库 A,我有两个订阅者数据库 B 和 C 订阅 A。我的应用程序本地驻留在站点 B 和 C 上,通过复制,B 和/或 C 上的更改相互复制。

问题是自 2019 年 1 月 31 日起,C 停止订阅 A,而站点 C 的 IT 人员对此一无所知(没有警报)。

更大的问题是,在此期间,在 B 使用应用程序的人一直在输入复制回 A 的数据。同时,在 C 站点的人一直在向数据库 C 添加数据,但没有复制回来.

如果我恢复订阅,它将获取 A 处的数据并覆盖 C,这是一个主要问题,因为我将丢失在此期间在 C 处添加的数据。由于这是健康数据,它全部加密并存储在 xml格式,它并不像更新丢失的数据那么简单,因为一些文件在站点 B 和 C 之间共享,这意味着它们会将数据添加到保存的 xml 树中。

例如,如果有人在站点 B 看到患者并输入注释,它会更新一个文件。但是,如果下周同一病人去站点 C,那里的护士将更新在 B 处更新的同一个文件。

我不知道如何在恢复新订阅之前先同步回 C 中所做的更新。

如果有人有任何建议,将不胜感激!

【问题讨论】:

  • 您好,您的问题解决了吗?还是您已经重新初始化订阅?如果不是,那么我可能会建议一个解决方案,但如果您触发订阅重新初始化,它将无法正常工作。
  • 嘿@andrews 不是我还没有解决它,我没有再次触发订阅。你有什么想法可以分享吗?

标签: sql-server replication database-replication merge-replication


【解决方案1】:

我们多年来一直在使用合并复制,有时(例如在数据库更新之后)它确实会出现奇怪的错误,无论我们尝试什么都无法修复。在所有这些情况下,唯一可行的解​​决方案是重新初始化订阅,甚至删除并重新创建包含所有订阅的发布。

但是由于这是合并复制的情况,并且当同步没有发生时,新数据正在添加到所有端(即发布者和所有订阅者),我们不能简单地重新初始化订阅,因为就像您指出的那样,在失败的订阅方将丢失。您的情况更加困难,因为您使用加密和 XML 文件来存储数据。您是否将加密的 XML 作为 BLOB/CLOB 存储在 DB 中?

但是,我将提供多次为我们工作的解决方案。因此,如果合并复制的一个或多个端点失败,则必须采取以下步骤:

  1. 使用 Microsoft 提供的 Red Gate SQL Data Compare(商业版,可免费试用 14 天)或免费的 SQL Server Data Tools (SSDT) 等工具手动将非同步数据添加到所有端点。红门的工具非常强大。您可以在数据库之间定义表/列的自定义映射以进行比较。而此时来自 MS 的 SSDT 只能比较具有相同名称和相同模式名称的表。这两种工具都可以生成插入/更新/删除脚本以使您的数据同步。他们甚至会自动禁用然后恢复外键约束检查。

  2. 更改您的出版物并将所有文章的Action if name is in use 属性设置为保持现有对象不变

  3. 重新初始化订阅。

在您执行第 2 步并重新初始化订阅复制代理后,仍需要时间来处理现有记录(并且根据数据集大小,可能需要相当长的时间,因此请考虑将日期过滤器添加到文章中),但不会更改任何数据,如果发布者和订阅者数据库在步骤 #1 之后完全同步,则不会发生删除或插入。代理只会将那些现有记录标记为已处理,以便在以后的运行中跳过它们,因此您只会在复制监视器中看到更新命令计数增加。重新初始化订阅后,您应该会没事,并且任何一方生成的新数据都会同步。

您的案例很困难,因为您无法从第 1 步轻松执行手动数据同步。但这是一个先决条件,您需要考虑如何做到这一点。您没有提供有关如何实际存储加密数据的详细信息,因此我无法建议详细计划,但不知何故您需要手动解密现有 XML 记录,插入丢失的部分然后再次加密并确保加密列完全相等侧面。

希望这可以帮助您解决问题。

PS。无论如何,我既不隶属于 Red Gate,也不隶属于 Microsoft。

【讨论】:

  • 非常感谢您!我不知道有像 Red Gate 这样的工具。这非常有用!
  • @i_shoot_photos,不客气!希望您能够解决复制问题。复制在工作时很好,它可以在无人看管的情况下工作数月,但当它失败时,它会给你带来困难,你开始思考如何将它从应用程序中完全删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多