我正在使用复制 1 个仅具有插入(无更新或删除)的大型 sql server 表的事务性发布。它有 > 600 亿行,目前已停止 6 天
订阅错误当前显示:订阅已标记为不活动,必须重新初始化。需要删除并重新创建 NoSync 订阅。
我只想查看复制服务器和主服务器上的 PK ID,然后开始复制丢失的数据
这可能吗?以及我将如何重新初始化订阅。我已经尝试重新初始化它,但它锁定了表并导致了无休止的问题。
SQL Server 2017 企业版。
我正在使用复制 1 个仅具有插入(无更新或删除)的大型 sql server 表的事务性发布。它有 > 600 亿行,目前已停止 6 天
订阅错误当前显示:订阅已标记为不活动,必须重新初始化。需要删除并重新创建 NoSync 订阅。
我只想查看复制服务器和主服务器上的 PK ID,然后开始复制丢失的数据
这可能吗?以及我将如何重新初始化订阅。我已经尝试重新初始化它,但它锁定了表并导致了无休止的问题。
SQL Server 2017 企业版。
您可以为这个大表向您的发布添加一个静态行过滤器。在过滤器中,您将指定
ID
要从中开始的。假设您的ID
列是增量的,则谓词子句如下所示:WHERE ID >= 1234567
链接文档中的步骤:
您还需要编辑 Article 属性,并将“ Action if name is in use ”属性设置为“Keep existing object unchanged”。这将确保当您重新初始化时,已经复制到订阅服务器的数据不会被删除。唯一的缺点是如果您以后需要再次重新初始化,您将需要手动更新行
ID
过滤器中的,这样您就不会不小心尝试插入相同的数据两次。另请注意,使用静态行筛选器会在发布服务器上产生一些开销。但我从未遇到过使用此功能的任何问题。
您可以尝试的另一条路线是Initializing a Transactional Subscription from a Backup。尽管这可能需要更长的时间,而且我不确定对于一个 600 亿行大的表来说可行性如何。但无论如何,这是链接文档中的步骤: