恢复实现 ☒ ■恢复机制常用的技术 ◆记录日志文件 ◆数据转储 学以致用 用以促学 DATABASE@UESTC
学以致用 DATABASE@UESTC 用以促学 ◼ 恢复机制常用的技术 ◆记录日志文件 ◆数据转储
恢复实现 日志 日志内容 @ ☒ ■日志是DBMS用来记录事务对数据库的更新操作的文件, 是日志记录的序列 ■日志记录描述内容主要包括: ◆事务标识符:执行写操作事务的唯一标识符。 ◆数据项标识符:事务操作对象的唯一标识符。 ◆前像(B):更新前数据的旧值。 ◆后像(AI):更新后数据的新值。 ■日志记录形式包括: ◆<T START>::表示事务T已开始。 ◆<TC0MMIT>:表示事务T已提交。 ◆<T ABORT>:表示事务T不能成功完成,已中止。 ◆<T,X,V1,V2>:表示事务T对数据项X执行写操作。写之前的旧值为V1, 写之后的新值为V2。 学以致用 DATABASE@UESTC 用以促学
学以致用 DATABASE@UESTC 用以促学 ◼ 日志是DBMS用来记录事务对数据库的更新操作的文件, 是日志记录的序列 ◼ 日志记录描述内容主要包括: ◆事务标识符:执行写操作事务的唯一标识符。 ◆数据项标识符:事务操作对象的唯一标识符。 ◆前像(BI):更新前数据的旧值。 ◆后像(AI):更新后数据的新值。 ◼ 日志记录形式包括: ◆<T START>:表示事务T已开始。 ◆<T COMMIT>:表示事务T已提交。 ◆<T ABORT>:表示事务T不能成功完成,已中止。 ◆<T,X,V1,V2>:表示事务T对数据项X执行写操作。写之前的旧值为V1, 写之后的新值为V2
恢复实现 日志 日志规则 ☒ ■日志要求 ◆每次事务执行写操作,必须在数据库修改前建立此次写操作的日志记 录 ◆日志必须存储在稳定存储器上 ◆稳定存储器中的日志记录顺序必须与写入日志缓冲区中的日志记录顺 序完全一样(块写) ■先写日志规则 ◆在主存中的数据块输出到数据库前,所有与该数据块中数据有关的日 志记录必须已输出到稳定存储器上 学以致用 DATABASE@UESTC 用以促学
学以致用 DATABASE@UESTC 用以促学 ◼ 日志要求 ◆每次事务执行写操作,必须在数据库修改前建立此次写操作的日志记 录 ◆日志必须存储在稳定存储器上 ◆稳定存储器中的日志记录顺序必须与写入日志缓冲区中的日志记录顺 序完全一样(块写) ◼ 先写日志规则 ◆在主存中的数据块输出到数据库前,所有与该数据块中数据有关的日 志记录必须已输出到稳定存储器上
恢复实现 日志 后像后写 ■事务的执行时,后像(AI)在事务提交后才写入数据库 ◆日志中记录所有的数据库修改 ◆一个事务的所有写操作延迟到事务的操作结束时才执行,以保证事务 的原子性。 事务T的执行步骤 >3 在T开始执行前,向日志中写入记录<T START> >T的一次wite(X)操作导致向日志中写入一条新记录 >最后,当T全部操作结束,向日志中写入记录<T COMMIT> ■事务恢复 ◆忽略未完成的事务;重复已提交事务的影响 ◆恢复过程Redo(Ti):将事务Ti更新的所有数据项的值设为新值 ■简化日志内容结构 ◆日志记录<T,X,V1>:事务T对数据项X执行写操作,写入新值V1 学以致用 DATABASE@UESTC 用以促学
学以致用 DATABASE@UESTC 用以促学 ◼ 事务的执行时,后像(AI)在事务提交后才写入数据库 ◆日志中记录所有的数据库修改 ◆一个事务的所有写操作延迟到事务的操作结束时才执行,以保证事务 的原子性。 ◼ 事务恢复 ◆忽略未完成的事务;重复已提交事务的影响 ◆恢复过程Redo(Ti):将事务Ti更新的所有数据项的值设为新值 ◼ 简化日志内容结构 ◆日志记录<T,X,V1>:事务T对数据项X执行写操作,写入新值V1 事务T的执行步骤 ➢ 在T开始执行前,向日志中写入记录<T START> ➢ T的一次write(X)操作导致向日志中写入一条新记录 ➢ 最后,当T全部操作结束,向日志中写入记录<T COMMIT>
恢复实现 日志 后像后写 ☒ ■举例:后像后写 ◆药品价格调整:设T1事务中,药品A上调10%,药品B下浮5%。 T1: 步骤 动作 日志 read(A) 1 <TI START> READ(A) A:=A+A*0.1 3 A:=A+A*0.1 A=20,B=30 4 Write (A) <T1,A,22> write(A) READ(B) 6 B:=B-B*0.05 read(B) 7 Write(B) <T1,B,28.5> B:=B-B*0.05 8 <TI,COMMIT> 9 写A到磁盘 Write(B) 11 写B到磁盘 学以致用 DATABASE@UESTC 用以促学
学以致用 DATABASE@UESTC 用以促学 ◼ 举例:后像后写 ◆药品价格调整:设T1事务中,药品A上调10%,药品B下浮5%。 T1: read(A) A:=A+A*0.1 write(A) read(B) B:=B-B*0.05 Write(B) 步骤 动作 日志 1 <T1 START> 2 READ(A) 3 A:=A+A*0.1 4 Write(A) <T1,A,22> 5 READ(B) 6 B:=B-B*0.05 7 Write(B) <T1,B,28.5> 8 <T1,COMMIT> 9 写A到磁盘 11 写B到磁盘 A=20,B=30