我理解2阶段提交体系结构。让有两个奴隶和一个主人,所有的准备阶段都顺利进行。当主从1请求提交时,提交就可以了。当主人要求从2提交时,它失败了。因此,主服务器现在需要回滚整个事务。我的问题是,既然奴隶1已经提交,那么它现在将如何运行?据我所知,承诺是充分和最终的。可能会在磁盘上保存点或日志以恢复状态,但这可能需要DBA的帮助。
SO - 参考资料
我一直在阅读两期锁定的内容,并了解到这涉及两个阶段:
1. Growing phase: locks are acquired gradually and no locks are released.
2. Shrinking phase: locks are released gradually and no locks are acquired.
我的问题是,两相锁定(而不是“严格的两相锁定”)机制如何知道它何时开始收缩阶段?除非DB知道事务中的所有查询(这违背了两阶段锁定机制的全部要点,这种机制应该能够在不知道事务中的所有查询的情况下确保可序列化),否则无法判断事务是否需要获得更多
我的Websphere应用程序有3个数据源。其中两个是XA,另一个是非XA。
我用@transactional注解了一个Java方法,从而使该方法成为事务性的。
在该方法中,执行了3个任务。第一个任务是使用一个XA数据源进行一些更新,第二个任务使用非XA数据源选择一些记录,最后一个任务使用另一个XA数据源再次进行一些更新。
但是,会抛出异常,并显示以下错误:An illegal attempt to commit a one phase capable resource with existing two phase capable resources
我想知道为什么会出现上面的错误,即使我的