问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
Oracle的分布式数据库恢复RECO?
RECO有一个非常核心的任务:由于两阶段提交(Two-Phase Commit,2PC)期间的崩溃或连接丢失等原因,有些事务可能会保持在准备状态,这个进程就是要恢复这些事务。2PC是一种分布式的协议,允许一个会影响多个不同数据库的修改实现原子提交。它力图在提交之前尽可能地关闭分布式失败窗口。如果在N个数据库之间采用2PC,其中一个数据库将成为协调器(coordinator)。这个站点会询问其他N-1个站点是否已准备好提交,实际上这个站点转向到另外这N-1个站点,让它们准备好提交。这N-1个站点都会返回其“准备就绪状态”是YES或NO。如果任何一个站点投票说NO,则整个事务都要回滚。如果所有站点都投票说YES,站点协调器就会广播一条消息,使这N-1个站点真正完成提交。
如果某个站点投票说YES,称其已经准备好提交,但是在得到协调器的指令并真正提交之前,网络失败了(或者出现了其他错误),这个事务就会成为一个可疑的分布式事务。2PC力图限制出现这种情况的时间窗口,但是无法根除这种情况。如果正好在那时(这个时间窗口内)出现一个失败,处理事务的工作就要由RECO负责。RECO会试图联系协调器来获得对该事务的处理结果。在此之前,事务会保持未提交状态。当站点恢复与事务协调器的通讯时,RECO可能会提交事务,也可能将事务回滚。
评论
有用 9
墨值悬赏