监控SQL Server数据库异常镜像状态发告警邮件
监控SQL Server数据库异常镜像状态发告警邮件
在部署了数据库镜像之后,我们需要监控参与镜像的主数据库和镜像数据库的状态,如果状态异常,发送告警邮件。那么这个脚本需要在主和镜像服务器上都运行。
目录视图sys.database_mirroring对SQL Server实例上的每个数据库都包含一行(包括系统数据库和未配置镜像的数据库),当然也包含所有镜像数据库的状态信息。我们可以查询该目录视图,对于每个异常状态的镜像数据库触发告警邮件。笔者的环境配置的是异步镜像,依赖于手动故障转移。
前提条件:
1. 配置好数据库邮件,有正确的Profile。
2. 有权限发送邮件的有效Login,需要是msdb数据库中DatabaseMailUserRole角色成员。
3. 一对用于监控的镜像数据库。
DECLARE @state VARCHAR(30) DECLARE @DbMirrored INT DECLARE @DbId INT DECLARE @String VARCHAR(100) DECLARE @databases TABLE (DBid INT, mirroring_state_desc VARCHAR(30)) -- get status for mirrored databases INSERT @databases SELECT database_id, mirroring_state_desc FROM sys.database_mirroring WHERE mirroring_role_desc IN ('PRINCIPAL','MIRROR') AND mirroring_state_desc NOT IN ('SYNCHRONIZED','SYNCHRONIZING') -- iterate through mirrored databases and send email alert WHILE EXISTS (SELECT TOP 1 DBid FROM @databases WHERE mirroring_state_desc IS NOT NULL) BEGIN SELECT TOP 1 @DbId = DBid, @State = mirroring_state_desc FROM @databases SET @string = 'Host: '+@@servername+'.'+CAST(DB_NAME(@DbId) AS VARCHAR)+ ' - DB Mirroring is '+@state +' - notify DBA' EXEC msdb.dbo.sp_send_dbmail 'valid_mail_profile', 'DBA@xxx.com', @body = @string, @subject = @string DELETE FROM @databases WHERE DBid = @DbId END --also alert if there is no mirroring just in case there should be mirroring :) SELECT @DbMirrored = COUNT(*) FROM sys.database_mirroring WHERE mirroring_state IS NOT NULL IF @DbMirrored = 0 BEGIN SET @string = 'Host: '+@@servername+' - No databases are mirrored on this server - notify DBA' EXEC msdb.dbo.sp_send_dbmail 'valid_mail_profile', 'DBA@xxx.com', @body = @string, @subject = @string END
依赖于手动故障转移。将以上脚本放到主服务器和镜像服务器上的作业里,每5分钟执行一次。
收到邮件效果如下:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PowerShell 把quser 字符串结果转换为对象
今天豆子需要远程注销一个终端服务器的用户,操作很简单,首先quser获取远程用户的sessionID,然后logoff命令注销即可 quser/server:XXXX logoffsessionID/server:XXX 和早期的cmd和Linux的bash命令一样,quser的结果都是字符串。字符串的处理对于脚本来说比较麻烦,如果能够转换成标准的object对象就好了。 仔细观察一下quser的结果,可以看见他的输出结果很整齐,我如果能够把他中间的空格用逗号替换掉,那就是标准的csv格式,那就很容易转换为对象了。唯一的问题是有的列,比如sessionname为空,那我就需要数数到底多少个空格需要替换了 PSC:\users\yli\Documents>$a=quser/server:sydbcc02 PSC:\users\yli\Documents>$a USERNAMESESSIONNAMEIDSTATEIDLETIMELOGONTIME smithsrdp-tcp#516Active24692+13:293/14/20179:06AM llederbauerrdp-t...
- 下一篇
Java面向对象理论篇
面向对象:(学习王伟、传智等教程) 1.1)面向对象 面向对象是基于面向过程的编程思想 1.2)面向对象的思想特点 1.2.1)是一种更符合我们思考习惯的思想 1.2.2)把复杂的事情简单化 1.2.3)让我们从执行者变成了指挥者 2)类与对象 2.1)类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。 2.2)Java语言中最基本的单位是类。所以,我们要用类来体现事物。 类: 成员变量 事物属性 属性:用来描述对象的数据元素称为对象的熟悉 成员方法 事物行为 方法:对对象的属性行为的操作成为对象的方法 类:是一组相关的属性和行为的集合。是一个抽象的概念。 对象:是该类事物的具体存在,是一个具体的实例。(对象) 举例:学生:类 班长:对象 3、Java类的声明 语法格式: [< modifiers>] class < class_name> { [<attribute_declarations>] [<meth...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 2048小游戏-低调大师作品
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题