协调者收集所有来自参与者的响应。如果至少一个参与者报告启发式回滚并且至少一个参与者报告确认落实,那么该结果称为
混合事务结果。后果是发生以下事件:
- 协调者将以下消息写入其本身的数据库服务器消息日志:
Mixed transaction result. (pid=nn user=userid)
pid 值是协调者过程的用户过程标识号。
user 值是与协调者进程相关联的用户标识。与该消息相关联的是附加消息,这些附加消息列出每个报告了启发式回滚的参与者数据库服务器。附加消息采用以下形式:
Participant database server dbservername heuristically rolled back.
- 协调者向每个启发式回滚其工作片段的参与者发送消息,指导各参与者结束事务。
- 每个参与者都将 ENDTRANS 消息写入其逻辑日志缓冲区中。
(从事务表中除去该事务条目。)
- 协调者将 ENDTRANS 消息写入其逻辑日志缓冲区中。
(从共享内存事务表中除去该事务条目。)
- 协调者将错误 -698 返回至应用程序,如下所示:
-698 Inconsistent transaction. Number and names of servers rolled back.
- 与该错误消息相关联的是报告了启发式回滚的参与者数据库服务器的列表。如果大量数据库服务器回滚该事务,此列表可能会被截断。完整的列表始终包含在协调者数据库服务器的消息日志中。
在这种情况中,检查每个参与者数据库服务器站点上的逻辑日志并确定您的数据库系统是否一致。(请参阅确定事务是否不一致地实现。)