解释 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 更新的所有数据项均设置为新值。

