分布式事务-两阶段提交的错误恢复
2013-04-26 00:18
204 查看
原文链接: http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.2pc.doc%2Fdoc%2Fc0005034.html 阶段1错误
如果一个数据库说它没有准备好提交工作单元,数据库客户端将在提交过程的第二阶段回滚该工作单元。这种情况下将不会发送prepare消息给事务管理器数据库。
在第二阶段,客户端发送一个rollbak消息给所有参与的并且在第一阶段成功准备好的数据库。然后每个数据库写一个“ABORT”记录到日志文件,并释放被这个工作单元占用的锁。
如果一个参与的数据库提交工作单元失败(可能是由于通信失败),事务管理器数据库将尝试在提交失败的数据库上重新提交。如提交成功,应用程序将会被SQLCA通 知到。DB2®数据库在Linux,Unix,Windows平台上将确保数据库服务器中未提交的事务最终被提交。数据库管理器配置参数resync_interval用于指定重新提交的时间间隔。所有的数据库锁都被保留,直到工作单元被成功提交。
如果事务管理器数据库发生失败,它在重启的时候会重新同步这个工作单元。这个重新同步的过程会尝试完成所有的未完成事务(indoubt transactions);也就是,那些第一阶段已经成功完成,但第二阶段提交过程还没完成的事务。重新同步执行以下的步骤:连接那些在第一阶段准备好提交(PREPARED)的数据库
尝试在那些数据库上提交未完成事务(indoubt transactions)。(如果没找到未完成交易,数据库管理器假设数据库第二阶段的提交已成功完成。)
当所有参与数据库的未完成事务都被成功提交后,再在事务管理器数据库上提交未完成事务
如果其中之一的数据库失败并被重启, 该数据库的数据管理器将从事务管理数据库查询该事务的状态, 以决定是否应该回滚该事务. 如果没有在日志中发现该事务, 数据库管理器假定事务被回滚了, 并且将回滚在这个数据库中的未完成的事务. 否则, 数据库会等待从事务管理数据库发来一个提交请求.
如果这个事务是被一个事务处理监控器(XA兼容事务管理器), 数据库将总是依赖于这个TP监控器来发起同步.如果, 因为某些原因, 你不能等待事务管理器来自动解决未完成事务, 你可以采取一些操作来手动解决问题. 这个操作指南通常被称为"启发式决定"(making a heuristic decision).
by iefreer
两阶段提交的错误恢复(Error recovery during two-phase commit)
错误恢复是应用程序编程、系统管理和运维的一个常见任务。对于部署在多个远程服务器上的分布式数据库而言,发生网络和通信故障的概率更高。为了确保数据完整性,数据库管理员提供了两阶段提交流程。下面解释了DBA如何处理两阶段提交过程中发生的错误:阶段1错误
如果一个数据库说它没有准备好提交工作单元,数据库客户端将在提交过程的第二阶段回滚该工作单元。这种情况下将不会发送prepare消息给事务管理器数据库。在第二阶段,客户端发送一个rollbak消息给所有参与的并且在第一阶段成功准备好的数据库。然后每个数据库写一个“ABORT”记录到日志文件,并释放被这个工作单元占用的锁。
阶段2错误
这一阶段的错误处理依赖于第二阶段是提交还是回滚事务。如果第一阶段碰到了错误,第二阶段只会回滚事务。如果一个参与的数据库提交工作单元失败(可能是由于通信失败),事务管理器数据库将尝试在提交失败的数据库上重新提交。如提交成功,应用程序将会被SQLCA通 知到。DB2®数据库在Linux,Unix,Windows平台上将确保数据库服务器中未提交的事务最终被提交。数据库管理器配置参数resync_interval用于指定重新提交的时间间隔。所有的数据库锁都被保留,直到工作单元被成功提交。
如果事务管理器数据库发生失败,它在重启的时候会重新同步这个工作单元。这个重新同步的过程会尝试完成所有的未完成事务(indoubt transactions);也就是,那些第一阶段已经成功完成,但第二阶段提交过程还没完成的事务。重新同步执行以下的步骤:连接那些在第一阶段准备好提交(PREPARED)的数据库
尝试在那些数据库上提交未完成事务(indoubt transactions)。(如果没找到未完成交易,数据库管理器假设数据库第二阶段的提交已成功完成。)
当所有参与数据库的未完成事务都被成功提交后,再在事务管理器数据库上提交未完成事务
如果其中之一的数据库失败并被重启, 该数据库的数据管理器将从事务管理数据库查询该事务的状态, 以决定是否应该回滚该事务. 如果没有在日志中发现该事务, 数据库管理器假定事务被回滚了, 并且将回滚在这个数据库中的未完成的事务. 否则, 数据库会等待从事务管理数据库发来一个提交请求.
如果这个事务是被一个事务处理监控器(XA兼容事务管理器), 数据库将总是依赖于这个TP监控器来发起同步.如果, 因为某些原因, 你不能等待事务管理器来自动解决未完成事务, 你可以采取一些操作来手动解决问题. 这个操作指南通常被称为"启发式决定"(making a heuristic decision).
在autorestart=off时的错误恢复
如果autorestart数据库配置参数设置为OFF,并且在TM或RM数据库中存在未完成的事务,那么启动重新同步过程需要执行RESTART DATABASE命令。当从命令行处理器执行RESTART DATABASE命令时,要使用不同的会话。如果你从同一个会话(session)重起不同的数据库,先前调用建立的连接将被丢弃,必须重新启动一次。执行TERMINATE命令后,当LIST INDOUBTTRANSACTION命令返回不再有未完成的交易时, 执行TERMINATE命令来丢弃这个连接。by iefreer
相关文章推荐
- Oracle分布事务中最先提交分布式的3个阶段
- 分布式事务 - 两阶段提交与三阶段提交
- 分布式事务——使用消息队列消除两阶段提交
- 分布式事务处理两阶段提交实例
- 分布式事务-二阶段提交与三阶段提交
- 关于分布式事务、两阶段提交协议、三阶提交协议
- 分布式事务两阶段提交详解
- 分布式事务两阶段提交(2PC)的思考
- 对分布式事务及两阶段提交、三阶段提交的理解
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]
- 关于分布式事务、两阶段提交协议、三阶提交协议
- 分布式事务之两阶段提交
- 分布式事务处理两阶段提交实例2及注意
- 关于分布式事务、两阶段提交协议、三阶提交协议
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- 分布式事务:两阶段提交与三阶段提交
- 关于分布式事务、两阶段提交协议、三阶提交协议
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究