2016-05-12 155 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