我希望你们都可以帮助我解决一个非常简单的问题,但我正在努力寻找解决方案。
我们正在运行 SQL Server Standard 2016 并利用 2 个节点之间的可用性组。按照标准,每个可用性组只能有 1 个数据库。
每月一次,我们需要修补我们的服务器,手动故障转移每个组然后再回来修补是绝对痛苦的。我的解决方案是我有第三台服务器,它有节点 1 和 2 作为链接服务器,这有助于我管理 50 多个可用性组以及我们所做的其他一些与应用程序相关的事情。
我有一个到 2 个节点的连接,作为一项工作,我收集并更新服务器 3 上的一个表,其中包含 2 个主节点的每个数据库、可用性组名称、节点名称等。它每 5 分钟运行一次,并提醒我注意问题。
我的最后一步是现在在服务器 3 上拥有一个存储过程,这将允许我对可用性组进行故障转移,或者仅对一个等进行故障转移。它工作得很好,除了在一个节点上,在另一个节点上,我得到这个错误:
仅当您使用主数据库时才允许可用性组 DDL 操作。运行 USE MASTER 命令,然后重试可用性组 DDL 命令。
我的这个命令的代码如下:
SET @Query = 'EXEC (''ALTER AVAILABILITY GROUP [' + @CurrentAG + '] FAILOVER'') AT [' + @FailoverServer + '];'
EXEC sp_executesql @Query
最终得到这个命令:
EXEC ('ALTER AVAILABILITY GROUP [MyAvailGroup] FAILOVER') AT [DestinationLinkedServerNode];
感谢您对此的任何帮助。
要回答您的问题,如果您在主副本上执行以下操作,则应如下所示。
更好的解决方案是使用 dbatools 启动故障转移
Invoke-DbaAgFailover
。这样,您不必使用任何额外的服务器或链接服务器。这也将是非常灵活的解决方案。