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

总结

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

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

若要将 AlwaysOn 可用性组配置为在出现错误 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> 占位符。 需要对其进行更改以匹配环境。 此脚本是参考的示例。 完整脚本应在执行故障转移之前执行其他检查。