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

简介:

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

 

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

 

前提条件:

1. 配置好数据库邮件,有正确的Profile。

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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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分钟执行一次。


收到邮件效果如下:

wKiom1jI9bCQxzSlAAA4j4EOpfs282.png















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1906242,如需转载请自行联系原作者




相关文章
|
人工智能 运维 关系型数据库
|
监控 Java 应用服务中间件
达梦数据库DEM监控部署教程分享
达梦数据库DEM监控部署教程分享
1720 2
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
685 69
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
364 2
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
582 1
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
1636 1
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
649 0
|
SQL 弹性计算 数据库

热门文章

最新文章