您现在的位置是:首页 > 文章详情

使用sp_dbmmonitorresults来监控镜像

日期:2017-03-16点击:389

使用sp_dbmmonitorresults来监控镜像


配置


首先,在msdb数据库执行存储过程sp_dbmmonitoraddmonitoring。这个系统存储过程在SQL Server代理新建一个定期更新镜像数据库信息的作业“Database Mirroring Monitor Job”。

 

使用以下脚本在每个镜像服务器上执行:

USE msdb; GO EXEC sp_dbmmonitoraddmonitoring; GO

 

你可以指定更新间隔(分钟)。此值可以是介于 1 到 120 分钟之间的值。 默认值为 1 分钟。

 

完成后,你可以使用sp_dbmmonitorresults快速拉取镜像状态数据。你可以指定结果返回的行数。默认为最后1行。还可以指定返回结果前是否更新状态。

 

可以使用以下脚本返回镜像状态数据。

EXEC sys.sp_dbmmonitorresults @database_name = 'InsertDatabaseNameHere', -- sysname @mode = 0, -- int @update_table = 0 – int

 

当前镜像的状态


为了获取1个数据库当前镜像的状态,你可以查询mirror_state列的值。你可以根据该值来配置如果状态异常时发出告警。查询如下:

DECLARE @MonitorResults AS TABLE ( database_name VARCHAR(255), role INT, mirror_state TINYINT, witness_status TINYINT, log_generat_rate INT, unsent_log INT, sent_rate INT, unrestored_log INT, recovery_rate INT, transaction_delay INT, transaction_per_sec INT, average_delay INT, time_recorded DATETIME, time_behind DATETIME, local_time DATETIME); INSERT INTO @MonitorResults EXEC sp_dbmmonitorresults @database_name = 'InsertDatabaseNameHere', @mode = 0, @update_table = 0; SELECT mirror_state FROM @MonitorResults;

 

可以返回的值为:

  • 0=Suspended

  • 1=Disconnected

  • 2=Synchronizing

  • 3=Pending Failover

  • 4=Synchronized

 

如果你配置了一个告警,检查小于2的值,你就可以知道镜像下线。

 

数据库当前角色


在镜像配置后,你可以跟踪给定数据库的角色。如果你总是想让某台服务器为主,那你可以修改以下查询来检查角色:

DECLARE @MonitorResults AS TABLE ( database_name VARCHAR(255), role INT, mirror_state TINYINT, witness_status TINYINT, log_generat_rate INT, unsent_log INT, sent_rate INT, unrestored_log INT, recovery_rate INT, transaction_delay INT, transaction_per_sec INT, average_delay INT, time_recorded DATETIME, time_behind DATETIME, local_time DATETIME); INSERT INTO @MonitorResults EXEC sp_dbmmonitorresults @database_name = 'InsertDatabaseNameHere', @mode = 0, @update_table = 0; SELECT role FROM @MonitorResults;

 

该查询返回值为:

  • 1=Principal

  • 2=Mirror

 

根据你的监控计划,你可以跟踪到什么时候一个数据库从主切换了。

 

见证的状态


如果你配置了见证服务器,你也要时刻监控见证服务器的状态,如果见证服务器下线,对镜像数据库的可用性是有影响的。你可以修改以下查询:

DECLARE @MonitorResults AS TABLE ( database_name VARCHAR(255), role INT, mirror_state TINYINT, witness_status TINYINT, log_generat_rate INT, unsent_log INT, sent_rate INT, unrestored_log INT, recovery_rate INT, transaction_delay INT, transaction_per_sec INT, average_delay INT, time_recorded DATETIME, time_behind DATETIME, local_time DATETIME); INSERT INTO @MonitorResults EXEC sp_dbmmonitorresults @database_name = 'InsertDatabaseNameHere', @mode = 0, @update_table = 0; SELECT witness_status FROM @MonitorResults;

 

返回结果如下:

  • 0=Unknown

  • 1=Connected

  • 2=Disconnected

 

笔者使用的是异步镜像,没有配置见证,所以值为0。如果配置了见证,可以跟踪它的状态,配置告警,知道什么时候值不为1了。

 

数据还没有发送到镜像

 

你可以跟踪等待发送到镜像的数据量。常常被称为发送队列。可以修改如下脚本:

DECLARE @MonitorResults AS TABLE ( database_name VARCHAR(255), role INT, mirror_state TINYINT, witness_status TINYINT, log_generat_rate INT, unsent_log INT, sent_rate INT, unrestored_log INT, recovery_rate INT, transaction_delay INT, transaction_per_sec INT, average_delay INT, time_recorded DATETIME, time_behind DATETIME, local_time DATETIME); INSERT INTO @MonitorResults EXEC sp_dbmmonitorresults @database_name = 'InsertDatabaseNameHere', @mode = 0, @update_table = 0; SELECT unsent_log FROM @MonitorResults;

 

参考:

sp_dbmmonitoraddmonitoring

https://msdn.microsoft.com/zh-cn/library/ms403582.aspx


sp_dbmmonitorresults

https://msdn.microsoft.com/zh-cn/library/ms366320.aspx

原文链接:https://blog.51cto.com/ultrasql/1907216
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章