2016年6月17日 星期五

[SQL]資料庫備份異常透過 E-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
Trouble Shooting :
   1、由于邮件服务器故障,无法将邮件发送给收件人。 (使用帐户 1 (2010-08-27T14:03:24) 发送邮件。 异常邮件: 无法连接到邮件服务器。 (您的主机中的软件放弃了一个已建立的连接。 xxx.xxx.xxx.xxx:25)。
   其实,这个问题很可能是服务器的防火墙做了拦截,我们使用卖咖啡的防火墙,所以很有可能是它限制了25端口的访问和对外连接,我们进入卖咖啡控制台,在“访问控制”这一栏,有一条规则叫做:禁止大量发送邮件的蠕虫病毒发送邮件。我们看到这里限制了25端口的使用,在这里,可以设置sql 邮件进程为例外,即可发送邮件,以SQL 2005为例,它的邮件进程是DatabaseMail90.exe,再加入了例外列表中后,在进行发送测试,即可在收件箱中看到发送过来的测试邮件了。   貌似这是目前最大的一个问题,其实有网友问我关于那个身份验证的选择,我曾经勾选过:基本,可以发送。对于第一个验证模式,还没有测试过。
   2、由于邮件服务器故障,无法将邮件发送给收件人。 (使用帐户 1 (2010-08-27T14:16:41) 发送邮件。 异常邮件: 无法将邮件发送到邮件服务器。 (服务器不支持安全连接。)。
   还记得账号配置页面吗,去掉那个“此服务器要求安全连接(SSL)”这个选项就行了。
   3、由于邮件服务器故障,无法将邮件发送给收件人。 (使用帐户 1 (2010-08-27T14:22:02) 发送邮件。 异常邮件: 无法将邮件发送到邮件服务器。 (不允许使用邮箱名称。 服务器响应为: authentication is required,wmsvr1,LWR4CkCZpkJ9WXdMq+YDAA--.5071S2 1282890110)
   你可能在账号配置界面中没有正确的配置身份验证信息,比如你选择了基本身份验证,那么账号那里得特别注意,有时候只需要填写@符号前的账号信息即可,有时却需要完整填写整个邮箱名称作为账号,或者邮箱密码不对,请认证查找原因。

1 則留言:

  1. 你好,可以請教你,我現在有的問題(SQL 2014)的管理底下沒有DATABASE MAIL的選項,有解決的方法嗎?

    回覆刪除