Sql-Server
更改數據擷取與記錄更改的觸發器
我將創建由觸發器填充的歷史表(在插入、更新、刪除之後)。由於只有 20% 的列將被更新,我決定只記錄更改的值 - 如果值沒有更改,
NULL
則將在歷史表中使用值。例如:歷史表列將是
sparse
,與記錄所有數據的普通實現相比,我將節省大量空間(這是由於我的測試和我的業務案例)。作為我的
SQL Server 2016 SP1 standard edition
支持Change Data Capture
,我想知道他們在使用它和基於觸發器的日誌記錄之間有什麼優點/缺點/差異嗎?
鑑於這兩件事之間的選擇,這就是我選擇觸發器的原因:
- 觸發器可以同步進行相關表更改(例如,如果您需要更新報告表或檢查參照完整性)
- 觸發器允許您以適合您的格式儲存數據,而 CDC 將其放在自己的 CDC 架構中,在可能不適用於您的報告的表中
- 觸發器可以具有檢查更新類型或更新源的邏輯,並且只記錄您想要記錄的內容
- 觸發器可以很容易地被暫時禁用,比如批量載入,或者如果企業面臨巨大的負載需求(比如黑色星期五銷售)
- 觸發器讓您可以放入更多業務邏輯,例如,如果您想將某種歷史記錄放在一張表中,而將其他類型的歷史記錄放在另一張表中
- 觸發器不會直接增加儲存成本(而 CDC 每行至少增加 34 個字節)