Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我的订阅服务器数据库与发布服务器的连接中断,已过期。我的数据可以保存吗?_Sql Server_Replication_Database Replication_Merge Replication - Fatal编程技术网

Sql server 我的订阅服务器数据库与发布服务器的连接中断,已过期。我的数据可以保存吗?

Sql server 我的订阅服务器数据库与发布服务器的连接中断,已过期。我的数据可以保存吗?,sql-server,replication,database-replication,merge-replication,Sql Server,Replication,Database Replication,Merge Replication,我有一个发布者数据库a,我有两个订阅者数据库B和C,它们订阅a。我的应用程序驻留在站点B和C的本地位置,通过复制,B和/或C的更改会相互复制 问题是,自2019年1月31日起,C停止订阅A,而站点C的IT人员对此一无所知(没有警报) 更大的问题是,在此期间,在B使用应用程序的人一直在输入数据,这些数据被复制回A。与此同时,在站点C的人一直在向数据库C添加数据,而数据库C没有被复制回 如果我恢复订阅,它将获取a处的数据并覆盖C,这是一个主要问题,因为我将丢失在此期间在C处添加的数据。因为这是健康数

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

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

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

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

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

在恢复新订阅之前,我不知道如何首先同步回在C上进行的更新


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

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

但是,由于这是合并复制的情况,并且在不进行同步时在所有端(即发布服务器和所有订阅服务器)添加新数据,我们不能简单地重新初始化订阅,因为正如您所指出的,在失败订阅服务器端生成的未同步数据将丢失。您的案例甚至更加困难,因为您正在使用加密和XML文件来存储数据。您是否将加密的XML存储为数据库中的blob/clob

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

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

  • 更改出版物,并将所有文章的
    操作(如果名称正在使用)
    属性设置为保持现有对象不变

  • 重新初始化订阅

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

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

    希望这能帮助你解决你的问题


    另外,我与红门和微软都没有任何关系。

    你好,你的问题解决了吗?或者您已经重新初始化您的订阅了吗?如果没有,我可能会建议一个解决方案,但如果你触发订阅重新初始化,它将不起作用。嘿@andrews not我仍然没有解决它,我也没有再次触发订阅。你有什么想法可以分享吗?非常感谢!我不知道像红门这样的工具存在。这是非常有用的@我拍照片,不客气!希望您能够解决复制问题。复制在工作时很好,它可以在无人值守的情况下工作数月,但当它失败时,会给您带来困难,您开始考虑如何从应用程序中完全删除它。