2017-02-26 92 views
0

DurabilityDBMS中的耐久性究竟意味着什么?

一旦用户发出提交命令,则该事务是写入到诸如 硬盘,这是在确认到之前进行存储的非易失性介质上的数据库文件第一 用户发现保存 。如果数据库在保存之前崩溃,则在下次数据库重新启动时,事务日志上的数据仍为 ,但 任何未提交的更改都会撤消或回滚。

  1. 说,我开始交易
  2. 消防第一插入语句;
  3. 第二次插入声明;
  4. commit;
  5. 事务结束

现在,当用户没有在步骤4,

  1. 所有插入语句在时间T1写入事务日志文件系统提交
  2. 确认发送到用户的交易尽管它将在时间T2的步骤3中完成
  3. 现在在时间T3异步实现了trasanctions

以上理解正确吗?如果是,我的问题为什么不在第3步之后发送确认?另外如果数据库机器在T2之前崩溃,那么事务将不会持久? 所以原木,我们只是保证如果数据库崩溃的B/W时间T2和T3那么我们就可以确保耐久性

第二种理解 我相信所有事务的发言可以尽快日志写成的语句被激发,而不是在提交时做这件事。一旦提交完成,事务日志将被标记为提交并发送确认。现在即使数据库确认后崩溃,数据库将确保从事务日志写入数据库文件。因此,基本上,不是在提交时一次性写入所有事务语句,而是在它们触发时在日志中写入语句。在提交的时候,它只是标志着这些交易的承诺,最终将在DB块写入原木

这个问题从Oracle的角度

回答

0

你的第二个认识是密切。

正如你还提及文章说

耐久性现代关系数据库系统通常是通过交易来实现 日志 - 可回收文件 - 用来存储 所有数据库事务在一个会话文件

没有提交完成时,

  1. 第一个数据库供应商,标记该会话提交中的所有事务。
  2. 然后将这些交易数据永久存储在数据库文件中。
  3. 然后发送确认给用户
  4. 现在即使dB在步骤1后崩溃,启动时数据库供应商可以读取在日志中提交的事务,但完成的事务未写入DB块。因此,将完成这些交易,并回滚未提交者日志

不过是如果DB第1步自己之前崩溃,那么就不会被持久即使其在交易不写启动日志中

相关问题