如果事务成功提交,那么我是否可以 100% 确定它已写入数据库和日志文件?我可以确定数据已保存吗?
今天我们的日志文件已经达到驱动器的限制,我们得到了很多错误。此外,其他一些服务崩溃了。我们增加了磁盘并重新启动了服务器。
在启动过程中,服务器进行了“数据库恢复”——我可以确定一切正常吗?
如果事务成功提交,那么我是否可以 100% 确定它已写入数据库和日志文件?我可以确定数据已保存吗?
今天我们的日志文件已经达到驱动器的限制,我们得到了很多错误。此外,其他一些服务崩溃了。我们增加了磁盘并重新启动了服务器。
在启动过程中,服务器进行了“数据库恢复”——我可以确定一切正常吗?
如果客户端应用程序已发出 COMMIT 并返回成功代码,则引擎保证事务是持久的。保证在事务中完成的所有更改都将是可见的,即使在崩溃之后也是如此。此外,恢复还保证任何未提交的事务都将在崩溃的情况下回滚。
有关更多详细信息,我建议阅读ARIES论文。
如果底层存储硬件出现故障(损坏),预写日志记录和恢复无法保证。并且任何工程产品都可能包含缺陷。
与所有其他应用程序一样,您的应用程序需要仔细编写才能在出现崩溃(错误)时正确运行。没有魔法。