SQL Server数据库镜像基于可用性组故障转移

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

微软从SQL Server 2005开始引入数据库镜像,很快成为一个流行的故障转移解决方案。数据库镜像的一个大的问题是故障转移是基于数据库级别的,因此,如果某个数据库故障,镜像只会针对这个数据库切换,但是,其他数据库都仍然在主服务器上。缺点是越来越多的应用程序是基于多个数据库来构建,所以,如果某一个数据库故障转移而其他数据库仍然在主服务器上,那应用程序将无法工作。当这种情况发生的时候,我如何知晓?并执行该应用程序调用的所有数据库一起故障转移呢?

 

在SQL Server的所有功能中,有一种方式可以在数据库镜像故障发生时得到告警或者检查发生的事件。用于数据库镜像的事件提醒并不如你想象的那样直接,但它可以实现该功能。

 

对于数据库镜像,你可以选择使用跟踪事件,或者配置SQL Server告警来检查对于数据库镜像状态的改变的WMI(Windows Management Instrumentation)事件。

 

在开始之前,我们需要一些准备工作:

 

镜像数据库和msdb数据库必需启用service broker。可以使用如下查询来检查:

1
2
SELECT  name , is_broker_enabled
FROM  sys.databases

 

如果service broker的值不为1,你可以对每个数据库使用以下命令开启。

1
ALTER  DATABASE  msdb  SET  ENABLE_BROKER

 

如果SQL Server代理正在运行,那么这个命令将不会完成。你需要先停止SQL Server代理,运行以上命令,然后再次启动SQL Server代理。

 

最后,如果SQL Server代理没有运行,你需要启动它。

 

创建告警

 

首先,我们来创建告警,与其他告警不同的是,我们会选择”WMI event alert“类型。

 

使用SSMS连接到实例,展开SQL Server Agent,在Alerts上点击右键,选择“New Alert“。

clip_image001

 

弹出”New Alert“界面,选择“WMI event alert”。需要注意一下查询的Namespace。默认,SQL Server会根据你操作的实例选择正确的名称空间。

clip_image003

 

对于Query,使用以下查询:

1
SELECT  FROM  DATABASE_MIRRORING_STATE_CHANGE  WHERE  State = 7  OR  State = 8

 

该数据从WMI获取,当数据库镜像状态变为7(手动故障转移)或8(自动故障转移)时,将会触发作业或者提醒。

 

此外,你可以进一步对于每一个特定的数据库定义查询:

1
SELECT  FROM  DATABASE_MIRRORING_STATE_CHANGE  WHERE  State = 8  AND  DatabaseName =  'Test'

 

可以阅读下联机帮助中DATABASE_MIRRORING_STATE_CHANGE的内容。

以下是可以被监控到的不同状态改变的列表。更多内容,可以从Database Mirroring State Change Event Class里找到。

  • 0 = Null Notification

  • 1 = Synchronized Principal with Witness

  • 2 = Synchronized Principal without Witness

  • 3 = Synchronized Mirror with Witness

  • 4 = Synchronized Mirror without Witness

  • 5 = Connection with Principal Lost

  • 6 = Connection with Mirror Lost

  • 7 = Manual Failover

  • 8 = Automatic Failover

  • 9 = Mirroring Suspended

  • 10 = No Quorum

  • 11 = Synchronizing Mirror

  • 12 = Principal Running Exposed

  • 13 = Synchronizing Principal

 

在Response界面,可以配置当事件发生时如何处理。你可以配置当告警触发时执行一个作业,或者给操作者发送一个提醒。

clip_image005

 

最后,如下所示可以配置额外的选项。

clip_image007

 

配置示例

 

例如,一个应用程序有调用3个数据库(Customer、Orders和Log),如果其中一个数据库自动切换,你也想要两外两个数据库也一起故障转移。此外,这个镜像配置了一个见证服务器,如果发生故障,会自动故障转移。

 

以下展示了如何配置。

 

首先,我们只针对这3个数据库配置告警。

clip_image009

 

然后配置告警触发后运行哪个作业。

clip_image011

 

我们需要创建“Failover Databases”作业,用于当告警触发的时候运行。

 

对于SQL Server代理的“Failover Databases”作业,作业步骤如下:

1
2
3
4
5
6
7
8
9
IF EXISTS ( SELECT  FROM  sys.database_mirroring  WHERE  db_name(database_id) = N 'Customer'  AND  mirroring_role_desc =  'PRINCIPAL' )
ALTER  DATABASE  Customer  SET  PARTNER FAILOVER
GO
IF EXISTS ( SELECT  FROM  sys.database_mirroring  WHERE  db_name(database_id) = N 'Orders'  AND  mirroring_role_desc =  'PRINCIPAL' )
ALTER  DATABASE  Orders  SET  PARTNER FAILOVER
GO
IF EXISTS ( SELECT  FROM  sys.database_mirroring  WHERE  db_name(database_id) = N 'Log'  AND  mirroring_role_desc =  'PRINCIPAL' )
ALTER  DATABASE  Log  SET  PARTNER FAILOVER
GO

 

以上的ALTER DATABASE命令对其他没有自动转移的数据库强制故障转移。这跟你再GUI界面上点击“Failover”是一样的。


参考:

https://msdn.microsoft.com/en-us/library/ms191502.aspx

https://msdn.microsoft.com/en-us/library/ms186449.aspx


















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



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
14天前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
22天前
|
SQL 关系型数据库 数据库
【YashanDB 知识库】OM 仲裁节点故障后手工切换方案和 yasom 仲裁重新部署后重新纳管数据库集群方案
本文介绍了一主一备数据库集群的部署步骤。首先在OM节点上传并解压软件包至指定路径,随后通过调整安装参数、执行安装和集群部署完成数据库设置。接着,在主备节点分别配置环境变量,并查看数据库状态以确认安装成功。最后,针对OM仲裁故障提供了手动切换方案,包括构造故障场景、关闭自动切换开关及使用SQL命令进行主备切换,确保系统高可用性。
|
1月前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
87 9
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
2月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
161 6
|
2月前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
3月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
106 11
|
3月前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
188 11
|
3月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。

热门文章

最新文章