SQL Server 2008 R2中配置作业失败后邮件发送通知
SQL Server日常维护中难免会遇到作业失败的情况。失败后自然需要知道它失败了,除了例行检查可以发现出错以外,有一个较实时的监控还是很有必要的。比较专业的监控系统比如SCOM虽然可以监控作业执行情况在出错时进行报警,但对于DBA来说可能可定制性不高,最主要的是负责监控的人员在看到报警后一般都需要立刻联系DBA来解决,对于一些重要性不高的作业失败了,大半夜把你叫起来,感觉肯定是不爽的。SQL Server 本身支持发送数据库邮件,结合发送邮件的功能,在作业失败后将出错情况通过邮件通知DBA,这样对于了解作业执行是否异常帮助是很大的。
配置步骤如下
1.配置数据库邮件
在管理节点下,找到“数据库邮件”,右击,选择“配置数据库邮件”
配置向导的“选择配置任务”步骤,可以选择第一项,这样可以按向导步骤配置各项。
点击“下一步"以后,如果之前没有启用数据库邮件功能,会弹出对话框询问是否启用。要继续下去,自然得选择”是“了。
启用数据库邮件功能实际上是启用了Database Mail XPs服务器设置
可以提前通过SQL语句来完成,如下:
- exec sp_configure 'show advanced options',1
- GO
- RECONFIGURE
- GO
- exec sp_configure 'Database Mail XPs',1
- GO
- RECONFIGURE
- GO
新建配置文件步骤,需要指定配置文件名,根据需要设置即可。说明不是必须的。
同时这一步必须添加一个SMTP账号,用来登录到邮件服务器发送邮件。点击”添加“按钮。
在新建数据库邮件账号对话框里,需要指定账号名、电子邮件地址、服务器名称,还要选择身份验证的方式。一般我们连接的邮件服务器都是需要通过用户名和密码的方式进行验证,所以要选择”基本身份验证“,并填写正确的用户名、密码以及确认密码。
这样就完成STMP账号的添加了,点击”下一步“继续
在”管理配置文件安全性“步骤可以保持默认的设置,也可以根据实际安全性要求进行设置。
在”配置系统参数“步骤,按需要酌情设置。账户重试次数有必要设置一下,这样在遇到邮件服务器短时间内无法连接的时候可以通过重试来尽量避免通知邮件收不到的情况发生。之后下一步完成向导就可以了。
配置完数据库邮件以后,最好测试一下数据库邮件工作是否正常。右击”数据库邮件“项选择”发送测试电子邮件“。
收件人填写为接收邮件的电子邮件地址。点击发送测试电子邮件按钮后,数据会尝试发送邮件。稍等片刻我们检查一下接受邮件的账号是否收到了邮件。没有收到就要检查之前配置的邮件账号信息是否正确了。
配置数据库邮件通过SQL语句方式配置如下
- --创建配置文件
- exec msdb.dbo.sysmail_add_profile_sp
- @profile_name = 'MailConfigForJob',
- @description = '数据库作业通知使用';
- --添加smtp邮件账号
- exec msdb.dbo.sysmail_add_account_sp
- @account_name = 'MailAccountForJob',
- @description = '作业通知邮件账号',
- @email_address = 'JobAlert@test.com',
- @mailserver_name='smtp.test.com',
- @port = 25,
- @username = 'jobalert',
- @password = 'userpassword';
- --将邮件账号与配置文件进行关联
- exec msdb.dbo.sysmail_add_profileaccount_sp
- @profile_name = 'MailConfigForJob',
- @account_name ='MailAccountForJob',
- @sequence_number = 1;
2.添加操作员
添加操作员的目的是用来指定接收邮件通知的接收人。
在SQL Server 代理下右击”操作员“,选择”新建操作员“
在新建操作员窗口,只需要指定姓名和电子邮件地址名称即可。电子邮件名称是指接收邮件的邮件地址。
创建操作员的SQL语句为
- exec msdb.dbo.sp_add_operator
- @name = N'JobMonitor',
- @email_address=N'jobmonitor';
3.设置作业的通知
假设要在一个已经存在的作业上设置邮件提醒,在作业属性里先选中”通知“选项卡,在右侧点击”电子邮件“复选框,之后在第一个下拉列表中选择之前创建的操作员”JobMonitor",后边的“当作业失败时”为默认选择项,也可以改成“当作业成功时”或“当作业完成时”,这个根据实际需要而定。对于作业比较多的情况设置作业成功也接收邮件的话,要经常查看很多通知邮件,很容易造成视觉疲劳,有可能把失败的邮件忽略掉。当然,有时候服务器异常导致作业没有执行,是不会发送任何邮件的,如果完成时发送邮件的话可以确定作业已经执行了,突然有一天没有收到邮件,那就得主动去检查一下了。
设置通知的SQL语句为
- exec msdb.dbo.sp_update_job
- @job_name = 'test',
- @notify_level_email = 2,
- @notify_email_operator_name = N'JobMonitor';