我可以在不中断复制的情况下从 SQL 服务器复制订阅者数据库中删除特定数据吗?
Can I delete specific data from SQL Server replication subscriber database without breaking replication?
情况是这样的:我们有一个 SQL 服务器复制订阅者数据库,它从我们用作填充数据仓库的源的一个核心 OLTP 系统接收复制数据。 (我们的 OLTP 数据库也由第三方供应商托管)。
为了提高订阅者的性能,我想删除早于我们建立的数据保留限制的数据行。我们不能在发布者数据库中执行此操作并将删除内容复制下来,因为这样做成本过高(供应商),并且可能会加剧使用前端的其他业务部门。
我想知道我是否可以继续在订阅者数据库上执行数据保留删除,而不会 (a) 以某种方式中断复制或 (b) 让复制简单地重新填充那些已删除的行。这可能吗?
是的,这是可能的。您在订阅者上删除的行将消失并保持不变。复制不会中断,因为在最坏的情况下,可以复制 DELETE
或 UPDATE
语句,然后不会 delete/update 任何内容(这不是错误)。
但有一个重要警告:如果您必须重新初始化订阅(出于各种原因,这可能是必要的,例如,如果订阅者发生数据损坏或一些*CENSORED* 插入了不应该插入的数据和复制中断),将生成一个包含已删除行的新快照,然后这些快照将重新出现在订阅者上。你必须重新运行你的删除,并注意如果有很多行要删除(很可能通过批处理),它们不会产生巨大的负载。
实际上,如果您也从发布者数据库中删除相同的记录,复制就会中断。因为当命令尝试从订阅者中删除行时,由于未找到实际记录,它会给出错误。
我已经在事务复制上试过了。我认为更新命令也会发生同样的情况。
情况是这样的:我们有一个 SQL 服务器复制订阅者数据库,它从我们用作填充数据仓库的源的一个核心 OLTP 系统接收复制数据。 (我们的 OLTP 数据库也由第三方供应商托管)。
为了提高订阅者的性能,我想删除早于我们建立的数据保留限制的数据行。我们不能在发布者数据库中执行此操作并将删除内容复制下来,因为这样做成本过高(供应商),并且可能会加剧使用前端的其他业务部门。
我想知道我是否可以继续在订阅者数据库上执行数据保留删除,而不会 (a) 以某种方式中断复制或 (b) 让复制简单地重新填充那些已删除的行。这可能吗?
是的,这是可能的。您在订阅者上删除的行将消失并保持不变。复制不会中断,因为在最坏的情况下,可以复制 DELETE
或 UPDATE
语句,然后不会 delete/update 任何内容(这不是错误)。
但有一个重要警告:如果您必须重新初始化订阅(出于各种原因,这可能是必要的,例如,如果订阅者发生数据损坏或一些*CENSORED* 插入了不应该插入的数据和复制中断),将生成一个包含已删除行的新快照,然后这些快照将重新出现在订阅者上。你必须重新运行你的删除,并注意如果有很多行要删除(很可能通过批处理),它们不会产生巨大的负载。
实际上,如果您也从发布者数据库中删除相同的记录,复制就会中断。因为当命令尝试从订阅者中删除行时,由于未找到实际记录,它会给出错误。
我已经在事务复制上试过了。我认为更新命令也会发生同样的情况。