2017-03-05 66 views
0

我有关于数据库事务处理的问题。数据库如何在事务中处理此状态?

如果数据库在事务将一些数据写入持久存储但不是全部时关闭,它们如何解决此状态?

(+)具有自动重试逻辑的客户端如何处理状态数据库完成事务,但在得到响应之前已断开连接?

感谢您的阅读。

回答

0

DBMS崩溃恢复的常见解决方案是在ARIES算法中使用的解决方案。 简单地说,数据库维护一个write-ahead-log,在应用这些修改之前,所有的修改都被写入其中。 发生崩溃后,恢复管理器撤销未提交的更改,并确保将所有提交的更改写入磁盘。

(+)关系数据库的好处是他们提供ACID保证。 由于durability属性,客户端确信所有成功提交的事务都反映在磁盘上,因此不需要以特殊方式处理DBMS崩溃情况。

+0

有没有办法控制这个?/ 1)请求事务客户端 - > DB/ 2)在DB处理事务/ 3)断开客户端之前得到了事务响应/ 4)客户端尝试重新连接到DB/ 5)客户端重试请求事务再次/ = >交易请求两次。 (两个请求 - >两个事务)/ 有没有办法来防止呢?/ 我认为解决此问题的唯一方法是在重试请求之前检查。/ 但它很重。 – RedJune

+0

这个问题是与http://stackoverflow.com/questions/42605651/how-to-handle-message-that-failed-to-response-success-but-success-commit-to-dat – RedJune

+0

我认为你是对。在你的场景中,只有数据库知道事务是否成功,所以似乎客户端知道是否需要重试的唯一方法是询问数据库。 –