日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用SQLServer2005DDL觸發(fā)器對數(shù)據(jù)庫進(jìn)行監(jiān)控

以下的文章主要向大家講述的是SQL Server 2005DDL觸發(fā)器監(jiān)控數(shù)據(jù)庫的相關(guān)變化,添加,刪除或是修改數(shù)據(jù)庫的相關(guān)對象,一旦誤操作,可能會導(dǎo)致大麻煩,需要一個數(shù)據(jù)庫治理員或開發(fā)人員對相關(guān)可能受影響的實(shí)體進(jìn)行代碼的重寫。

創(chuàng)新互聯(lián)專注于旌陽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都商城網(wǎng)站開發(fā)。旌陽網(wǎng)站建設(shè)公司,為旌陽等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

為了在數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變動而出現(xiàn)問題時,能夠跟蹤問題,定位問題的根源,我們可以利用SQL Server 2005DDL觸發(fā)器來記錄類似“用戶建立表”這種變化的操作,這樣可以大大減輕跟蹤和定位數(shù)據(jù)庫模式的變化的繁瑣程度。

(1)DDL觸發(fā)器介紹

DDL 觸發(fā)器是一種非凡的觸發(fā)器,它在響應(yīng)數(shù)據(jù)定義語言 (DDL) 語句時觸發(fā)。它們可以用于在數(shù)據(jù)庫中執(zhí)行治理任務(wù),例如,審核以及規(guī)范數(shù)據(jù)庫操作。

(2)使用 DDL 觸發(fā)器,可以達(dá)到以下幾種目的:

A:要防止對數(shù)據(jù)庫架構(gòu)進(jìn)行某些更改。

B:希望數(shù)據(jù)庫中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫架構(gòu)中的更改。

C:要記錄數(shù)據(jù)庫架構(gòu)中的更改或事件。

與標(biāo)準(zhǔn)的DML觸發(fā)器一樣,DDL 觸發(fā)器在響應(yīng)事件時執(zhí)行存儲過程。 但與標(biāo)準(zhǔn)的DML觸發(fā)器不同的是,它們并不在響應(yīng)對表或視圖的 UPDATE、INSERT 或 DELETE 語句時執(zhí)行存儲過程。 它們主要在響應(yīng)數(shù)據(jù)定義語言 (DDL) 語句執(zhí)行存儲過程。 這些語句包括 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 和 UPDATE STATISTICS 等語句。 執(zhí)行 DDL 式操作的系統(tǒng)存儲過程也可以激發(fā) DDL 觸發(fā)器。

(3)如何使用DDL觸發(fā)器

第一步,需要建立一個表,用來記錄數(shù)據(jù)庫范圍內(nèi)所有DDL操作。

下面的代碼在PB2K數(shù)據(jù)庫中創(chuàng)建一個表,用于保存所有DDL操作記錄:

 
 
 
 
  1. USE AdventureWork
  2. GO
  3. CREATE TABLE AuditLog
  4. (ID INT PRIMARY KEY IDENTITY(1,1),
  5. Command NVARCHAR(1000),
  6. PostTime NVARCHAR(24),
  7. HostName NVARCHAR(100),
  8. LoginName NVARCHAR(100)
  9. )
  10. GO

第二步,用于保存DDL事件的表在創(chuàng)建好之后,還需要建立一個SQL Server 2005DDL觸發(fā)器,監(jiān)控PB2K數(shù)據(jù)庫中DDL_DATABASE_LEVEL_EVENTS級別的所有事件:

 
 
 
 
  1. CREATE TRIGGER Audit ON DATABASE
  2. FOR DDL_DATABASE_LEVEL_EVENTS
  3. AS
  4. DECLARE @data XML
  5. DECLARE @cmd NVARCHAR(1000)
  6. DECLARE @posttime NVARCHAR(24)
  7. DECLARE @spid NVARCHAR(6)
  8. DECLARE @loginname NVARCHAR(100)
  9. DECLARE @hostname NVARCHAR(100)
  10. SET @data=EVENTDATA()
  11. SET @cmd=@data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','NVARCHAR(1000)')
  12. SET@cmd=LTRIM(RTRIM(REPLACE(@cmd,'','')))
  13. SET@posttime=@data.value('(/EVENT_INSTANCE/PostTime)[1]','NVARCHAR(24)')
  14. SET@spid=@data.value('(/EVENT_INSTANCE/SPID)[1]','nvarchar(6)')
  15. SET@loginname=@data.value('(/EVENT_INSTANCE/LoginName)[1]',
  16. 'NVARCHAR(100)')
  17. SET@hostname=HOST_NAME()
  18. INSERT INTO dbo.AuditLog(Command,PostTime,HostName,LoginName)
  19. VALUES(@cmd,@posttime,@hostname,@loginname)
  20. GO

使用 EVENTDATA 函數(shù),可以捕捉有關(guān)激發(fā) DDL 觸發(fā)器的事件的信息,并將其保存到我們的AuditLog日志表中。EVENTDATA 函數(shù)的是返回 xml 值,采用以下的命令進(jìn)行解析:

 
 
 
 
  1. SET @cmd = LTRIM(RTRIM(REPLACE(@cmd,'','')))

需要LTRIM和RTRIM是所有的左邊的前導(dǎo)空格和右邊的尾隨空格,而REPLACE函數(shù)是用來消除使用SSMS腳本向?qū)r所帶來的回車。

第三步,一旦建立了表和觸發(fā)器,我們就可以用以下的操作,來測試看看SQL Server 2005DDL觸發(fā)器是否正常運(yùn)行:

 
 
 
 
  1. UPDATE STATISTICS Production.Product
  2. GO
  3. CREATE TABLE dbo.Test(col INT)
  4. GO
  5. DROP TABLE dbo.Test
  6. GO
  7. --View log table
  8. SELECT * FROM dbo.AuditLog
  9. GO

執(zhí)行后,查詢結(jié)果如下所示:

圖1: AuditLog日志表查詢結(jié)果

(4)小結(jié)

通過創(chuàng)建一個日志表來保存所有DDL操作以及創(chuàng)建數(shù)據(jù)庫級別的SQL Server 2005DDL觸發(fā)器,我們能夠成功地捕捉我們的數(shù)據(jù)庫中所有DDL級的變化,為DBA跟蹤和監(jiān)視任何改變提供了更強(qiáng)大的功能。


分享文章:用SQLServer2005DDL觸發(fā)器對數(shù)據(jù)庫進(jìn)行監(jiān)控
標(biāo)題URL:http://www.dlmjj.cn/article/djocogs.html