千家信息网

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略译者注:该脚本适合在SQL Server 2012\2014中配置为自动故障转移的副本中部署。前言在SQL Serve
千家信息网最后更新 2026年11月02日通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略


译者注:

该脚本适合在SQL Server 2012\2014中配置为自动故障转移的副本中部署。


前言

在SQL Server 2012和2014,在自动故障转移模式的AlwaysOn可用性组不会在数据库级别错误触发故障转移。例如:如果用户数据库的数据或日志文件失败,或者用户数据库损坏并导致状态从在线变为其他状态(如置疑),数据库群集不会自动故障转移可用性组。

在SQL Server 2016,我们在创建和修改可用性组命令的部分添加了一个额外的配置设置叫做DB_FAILOVER,如果在主副本的一个数据处于非在线状态将触发故障转移。意思是,如果AG配置为自动故障转移,并且处于同步状态的数据库遇到失败,数据库级别的错误将会触发自动故障转移。

添加这个脚本的方法,使你你可以再遇到磁盘故障时让群集执行自动故障转移。该VB脚本在脚本中指定的路径执行文件写入。如果写入失败,意味着磁盘失败并且脚本失败。失败的脚本导致群集中的脚本资源失败。如果在脚本资源上的依赖恰当配置,这将导致由于磁盘/VB脚本失败的群集触发故障转移。

因为这个脚本不需要连接或以任何方式利用SQL Server,你可以针对SQL Server 2012\2014\2016部署。但在2016中的收益不如配置启用参数DB_FAILOVER,因为一个数据库级别的失败导致自动故障转移。


翻译自:

https://blogs.msdn.microsoft.com/alwaysonpro/2016/01/14/enhance-alwayson-failover-policy-to-test-sql-server-database-data-and-log-drives/


在SQL Server 2012和2014,AlwaysOn健康诊断以多种方式检测SQL Server进程的健康。然而,没有在AlwaysOn可用性组上的数据库的可访问性或存活性的健康检测。如果承载可用性组数据库或日志文件的磁盘丢失,AlwaysOn健康诊断不会检测该事件,并且应用程序运行时错误访问数据库失败。丢失驱动器或访问承载可用性数据库数据和日志文件的驱动器错误,会影响访问你的生产数据的访问。

正如可用性组的自动故障转移的弹性故障转移策略所描述:

"损坏的数据库和置疑的数据库不会在任何失败条件级别上检测。因此,一个数据库损坏或置疑(是否由于硬件失败、数据故障或其他问题)绝不会触发自动故障转移。"

注意:SQL Server 2016增强数据库健康检测的AlwaysOn健康诊断。如果你的AlwaysOn可用性组开启数据库健康检测,并且数据库状态转化为非ONLINE状态(sys.databases.state_desc),整个可用性组将自动故障转移。可参考MSDN关于"CREATE AVAILABILITY GROUP"的"DB_FAILOVER"部分。

你可以通过检测磁盘健康来增强数据库的可用性。添加一个普通的脚本资源到你的可用性组资源组,做基本的针对承载可用性组数据库数据和日志文件的驱动器的读或写测试。以下描述如何添加一个普通脚本资源作为一个可用性组资源的依赖,通过甲苯的磁盘健康检查来增强AlwaysOn健康检测。


使用一个普通脚本资源来做基本的SQL Server数据和日志驱动器健康检查

这是一个高级别的描述关于部署普通的脚本资源来检测可用性组数据库驱动器健康。

添加一个普通的脚本集群资源到可用性组资源组。让可用性组资源依赖于普通资源脚本。这样,如果脚本资源报告IsAlive失败,Windows群集会尝试重启或者故障转移可用性组资源。

普通脚本集群资源IsAlive测试在特定的数据驱动器位置创建一个文本文件、在特定的日志驱动器位置创建一个文本文件。如果文件存在,脚本将会覆盖它。

该脚本打包为GenericScript_SQLIsAlive.zip,包括:

Sqlisalive.vbs

这个普通的脚本用Visual Basic脚本编写,并部署Windows群集IsAlive。

Add_SQLIsAliveScript.ps1

这个PowerShell脚本添加普通脚本资源到你的可用性组资源组,并设置可用组依赖于你的普通脚本资源。

Readme.txt

部署普通脚本资源的按步骤的指南,和如何测试脚本的额外指南。


部署普通脚本资源

I. 配置普通脚本sqlisalive.vbs。

数据和日志驱动器路径:

当前,普通脚本配置为测试一下驱动器和路径:c:\temp\data和c:\temp\log。对于测试目的,在每个副本的本地驱动器上创建这些路径(主副本和自动故障转移伙伴辅助副本)。之后,你可以修改它们为适当的你的数据库数据和日志文件位于的驱动器和路径。

DataDriveFile="c:\temp\data\ScriptFileData.txt"
LogDriveFile="c:\temp\log\ScriptFileLog.txt"


II. 配置和执行PowerShell脚本来部署普通脚本到你的可用性组。

注意:这个普通脚本只部署每60秒运行的IsAlive。

1. 确保你的可用性组有两个副本配置为自动故障转移。

2. 拷贝普通脚本文件到相同的本地存储路径,像配置为自动故障转移的副本的所有服务器的"C:\temp\sqlisalive.vbs"。

3. 创建用于健康检查的路径,C:\temp\data和C:\temp\log。

4. Add_SQLIsAliveScript.ps1脚本添加普通脚本资源到你的可用性组,并在普通脚本资源上添加一个依赖到你的可用性组资源。在Add_SQLIsAliveScript.ps1,修改如下变量:

设置$ag为你的可用性组名称。

设置$listener为你的可用性组监听器名称。如果你的可用性组没有监听器,设置$listener为""。

设置$scriptfilepath为你的sqlisalive.vbs脚本的路径和文件名。

5. 在承载主副本的服务器上,运行PowerShell脚本Add_SQLIsAliveScript.ps1去添加普通脚本资源到你的可用性组资源组。

6. 打开故障转移群集管理器,并检查可用性组资源组来确认添加了普通脚本资源到可用性组资源组。普通脚本应该出现在资源页面,并在可用性组资源组为在线状态。

7. 确认可用性组资源中在普通脚本资源上创建了依赖。

注意:

额外的readme.txt包含如何测试脚本资源来确认它可以故障转移到你的可用性组资源的指南。


通过普通脚本资源诊断失败检测

对承载主副本的节点生成群集日志,并搜索"Data Drive Create File"或"Log Drive Create File",以定位普通脚本资源IsAlive成功或失败的报告:

00001b04.00002924::2015/12/07-17:16:41.798 INFO [RES] Generic Script : Entering IsAlive
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script : Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script : Log Drive Create File Succeeded

或者例如,你设置\Data目录为只读:

00001b04.00002924::2015/12/07-17:17:41.801 INFO [RES] Generic Script : Entering IsAlive
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script : Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script : Data Drive Create File Failed
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script : Permission denied
00001b04.00002924::2015/12/07-17:17:41.804 ERR [RES] Generic Script : 'IsAlive' script entry point returned FALSE.'
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script : Return value of 'IsAlive' script entry point caused HRESULT to be set to 0x00000001.
00001b04.00002298::2015/12/07-17:17:41.804 WARN [RHS] Resource sqlisalive IsAlive has indicated failure.

脚本 资源 数据 可用性 普通 故障 数据库 健康 驱动器 驱动 文件 日志 检测 配置 副本 测试 状态 路径 磁盘 级别 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 耶加雪菲 金融科技与互联网金融 奇酷互联网络科技 广州宏创互联网科技 互联网科技网站 深圳艾佳互联网科技 互联网科技英文翻译 互联网科技有限公司 翻译 成都玖崟互联网科技有限公司乐商圈怎么样 欧洲十大科技互联网公司 栖莱科技互联网股份有限公司 互联网科技和信息 朱啸虎曾投资哪些互联网科技企业 工业互联网展湾科技股份有限公司 互联网企业科技类企业如何做账 容联科技互联网电商 恒生科技指数 中概互联网 科技互联网专业工作会议发言稿 互联网科技创新方面的资料 互联网科技公司 科技股互联网 互联网 科技创业 齐家互联网科技 科技大学互联网专业好不好 哈尔滨新华互联网科技学院 受益于互联网科技的高速发展 山东星卡互联网科技有限公司官网 济南小医互联网科技有限公司招聘 上海同邻互联网科技有限公司规模
0