监控SQL Server数据库异常镜像状态发告警邮件

  

<强>

,

在部署了数据库镜像之后,我们需要监控参与镜像的主数据库和镜像数据库的状态,如果状态异常,发送告警邮件。那么这个脚本需要在主和镜像服务器上都运行。

,

目录视图系统。database_mirroring对SQL Server实例上的每个数据库都包含一行(包括系统数据库和未配置镜像的数据库),当然也包含所有镜像数据库的状态信息。我们可以查询该目录视图,对于每个异常状态的镜像数据库触发告警邮件。笔者的环境配置的是异步镜像,依赖于手动故障转移。

,

<强>前提条件:

1。配置好数据库邮件,有正确的概要。

2。有权限发送邮件的有效登录,需要是msdb数据库中DatabaseMailUserRole角色成员。

3。一对用于监控的镜像数据库。

,

申报的东西   @state  VARCHAR (30)   声明   INT @DbMirrored    声明   INT @DbId    声明   @String  VARCHAR (100)   声明   @databases  TABLE  (DBid , INT, mirroring_state_desc  VARCHAR (30))   ——,get  status  for  mirrored 数据库   插入   @databases   选择   database_id, mirroring_state_desc   从   sys.database_mirroring   在哪里   mirroring_role_desc 拷贝(“本金”,“镜子”)   和   mirroring_state_desc  NOT 拷贝(“同步”、“同步”)   ——,iterate  through  mirrored  databases 以及send  email 警报   而   EXISTS  (SELECT  TOP  1, DBid 得到@databases  WHERE  mirroring_state_desc  IS  NOT 零)   开始   SELECT  TOP  1, @DbId =, DBid,, @State =mirroring_state_desc   得到@databases   SET  @string =,”主持人:,“+ @@servername +‘。’+演员(DB_NAME (@DbId), AS  VARCHAR) +,的,安康;DB  Mirroring  is “+ @state  +的DBA,安康;notify    EXEC  msdb.dbo.sp_send_dbmail “valid_mail_profile”,“DBA@xxx.com”, @body =, @string,, @subject =@string   DELETE 得到@databases  WHERE  DBid =@DbId   结束   ——also  alert  if  there  is  no  mirroring  just 拷贝case  there  should  be  mirroring :)   选择   @DbMirrored =, COUNT (*)   从   sys.database_mirroring   在哪里   mirroring_state  IS  NOT  NULL   如果   @DbMirrored =0   开始   SET  @string =,”主持人:,“+ @@servername +”,安康;No  databases 断开连接;mirrored 提醒却;能够server 作用;notify  DBA的   EXEC  msdb.dbo.sp_send_dbmail “valid_mail_profile”,“DBA@xxx.com”, @body =, @string,, @subject =@string   结束

,

依赖于手动故障转移。将以上脚本放到主服务器和镜像服务器上的作业里,每5分钟执行一次。


收到邮件效果如下:

监控SQL Server数据库异常镜像状态发告警邮件

监控SQL Server数据库异常镜像状态发告警邮件