在高可用性集群环境中,在主服务器故障转移之后,使用 FAILOVER_TX_TIMEOUT 配置参数来启用事务完成。
使用 FAILOVER_TX_TIMEOUT 配置参数来指出在服务器回滚事务之前,服务器等待故障转移之后的最大秒数。在高可用性集群中, 所有服务器上的 FAILOVER_TX_TIMEOUT 配置参数都设置为同一个值。
当在高可用性集群环境中发生故障转移时,辅助服务器之一取代主服务器的角色。成为新的主服务器的辅助服务器称为故障转移服务器。
通过设置 FAILOVER_TX_TIMEOUT 配置参数为一个大于零的值,启用事务存活。当启动事务存活时,故障转移服务器必须能够联系剩余的辅助服务器来同步并恢复任何打开的事务。类似地,存活的辅助服务器必须能建立到故障转移服务器的连接来重新发送任何挂起的事务。FAILOVER_TX_TIMEOUT 配置参数指定服务器开始回滚事务之前等待的时长。
在故障转移服务器上,如果超过了 FAILOVER_TX_TIMEOUT 指定的秒数,则任何不与存活服务器同步的打开的事务都终止并回滚。
在剩余的辅助服务器上,如果超过了 FAILOVER_TX_TIMEOUT 指定的秒数,则服务器上任何打开的事务都返回错误。
当发生故障转移时,设置 FAILOVER_TX_TIMEOUT 为 0 来立即回滚所有打开的事务。
如果主服务器故障,且辅助服务器未能取代主服务器的角色,那么回滚任何打开的事务,且客户端不能进行更新。例如,如果在辅助服务器上启动更新活动且主服务器故障,那么故障转移过程不完成且不建立新的主服务器,在预定的时间量之后,客户端要求超时,将 sqlexec 线程置于不确定状态。
在上述场景中,回滚活动的事务,但直到建立新主服务器才可发生物理回滚(因为主服务器管理日志)。在这些情况下,会话觉察不到在辅助服务器上执行的操作。会话觉察不到部分应用的事务回滚,因为直到建立新的主服务器才可发生部分事务的回滚。