2016-05-12 184 views
1

我有一个表table1。我想使用每个插入的触发器创建该表的审计,更新和修改事件。异步触发器vs触发器

在这张表中,我们一般不会执行批量更新,删除或插入。但有时会有数千条记录被修改。我只想知道哪种方法在这里有效。使用服务代理

  1. 简单触发器
  2. 异步触发器执行使用服务代理异步触发器少没有的插入,更新表现良好,并删除?

回答

2

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

+0

一旦我发送消息,至少我不必等待响应,并且我的交易没有被阻止 – gkarya42