Durability在DBMS中实际意味着什么?

时间:2017-02-26 12:33:41

标签: database oracle transactions acid durability

来自Durability

  

一旦用户发出提交命令,那么事务就是第一个   写入存储在非易失性介质上的数据库文件   硬盘,在确认用户保存之前完成   已经发生了。如果数据库在保存之前崩溃,则数据仍然存在   在下次重新启动数据库时,在事务日志上,但是   任何未提交的更改都将被撤消或回滚。

  1. 假设我开始交易
  2. Fire first insert statement;
  3. Fire second insert statement;
  4. 提交;
  5. 交易结束
  6. 现在,当用户在步骤4提交时,

    1. 所有insert语句都写入时间T1的文件系统中的事务日志
    2. 确认被发送给用户事务已提交,虽然它将在时间T2
    3. 的步骤3中完成
    4. 现在在时间T3处异步进行交通
    5. 以上理解是否正确?如果是,我的问题为什么不在步骤3之后发送确认?如果DB机器在T2之前崩溃,那么交易会不会持久? 因此,对于日志,我们只是确保DB在时间T2和T3时崩溃,然后我们可以确保持久性

      第二个理解 我相信一旦语句被触发而不是在提交时执行它,所有事务语句都可以写在日志中。提交完成后,事务日志将被标记为提交并发送确认。现在,即使数据库在确认后崩溃,DB也会确保从事务日志中写入DB文件。因此,基本上不是在提交时一次写入所有事务语句,而是在它们触发时,Db在日志中写入语句。在提交时,它只是将这些事务标记为提交,并最终将从日志

      中的db块中写入

      这个问题来自oracle的观点

1 个答案:

答案 0 :(得分:0)

你的第二个理解很接近。

你提到的文章也说

  

通常可以实现现代关系数据库系统的耐用性   通过事务日志 - 可循环使用的文件 - 用于存储的文件   所有数据库事务在会话中

提交完成时

否,

  1. 第一个数据库供应商,标记该会话提交中的所有事务。
  2. 然后将这些交易数据永久存储在DB文件中。
  3. 然后将确认发送给用户
  4. 现在,即使dB在步骤1之后崩溃,DB供应商在启动时也可以读取该事务已在日志中提交但完整事务未写入DB块。因此,将完成这些事务并回滚未提交的日志
  5. 但是,如果数据库在步骤1本身之前崩溃,那么即使在启动时它也不会被保留,因为它没有在事务日志中写入