【问题标题】:Can I delete specific data from SQL Server replication subscriber database without breaking replication?我可以在不中断复制的情况下从 SQL Server 复制订阅者数据库中删除特定数据吗?
【发布时间】:2023-03-12 11:10:01
【问题描述】:

情况是这样的:我们有一个 SQL Server 复制订户数据库,它从我们的一个核心 OLTP 系统接收复制数据,我们将其用作填充数据仓库的源。 (我们的 OLTP 数据库也由第三方供应商托管)。

为了提高订阅者的性能,我想删除早于我们建立的数据保留限制的数据行。我们不能在发布者数据库中执行此操作并让删除复制下来,因为这会成本过高(供应商),并且可能会加重使用前端的其他业务部门。

我想知道是否可以继续并在订阅者数据库上执行数据保留删除,而不会 (a) 以某种方式中断复制或 (b) 复制只是重新填充那些已删除的行。这可能吗?

【问题讨论】:

    标签: sql-server replication


    【解决方案1】:

    是的,这是可能的。您在订阅者上删除的行将消失并保持消失。复制不会因此中断,因为在最坏的情况下,可以复制 DELETEUPDATE 语句,然后不会删除/更新任何内容(这不是错误)。

    但有一个重要的警告:如果您必须重新初始化订阅(由于各种原因可能需要重新初始化,例如,如果订阅者发生数据损坏或某些 *CENSORED* 插入不应该插入的数据和复制中断),将生成一个包含已删除行的新快照,然后该快照将重新出现在订阅者上。如果有很多行要删除(很可能通过批处理),您将不得不重新运行删除并注意它们不会产生巨大的负载。

    【讨论】:

      【解决方案2】:

      实际上,如果您从发布者数据库中删除相同的记录,复制也会中断。因为当命令尝试从订阅者中删除行时,它会给出错误,因为没有找到实际记录。

      我已经在事务复制上尝试过这个。我认为更新命令也会发生同样的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多