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(如下圖)
根據紀錄大概可以知道是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