SQL Triggers 小心服用,經驗小分享

SQL Triggers 小心服用,經驗小分享

今天在佈署一台SQL2012時,很自然的加了一個DDL Triggers在Server Level

主要是當Server有任何的DDL事件時會Mail給DBA

該Triggers內容很簡單,就只是做發出一封Mail的動作


Create Trigger trDba_DDLAudit
On All Server
For DDL_SERVER_LEVEL_EVENTS
As
Declare @ev Varchar(max);
Select @ev='The SQL Server [' + @@SERVERNAME + '].[' + @@SERVICENAME + '] DDL EVENT Happen At ' + convert(varchar(30),getdate(),120) + '. Please check it soon. EVENT:'+CONVERT(varchar(max),eventdata());
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'SendDBMail', 
@recipients = 'XXX@mail.tw', 
@subject = 'SQLServer 緊急通知 SQL Server DDL事件發生',
@body = @ev,
@body_format=TEXT;

設定完成後我也沒有測試該Triggers是否可以正常Work

過了不久,當我重啟整個SQL服務時發現SQL Agent居然起不來

因此我馬上查一下SQL的Error Log(如下圖)

 

10511511_859479694071505_1395785295932408824_o

 

根據紀錄大概可以知道是Profile有問題,Google一下發現是SendMail的Porfile有問題

因此趕緊查看該Triggers,結果發現Script中的Profile參數寫錯了導致該Triggers發生錯誤

而Triggers一旦發生錯誤,剛剛觸發該Triggers的程序也會失敗,所以當SQL Agent要啟動的時候會觸發Triggers

而Triggers發生錯誤會Rollback剛剛所有的交易,導致SQL Agent啟動失敗

所以Triggers請小心服用,不然屆時要Debug可是很費工的

我是ROCK

rockchang@mails.fju.edu.tw