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 Profilter)資料庫SQLServerFilter
- SQL Server CDC配合Kafka Connect監聽資料變化SQLServerKafka
- sql-server觸發器SQLServer觸發器
- SQL Server:觸發器詳解SQLServer觸發器
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- 資料庫的觸發器的使用資料庫觸發器
- 【SQL】Oracle資料庫監控sql執行情況SQLOracle資料庫
- 【SQL】Oracle資料庫SQL監控報告示例SQLOracle資料庫
- SQL Server 觸發器詳情HOPPSQLServer觸發器
- [Kogel.Subscribe.Mssql]SQL Server增量訂閱,資料庫變更監聽SQLServer資料庫
- 淺入淺出SQL Server 觸發器SQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- 使用zabbix監控sql server的釋出訂閱SQLServer
- 動態監控input的值的變化 賦值value觸發賦值
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- MsSql資料庫使用SQL plus建立DDL和DML操作方法SQL資料庫
- SQL Server 資料庫 最佳化 效能瓶頸SQLServer資料庫
- SQL Server資料庫巡檢SQLServer資料庫
- sql server 2005資料庫快照SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL SERVER備份資料庫檔案(使用SSMS)SQLServer資料庫SSM
- 阿里雲RDS(SQL SERVER使用者控制檯監控資訊詳解)阿里SQLServer
- 資料庫檢視,索引,觸發器資料庫索引觸發器
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 監控 SQL Server 的執行狀況SQLServer
- 暑期自學 Day 09 | 資料庫(一)- SQL,DDL資料庫SQL
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- 第79篇 SQL Server資料庫如何最佳化SQLServer資料庫
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server 跨資料庫查詢SQLServer資料庫
- 資料庫映象 (SQL Server)操作模式資料庫SQLServer模式
- UAVStack的慢SQL資料庫監控功能及其實現SQL資料庫
- SQL Server 變更資料捕獲(CDC)SQLServer
- 資料庫監控---PIGOSS BSM資料庫Go