我有应用程序代码在本地数据库和远程数据库中的记录(通过Oracle数据库链接)中插入一条记录。当我提交这个分布式事务时,它确保本地和远程数据库都会同时提交或者都进行回滚,或者有可能远程服务器可以提交,但是本地提交会失败(反之亦然)?分布式数据库事务是否保证提交/回滚?
1
A
回答
6
如果Oracle不使用Two-Phase Commit(2PC)协议的等价物,那么确保既可以同时提交也可以同时进行回滚,我会感到惊讶。
对于2PC,有一个阶段称为预提交阶段,其中主(协调器)实例记录其自己的决定并告诉所有参与者准备提交(并报告其状态 - 必须失败或可提交) 。参与者也准备好提交,并且(如果他们可以提交)在告诉协调员准备好提交之后等待协调员的进一步指示。当所有参与者都做出回应时,协调员记录最终决定,并将决定发送给参与者,并根据其决定行事。如果主人在记录了决策之后但在成功地将决定发送给参与者之前失败,则参与者可以挂在他们既不能提交也不能回滚的状态。有办法从中恢复。如果协调员保持足够长的时间(例如,由于灾难性的硬件故障而停止使用),则最终会出现问题;参与者最终会做一次启发式回滚(推测回滚) - 但这需要非常糟糕的运气来引起任何麻烦。
有2PC的替代品;最终结果是相同的 - 所有提交或全部回滚。
相关问题
- 1. 应用于数据库的事务更新,无论是否提交或回滚
- 2. Spring MVC - 分布式数据库事务
- 3. 在只读数据库事务之后,提交还是回滚会更好?
- 4. 当提交失败时,Nhibernate是否会回滚事务?
- 5. 显式事务回滚是否必需?
- 6. SQL事务回滚并提交
- 7. 回滚先前提交的事务
- 8. Django models.py事务回滚/提交问题
- 9. 提交和回滚Oracle事务
- 10. 在rails中提交回滚事务
- 11. 回滚提交的数据
- 12. 数据库事务只能部分提交
- 13. 保存或删除时,数据存储事务是否需要回滚?
- 14. 为什么TransactionScope不回滚分布式事务?
- 15. 分布式事务中的合法回滚:可能吗?
- 16. 是否有可能使用php来执行mysql数据库事务和回滚?
- 17. Hibernate事务回滚是否工作?
- 18. 什么是要访问一个事务提交或回滚的首选方式?
- 19. 无法在数据库重启后登记分布式事务
- 20. 事务回调或提交()
- 21. 部分提交MySQL事务?
- 22. PDO交易提交而不是回滚
- 23. 分布式数据库
- 24. 提交,保存点,回滚到PostgreSQL?
- 25. 如何在提交后回滚数据库更改?
- 26. 数据库/ sql发送 - 检测提交或回滚
- 27. 如果其中一个数据库是只读的,分布式事务升级是否会发生?
- 28. 软件事务内存是否与数据库事务相同?
- 29. 什么是“分布式事务”?
- 30. 验证数据库提交后
如果他们对每台服务器的独立事务处理相同,那么分布式事务处理会有什么意义? (允许您关注的提交/回滚不匹配) – 2011-02-07 14:32:41
@Damien_The_Unbeliever:我同意,但我只是没有看到每种可能性如何被解释。乔纳森的回答是有道理的 - 似乎仍然有一些情况下,如果一个系统发生灾难性故障,事情就会被挂起,但绝大多数情况都会被处理。 – 2011-02-07 15:19:38