何时执行启发式结束事务

仅在一种很少见的情况下,才必须运行 onmode -Z 选项来启动启发式结束事务。 当已启发式回滚的工作片段保持打开时会发生这种情况,它会使您的逻辑日志文件不能成为可用的文件。结果,逻辑日志将十分接近填满,这很危险。

通常,协调者会在合理时间段内发出其落实或回滚决策。 但是,如果协调者发生故障,不返回联机状态以结束在参与者数据库服务器上启发式回滚的事务,您可能会面临严重的问题。

问题应用场合以如下方式开始:
  1. 代表全局事务执行工作片段的参与者线程已向协调者发送 can commit 响应。
  2. 工作片段等待来自协调者的指令。
  3. 当工作片段正在等待时,逻辑日志填充超过长事务高水位标志。
  4. 正在等待指令的工作片段是长事务的来源。参与者数据库服务器指导执行线程回滚该工作片段。该操作就是启发式回滚。
  5. 参与者继续等待协调者指导其结束事务。事务保持打开。逻辑日志继续填充。

如果协调者联系参与者并指导其在合理的时间段内结束事务,那么不会产生任何问题。 如果在参与者数据库服务器上发生启发式回滚并且随后协调者发生故障,致使协调者不能指导参与者结束事务,那么会发生严重问题。

结果,事务保持打开。打开的事务使您不能备份逻辑日志文件以及释放逻辑日志中的空间。当逻辑日志继续填充时,它可能会达到互斥存取长事务高水位标志 (LTXEHWM) 指定的点。如果到达该点,正常的处理将暂挂。在到达高水位标志后的某个时刻,您必须判定打开的事务是否在危及您的逻辑日志。危险就是如果逻辑日志完全填满,那么数据库服务器关闭,并且您必须执行数据复原。

您必须决定是结束事务并保护您的系统不会有填满逻辑日志的可能性(而不考虑所有与运行 onmode -Z 相关联的问题),还是等着查看是否能及时重新建立与协调者的通信,以便在逻辑日志填满前结束事务。