[SQL]資料庫備份異常透過 E-Mail 通知

很多時候當資料庫發生異常的時候,才會知道原來資料庫是沒有正常備份,因此我們可以做一點簡單的設定,讓備份失敗的時候可以做個通知,或許會比較保險一點。

這幾天有同事來抱怨說「某某客戶客訴」,他不知道該怎麼來處理。因此很好奇的了解一下,到底是發生甚麼事情了。原來是安裝人員太好心,原本擔心客戶使用資料庫不知道該如何進行備份,因此協助客戶使用 SQL Server 的維護計畫,建立了一個自動備份的設定,一開始這些都沒有問題,後來客戶因為某些原本把原本備份目錄給刪除了,造成備份失敗。但客戶不知道備份都沒有成功,導致資料庫發生異常的時候,才發現到之前的備份都沒有。

 

關於這種客戶行為我也愛莫能助,只能協助服務人員在維護計畫上加上 Database Mail 的設定,讓以後備份有失敗的時候可以進行通知。


 

要設定 Database Mail,我們可以在 SSMS 連接到 SQL Server 之後,選擇「管理」→「Database Mail

image

 

按下滑鼠右鍵選擇「設定 Database Mail

image

 

透過導引的方式,一步一步來進行設定

image

 

選擇「執行下列工作以設定 Database Mail

image

 

如果您之前都沒有設定過,則會出現以下的提示訊息,當你回答是之後,就會將 「Database Mail XPs」的選項設定為 1,後續就可以使用 Database Mail 功能。

image

 

如果後續你想要確認這個設定是否有開啟,也可以用下面的語法來查詢


sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs'
GO
RECONFIGURE
GO
sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO

接著要指定「設定檔名稱」,並且透過「加入」的按鈕,來新增 SMTP Server 的相關資訊,在這裡可以新增多組的設定,這樣當一個無法使用的時候,則會自動使用後面的設定檔來進行寄信通知。

image

 

這裡我先測試使用 outlook.com 申請的免費信箱,因此伺服器名稱使用「smtp-mail.outlook.com」,並且設定「需要安全連接( SSL)」。雖然這個方式是可以,但如果寄送的次數過多,而他會把信箱給鎖住不讓你再次寄信,因此如果真正要使用的話,或許可以改用 GMail 的信箱,限制就會比較寬鬆一點。

image

 

接下來指定這組設定的是「公用」,因為在後面的範例中我們是直接設定 SQL Agent Job 的通知,因此 SQL Agent 內會指定要使用哪個「設定檔」,因此這個可以不用將這個設定檔設定為「預設」;但如果你是在維護計畫或 SSIS 封裝內的流程,會使用到「通知操作員工作」,那麼就要有一組設定檔要設定為「預設」,這樣才能正常使用 Database Mail。

image

 

image

image


  

當完成上述設定之後,接下來我們可以先測試一下,確認相關 SMTP 的設定都是正常的

image

 

輸入「收件者

image

 

image

 

確認測試信件可以正常收到,那麼應該就沒有問題了。

image


 

接著用維護計畫來建立一組設定,然後在 Agent Job 上設定通知。因此我們透過「管理」→「維護計畫」→「新增維護計畫

image

 

指定一個計畫名稱

image

 

接下來我們可以透過「工具箱」,拖拉一個「備份資料庫工作」,然後設定要備份的資料庫和相關備份參數,並且排程內設定好備份週期時間,就可以存檔完成設定。

image

 

當完成維護計畫設定之後,就會在 SQL Agent Job 內多了一項工作,因此我們要做通知的話,則需要先在 SQL Agent 上設定所要使用的 Database Mail 設定檔。因此我們在 SSMS 上面,選擇 SQL Server Agent 上,按滑鼠右鍵,選擇「屬性

image

 

選擇「警示系統」,在郵件工作階段,設定要使用 Database Mail 與 Database Mail 設定檔的名稱,這樣後續要寄送通知的時候,就可以透過該組設定來寄信。

image

 

而要通知的話,除了完成上述的設定之後,接下來就要建立一個操作員,以便讓 SQL Agent Job 可以設定當失敗的時候,要通知誰。因此我們選擇「SQL Server Agent」→「操作員」,按下滑鼠右鍵「新增操作員

image

 

選擇「一般」,指定操作員的名稱和 E-Mail ( 如果需要通知到許多人的話,可以在每個 Email 帳號之間加入「 ; 」做區隔,就可以一次通知多人了 )

image

 

完成上述的設定之後,那所有準備工作就告一個段落,接下來我們就要在我們剛剛所產生的 JOB 上來設定。因此選擇到我們剛剛建立 Job 上面,按下滑鼠右鍵選擇「屬性

image

 

接著我們選擇「通知」,指定要使用電子郵件通知給我們剛剛所建立的操作員,把狀態設定為「當作業失敗時」,這樣就完成相關設定了。

image

 

完成上述設定,基本上就大功告成了,因此後續如果有備份發生失敗時,則系統就會按照設定,通知相關人員了。

image