使用sp_dbmmonitorresults来监控镜像
使用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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
老司机带你攻破微信消息防撤回功能
前言: 微信聊天的时候,一疏忽竟然错过了什么,对方撤回了一条消息,一位×××给你发了一张不可描述的照片,下一秒她又后悔选择了撤回。那么到哪去寻找撤回的消息呢?难道我们就不能做点什么? 就在昨天,我的一位好友壳子@ZKeeer 使用itchat库做了小脚本写了一篇文章:初学python--微信防撤回功能改进(一个用处不大的功能) - 知乎专栏,在得到壳子的授权之后,我对他的代码进行了修改,并把代码包装成了可执行的exe文件用来造福更多有需要的朋友们。 这个工具暂时我们教叫它:wMsg wMsg能实现什么? 每当有好友撤回聊天信息的时候,文件传输助手会给你发送撤回的信息的内容,当前可以复原的信息包括:文字、图片、语音等。 wMsg如何使用? 为了让更多的朋友使用,我这里已经包装成了可执行exe文件,你需要用电脑下载该文件wMsg.exe,由于会产生中间文件,所以建议把wMsg.exe移动到一个新建文件夹:比如我在桌面新建了wMsg文件夹,并把下载的wMsg.exe移动到了该文件夹。 wMsg下载地址:http://down.51cto.com/data/2292498 双击wMsg.ex...
- 下一篇
监控SQL Server事务复制
监控SQL Server事务复制 通常,我们可以使用SSMS的复制监视器来监控复制。但我们不能24小时盯着看,得使用自动化的方式来监控它。微软在distribution数据库提供了系统存储过程dbo.sp_replmonitorsubscriptionpendingcmds,用于返回订阅上等待的命令数,以及需要投递所有这些命令到订阅者的时间的预估。我创建了一个每10分钟运行的作业,保存状态的历史记录数据到一个表,数据保留14天。 这个表在订阅者服务器的DBA数据库创建,代码如下: CREATETABLEdbo.Replication_Qu_History( Subscriber_dbvarchar(50)NOTNULL, Records_In_Quenumeric(18,0)NULL, CatchUpTimenumeric(18,0)NULL, LogDatedatetimeNOTNULL, CONSTRAINTPK_EPR_Replication_Que_HistoryPRIMARYKEYCLUSTERED ( Subscriber_dbASC,LogDateDESC )ONPR...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)