資料庫物件的新增、刪除或修改一旦發生誤操作,可能導致嚴重後果,迫使資料庫管理員或開發人員重寫相關程式碼。為了在資料庫結構變更出現問題時能夠追蹤並定位根因,我們可以善用 DDL 觸發器記錄如「使用者建立資料表」等操作,大幅降低追蹤與定位資料庫結構變更的繁瑣程度。
DDL 觸發器是一種特殊觸發器,它會在回應資料定義語言 (DDL) 陳述式時觸發。可用於執行資料庫管理任務,例如稽核與規範資料庫操作。透過 DDL 觸發器可達成下列目的:
與標準 DML 觸發器類似,DDL 觸發器在回應事件時執行預存程序。但不同於 DML 觸發器會針對 UPDATE、INSERT、DELETE 陳述式觸發,DDL 觸發器主要回應 CREATE、ALTER、DROP、GRANT、DENY、REVOKE、UPDATE STATISTICS 等 DDL 陳述式,執行 DDL 風格操作的系統預存程序也能啟動 DDL 觸發器。
第一步,建立一張資料表記錄資料庫範圍內所有 DDL 操作。以下程式碼在 AdventureWorks 範例資料庫中建立稽核記錄表:
USE AdventureWorks
GO
CREATE TABLE AuditLog
(
ID INT PRIMARY KEY IDENTITY(1,1),
Command NVARCHAR(1000),
PostTime NVARCHAR(24),
HostName NVARCHAR(100),
LoginName NVARCHAR(100)
)
GO
接著建立 DDL 觸發器,攔截資料庫層級的 DDL 事件並寫入稽核表。這樣即可完整記錄誰在何時執行了何種結構變更指令,為事後追溯提供可靠依據。