添加,刪除或修改數據庫的對象,一旦誤操作,可能會導致大麻煩,需要一個 數據庫管理員或開發人員對相關可能受影響的實體進行代碼的重寫。
為了在數據庫結構發生變動而出現問題時,能夠跟蹤問題,定位問題的根源, 我們可以利用DDL觸發器來記錄類似“用戶建立表”這種變化的操作, 這樣可以大大減輕跟蹤和定位數據庫模式的變化的繁瑣程度。
1、DDL觸發器介紹
DDL 觸發器是一種特殊的觸發器,它在響應數據定義語言 (DDL) 語句時觸發 。它們可以用於在數據庫中執行管理任務,例如,審核以及規范數據庫操作。
使用 DDL 觸發器,可以達到以下幾種目的:
要防止對數據庫架構進行某些更改。
希望數據庫中發生某種情況以響應數據庫架構中的更改。
要記錄數據庫架構中的更改或事件。
與標准的DML觸發器一樣,DDL 觸發器在響應事件時執行存儲過程。 但與標准 的DML觸發器不同的是,它們並不在響應對表或視圖的 UPDATE、INSERT 或 DELETE 語句時執行存儲過程。 它們主要在響應數據定義語言 (DDL) 語句執行存 儲過程。 這些語句包括 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 和 UPDATE STATISTICS 等語句。 執行 DDL 式操作的系統存儲過程也可以激發 DDL 觸發器。
2、如何使用DDL觸發器
第一步,需要建立一個表,用來記錄數據庫范圍內所有DDL操作。
下面的代碼在AdventureWorks范例數據庫中創建一個表,用於保存所有DDL操 作記錄:
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