我有一张桌子table1
。我想在每次插入,更新和修改事件时使用触发器创建该表的审计。
在此表中,我们通常不会执行批量更新,删除或插入。但有时会修改数千条记录。我只是想知道哪种方法在这里有效。
使用服务代理的异步触发器是否能够很好地执行插入,更新和删除操作?
答案 0 :(得分:3)
SQL Server并不真正提供异步触发器。您所能做的就是拥有一个正常的同步触发器,并在此触发器中使用SEND
将消息发送到托管在具有附加激活过程的队列上的Service Broker服务,并触发此激活过程运行,之后触发原始同步触发器提交的事务。如果触发“动作”,这是有意义的。是昂贵的,它应该被推迟,或者如果操作执行某些类似HTTP Web服务请求,它应该确保请求只在提交后发生。但是因为使一切运动的原始SEND
必须在同步触发器中发生,所以基于Service Broker的异步触发器仍然受到同步触发器具有的原始限制(例如,它may not fire on bulk insert)。
要考虑的第二件事是转向异步' Service Broker支持的触发器有成本。要发送通知消息并接收它,您必须至少运行1次插入,2次更新和1次删除(代表SEND
和RECEIVE
的基础操作)。您还必须处理异步异常:到您的异步时间为止。触发器运行,数据可能已经很好地改变了。
就个人而言,对于数据审核,我会更关注Change Tracking和Change Data Capture。