如何将Always On可用性组配置为在数据库数据文件不可用时执行故障转移

摘要

在SQL Server Always On可用性组中,仅当数据库事务日志中出现磁盘故障或类似) 错误 (时,数据库级运行状况检测才能执行故障转移。

如果数据文件上发生错误,SQL Server仅将故障通知发送到 Windows Server 故障转移群集 (WSFC) ,并依赖它根据策略配置做出正确的决策。

若要将Always On可用性组配置为在出现错误 823 和其他错误时执行故障转移,请使用以下过程之一:

配置故障转移群集管理器

此过程设置 WSFC 策略,以便故障转移到其中一个可能的所有者,而不是尝试在当前主节点上重启角色。

  1. 打开故障转移群集管理器。

  2. 展开群集并选择“ 角色”。

  3. 右键单击 AG 角色,然后选择“ 属性>策略”。

  4. 指定时间段内最大重启数 的值设置为 0

  5. 选中“ 如果所有重启尝试都失败,请在指定的时间段 (hh:mm) 后再次开始重启 ,然后选择” 确定”。

  6. 确保两个节点都是 可能的所有者首选所有者

自定义配置选项

此过程提供了一个示例,说明如何利用 SQL Server 和 SQL Server 代理 中的可用警报机制来检测错误并执行故障转移。

  1. 在“SQL Server Management Studio”中,展开“SQL Server 代理”,右键单击“警报”,然后选择“新建警报...”

  2. “名称”指定值,为“类型”选择“SQL Server事件警报”,根据列表将“错误编号”的值指定为 823 或任何其他所需的错误,然后选择“确定”。

  3. 选择“响应”,检查“执行作业”,选择所需的作业,然后选择“确定”。

  4. 在“作业步骤属性”对话框中,为“步骤名称”指定值,为“类型”选择“操作系统 (CmdExec) ”,然后选择“SQL Server 代理服务帐户”作为运行方式

  5. 输入以下故障转移 sqlcmd 命令:

    sqlcmd -S <SecondaryReplicaName> -U SQLADMIN -P <YourPassword> -Q "ALTER Availability Group <AGName> Failover"

    注意

    <SecondaryReplicaName><YourPassword><AGName> 是占位符。 需要更改它以匹配你的环境。 此脚本是一个参考示例。 在执行故障转移之前,完整脚本应执行其他检查。