【问题标题】:SQL Server : How to prevent Replication on Batch delete and allow on Daily basis delete operation?SQL Server:如何防止批量删除复制并允许每日删除操作?
【发布时间】:2016-02-22 09:02:50
【问题描述】:

我有一个在 SQL Server 2012 上运行的事务复制。它复制 INSERT、UPDATE 和 DELETE。

现在我面临一个条件(对于 DELETE 语句),它迫使我们:

  1. 仅复制每日 DELETE 操作
  2. 不要复制以年为基础的 DELETE 操作,因为我们要修剪创建的数据

我想我不能在这种情况下使用这个(见下图)选项

什么是实现这一目标的好方法?

【问题讨论】:

  • 你能解释一下吗?不要复制以年为基础的删除(批量)操作
  • 抱歉图片在我的域中被阻止,如果图​​片包含更多详细信息
  • @TheGameiswar 它是一个批量删除操作。由于我们只希望表中存在今年(CURRENT year)创建的数据,我们必须删除数据
  • @TheGameiswar 您可以尝试此链接以使图像正常工作res.cloudinary.com/cepot/image/upload/v1456132692/…
  • 您要解决的真正问题是什么?你是什​​么意思“批量删除”操作?批处理意味着您有多个语句作为单个命令发送。 BULK INSERT 操作以专门的方式处理插入大量数据。这些都不适用于DELETE,除非你的意思是TRUNCATE——完全不同的命令。如果“批处理”是指“超过 X 行”,那么您可能正在尝试使用错误的技术解决应用程序问题。删除 10 行或 10000 行没有区别

标签: sql-server transactional-replication


【解决方案1】:

不赞成投票。这是您的解决方案。

复制年度批量删除过程,假设删除过程是在某种存储过程中完成的,对吗?如果是这样,您所做的是启用“存储过程的复制执行”。启用此功能后,您将创建一个快照后脚本,该脚本会创建这些存储过程的虚拟版本。存储的过程只是空的。这样,当它在发布者上执行时,只有 proc 调用被复制并在订阅者上执行。而且由于订阅者的 proc 是空的,所以什么都没有发生。

如果每年的删除操作不是在存储过程中,那么您需要返回开发/运营团队并告诉他们将归档/维护调用放入不同的存储过程中这样你就可以做到以上几点了。

【讨论】:

  • 感谢您的建议,,,
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多