SQL Server数据库镜像基于可用性组故障转移
SQL Server数据库镜像基于可用性组故障转移
微软从SQL Server 2005开始引入数据库镜像,很快成为一个流行的故障转移解决方案。数据库镜像的一个大的问题是故障转移是基于数据库级别的,因此,如果某个数据库故障,镜像只会针对这个数据库切换,但是,其他数据库都仍然在主服务器上。缺点是越来越多的应用程序是基于多个数据库来构建,所以,如果某一个数据库故障转移而其他数据库仍然在主服务器上,那应用程序将无法工作。当这种情况发生的时候,我如何知晓?并执行该应用程序调用的所有数据库一起故障转移呢?
在SQL Server的所有功能中,有一种方式可以在数据库镜像故障发生时得到告警或者检查发生的事件。用于数据库镜像的事件提醒并不如你想象的那样直接,但它可以实现该功能。
对于数据库镜像,你可以选择使用跟踪事件,或者配置SQL Server告警来检查对于数据库镜像状态的改变的WMI(Windows Management Instrumentation)事件。
在开始之前,我们需要一些准备工作:
镜像数据库和msdb数据库必需启用service broker。可以使用如下查询来检查:
SELECT name, is_broker_enabled FROM sys.databases
如果service broker的值不为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“。
弹出”New Alert“界面,选择“WMI event alert”。需要注意一下查询的Namespace。默认,SQL Server会根据你操作的实例选择正确的名称空间。
对于Query,使用以下查询:
SELECT * FROM DATABASE_MIRRORING_STATE_CHANGE WHERE State = 7 OR State = 8
该数据从WMI获取,当数据库镜像状态变为7(手动故障转移)或8(自动故障转移)时,将会触发作业或者提醒。
此外,你可以进一步对于每一个特定的数据库定义查询:
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界面,可以配置当事件发生时如何处理。你可以配置当告警触发时执行一个作业,或者给操作者发送一个提醒。
最后,如下所示可以配置额外的选项。
配置示例
例如,一个应用程序有调用3个数据库(Customer、Orders和Log),如果其中一个数据库自动切换,你也想要两外两个数据库也一起故障转移。此外,这个镜像配置了一个见证服务器,如果发生故障,会自动故障转移。
以下展示了如何配置。
首先,我们只针对这3个数据库配置告警。
然后配置告警触发后运行哪个作业。
我们需要创建“Failover Databases”作业,用于当告警触发的时候运行。
对于SQL Server代理的“Failover Databases”作业,作业步骤如下:
IF EXISTS (SELECT 1 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 1 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 1 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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
第十一章 Shell常用命令与工具(二)
本章涉及命令如下: 11.31 wget 功能:非交互式网络下载,类似于HTTP客户端 常用选项: -b, --background 后台运行 日志记录和输入文件: -o, --output-file=FILE 日志写到文件 -a,--append-output=FILE 日志追加到文件 -d, --debug 打印debug信息,会包含头信息 -q, --quiet 退出,不输出 -i, --input-file=FILE 从文件中读取URL下载 下载选项: -t, --tries=NUMBER 设置链接重试次数 -O,--output-document=FILE 写入内容到文件 -nc, --no-clobber 跳过下载现有的文件 -c, --continue 断点续传 --progress=TYPE 设置进度条(dot和bar) -S, --server-response 打印服务器响应头信息 --spider 不下载任何内容 -T,--timeout=SECONDS 设置相应超时时间(还有--d...
- 下一篇
Mysql 性能优化——必胜之道
mysql的性能优化是运维和DBA们常常面对的问题,也是各大公司招聘人才时看中的要点之一。性能优化听上去很难,似乎只有大神才能做,然而,mysql的性能优化绝不是运维独自一个能完成的,DBA、开发、架构也要参与其中,齐心协力才能打赢性能优化之战。 本文将全面解说数据库优化的各个方面,主要也就是硬件、网络、系统、架构、软件这几个方面,其中软件主要包括软件版本、表设计、引擎、SQl语句、配置文件my.cnf等几个方面 一 硬件和网络 硬件和网络应该怎么优化呢?两个字“砸钱”!购买优质服务器,高性能多核cpu,高内存,高性能磁盘或者ssd盘等。硬件高配置是数据库高性能的基础,一般公司来说一台数据库机器配上72G内存已经足够了,具体配置也可根据公司的业务需求来添加。网络的基础配件性能越高越好,N兆光纤、N兆交换机、N兆网卡。当然,如果公司差钱,那就选择合适当前业务的基础配置即可。总之一句话:硬件与网络要用钱来优化! 二 系统 操作系统选择,首选当前流行稳定的版本,比如centos6.5 centos6.8,尽量少用5版本,如果公司处于整体环境升级阶段,可以直接换成最新的7版本,其性能优于5、6...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能