解释 DBMS 中基于日志的恢复

dbmsdatabasebig data analytics更新于 2026/1/12 23:52:17

日志只不过是一个包含一系列记录的文件,每个日志记录都对应一次写入操作。所有日志记录都按顺序记录在日志文件中。可以说,日志文件存储了所有更新活动的历史记录。

日志包含事务开始、事务编号、记录编号、旧值、新值、事务结束等。例如,银行 ATM 机中的迷你报表。

如果在正在进行的事务中系统崩溃,那么通过使用日志文件,我们可以恢复到之前的状态,就好像数据库什么都没发生一样。

日志保存在磁盘上,因此除了磁盘故障之外,它不受其他故障的影响。

示例

不同类型的日志记录如下 −

  • <Ti, Xi, V1, V2> −更新日志记录,其中 Ti=事务,Xi=数据,V1=旧数据,V2=新值。

  • <Ti, start> − 事务 Ti 开始执行。

  • <Ti, commit> − 事务 Ti 已提交。

  • <Ti, abort> − 事务 Ti 已中止

日志记录可以写成如下形式 −

Create a log for the given transaction T1 and T2.
  T1            T2              Log
 Read A        Read A        <T1, start>
 A=A-2000      A=A+5000     <T1,A,5000, 3000>
 Write A      Write A       <T1, B, 8000, 10000>
 Read B       Read B        <T1, commit>
 B=B+2000     B= B+7000     <T2, start>
 Write B      Write B      <T2, A, 3000, 8000>
                           <T2, B, 10000, 17000>
                           <T2, commit>

基于日志的恢复技术

基于日志的恢复使用以下技术之一 −

延迟数据库修改

它在事务完成后修改数据库。数据库修改被延迟或推迟到事务的最后一个操作执行完毕。更新日志记录维护数据项的新值。

恢复系统使用以下操作 −

  • Redo(Ti) − 将事务 Ti 更新的所有数据项设置为新值。

立即修改数据库

它在写入操作后修改数据库,当事务执行更新/写入操作时,数据库修改立即完成。更新日志记录同时维护数据项的旧值和新值。

恢复系统使用以下两个操作:−

  • Undo(Ti) − 事务 Ti 更新的所有数据项均设置为旧值。

  • Redo(Ti) − 事务 Ti 更新的所有数据项均设置为新值。


相关文章