异步触发与触发

时间:2016-05-12 05:58:49

标签: sql-server triggers audit service-broker

我有一张桌子table1。我想在每次插入,更新和修改事件时使用触发器创建该表的审计。

在此表中,我们通常不会执行批量更新,删除或插入。但有时会修改数千条记录。我只是想知道哪种方法在这里有效。

  1. 简单触发器
  2. 使用服务代理的异步触发器
  3. 使用服务代理的异步触发器是否能够很好地执行插入,更新和删除操作?

1 个答案:

答案 0 :(得分:3)

SQL Server并不真正提供异步触发器。您所能做的就是拥有一个正常的同步触发器,并在此触发器中使用SEND将消息发送到托管在具有附加激活过程的队列上的Service Broker服务,并触发此激活过程运行,之后触发原始同步触发器提交的事务。如果触发“动作”,这是有意义的。是昂贵的,它应该被推迟,或者如果操作执行某些类似HTTP Web服务请求,它应该确保请求只在提交后发生。但是因为使一切运动的原始SEND必须在同步触发器中发生,所以基于Service Broker的异步触发器仍然受到同步触发器具有的原始限制(例如,它may not fire on bulk insert)。

要考虑的第二件事是转向异步' Service Broker支持的触发器有成本。要发送通知消息并接收它,您必须至少运行1次插入,2次更新和1次删除(代表SENDRECEIVE的基础操作)。您还必须处理异步异常:到您的异步时间为止。触发器运行,数据可能已经很好地改变了。

就个人而言,对于数据审核,我会更关注Change TrackingChange Data Capture