SQL Server 2005中使用DDL觸發器監控資料庫變化
為了在資料庫結構發生變動而出現問題時,能夠跟蹤問題,定位問題的根源,我們可以利用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 |
用於儲存DDL事件的表在建立好之後,還需要建立一個DDL觸發器,監控AdventureWorks資料庫中DDL_DATABASE_LEVEL_EVENTS級別的所有事件:
CREATE TRIGGER Audit ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS DECLARE @data XML DECLARE @cmd NVARCHAR(1000) DECLARE @posttime NVARCHAR(24) DECLARE @spid NVARCHAR(6) DECLARE @loginname NVARCHAR(100) DECLARE @hostname NVARCHAR(100) SET @data = EVENTDATA() SET @cmd = @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(1000)') SET @cmd = LTRIM(RTRIM(REPLACE(@cmd,'',''))) SET @posttime = @data.value('(/EVENT_INSTANCE/PostTime)[1]', 'NVARCHAR(24)') SET @spid = @data.value('(/EVENT_INSTANCE/SPID)[1]', 'nvarchar(6)') SET @loginname = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)') SET @hostname = HOST_NAME() INSERT INTO dbo.AuditLog(Command, PostTime,HostName,LoginName) VALUES(@cmd, @posttime, @hostname, @loginname) GO |
為了在資料庫結構發生變動而出現問題時,能夠跟蹤問題,定位問題的根源,我們可以利用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 |
用於儲存DDL事件的表在建立好之後,還需要建立一個DDL觸發器,監控AdventureWorks資料庫中DDL_DATABASE_LEVEL_EVENTS級別的所有事件:
CREATE TRIGGER Audit ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS DECLARE @data XML DECLARE @cmd NVARCHAR(1000) DECLARE @posttime NVARCHAR(24) DECLARE @spid NVARCHAR(6) DECLARE @loginname NVARCHAR(100) DECLARE @hostname NVARCHAR(100) SET @data = EVENTDATA() SET @cmd = @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(1000)') SET @cmd = LTRIM(RTRIM(REPLACE(@cmd,'',''))) SET @posttime = @data.value('(/EVENT_INSTANCE/PostTime)[1]', 'NVARCHAR(24)') SET @spid = @data.value('(/EVENT_INSTANCE/SPID)[1]', 'nvarchar(6)') SET @loginname = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)') SET @hostname = HOST_NAME() INSERT INTO dbo.AuditLog(Command, PostTime,HostName,LoginName) VALUES(@cmd, @posttime, @hostname, @loginname) GO |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-591035/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2005中的DDL觸發器的實現SQLServer觸發器
- SQL Server資料庫監控SQLServer資料庫
- SQL Server資料庫級別觸發器SQLServer資料庫觸發器
- 資料庫觸發器,禁止DDL操作資料庫觸發器
- 利用Sql server 2005的資料庫觸發器開發的資料庫稽核追蹤系統SQLServer資料庫觸發器
- SQL Server 2005系列教學_ 觸發器SQLServer觸發器
- 資料庫監視器(SQL Server Profilter)資料庫SQLServerFilter
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- SQL Server 觸發器SQLServer觸發器
- SQL Server觸發器SQLServer觸發器
- SQL Server 監視資料檔案大小變化SQLServer
- SQL資料庫觸發器例項SQL資料庫觸發器
- sql server 2005資料庫快照SQLServer資料庫
- 淺談SQL Server觸發器的使用SQLServer觸發器
- sql-server觸發器SQLServer觸發器
- Sql Server系列:觸發器SQLServer觸發器
- Sql Server 2005資料庫分割槽SQLServer資料庫
- sql server 2005資料庫載入SQLServer資料庫
- 匯出Sql server 2005資料庫中某表的資料SQLServer資料庫
- 【SQL Server】-- 一觸即發之觸發器SQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- 深入講解SQL Server 2005資料庫中的SMOSQLServer資料庫
- 監控資料庫效能的SQL資料庫SQL
- SQL Server CDC配合Kafka Connect監聽資料變化SQLServerKafka
- SQL Server:觸發器詳解SQLServer觸發器
- ORACLE DDL觸發器Oracle觸發器
- oracle ddl 觸發器Oracle觸發器
- SQL Server中類似Oracle中before觸發器SQLServerOracle觸發器
- sql觸發器刪除資料庫中的級聯記錄SQL觸發器資料庫
- 資料庫效能SQL監控指令碼資料庫SQL指令碼
- Oracle 資料庫監控SQL語句Oracle資料庫SQL
- 【SQL】Oracle資料庫監控sql執行情況SQLOracle資料庫
- 【SQL】Oracle資料庫SQL監控報告示例SQLOracle資料庫
- SQL Server需要監控哪些計數器SQLServer
- SQL Server 2000中的觸發器使用SQLServer觸發器
- 爛泥:SQL Server 2005資料庫安裝SQLServer資料庫
- SQL Server 觸發器詳情HOPPSQLServer觸發器
- SQL server觸發器簡單示例SQLServer觸發器