■运行记录的结构因DBMS而异 Log基本内容 1活动事务表( active transaction list-ATL) 记录所有正在执行,尚未提交的事务的标识符 (transaction identifier---TiD). 2提交事务表( committed transaction list---CTL) 记录所有已提交事务的标识符
◼ 运行记录的结构因DBMS而异 ◼ Log基本内容 1.活动事务表(active transaction list---ATL) 记录所有正在执行,尚未提交的事务的标识符 (transaction identifier---TID)。 2.提交事务表(committed transaction list---CTL) 记录所有已提交事务的标识符
问题:某事务需要提交时,该按照什么顺序对ATL 和CTL进行更新? 注意:提交时,先将要提交事务的TD加入CTL,再 从ATL中删除相应的TD。否则,一旦发生故障,该事 务的状态将丢失!
注意:提交时,先将要提交事务的TID加入CTL,再 从ATL中删除相应的TID。否则,一旦发生故障,该事 务的状态将丢失! 问题:某事务需要提交时,该按照什么顺序对ATL 和CTL进行更新?
3.前像文件 可以看成一个堆文件。每个物理块有个块标识符BID ( block identifier)。BID由TID、关系名和逻辑块 号组成。逻辑块号在关系中是唯一的。如果一个事务 需要卷回,可以在前像文件中找出该事务的所有前像 块,按照逻辑块号写入到关系的对应块,从而消除该 事务对数据库的影响。 undo满足幂等性: undo(undo(undo. undo(x))=undo(x) 因此,undo失败可以再undo!
3.前像文件 可以看成一个堆文件。每个物理块有个块标识符BID (block identifier)。BID由TID、关系名和逻辑块 号组成。逻辑块号在关系中是唯一的。如果一个事务 需要卷回,可以在前像文件中找出该事务的所有前像 块,按照逻辑块号写入到关系的对应块,从而消除该 事务对数据库的影响。 undo满足幂等性: undo(undo(undo…undo(x)))=undo(x) 因此,undo失败可以再undo!
4后像文件 结构与前像文件相仿,不过记的是后像。在恢复 时,可按提交事务表中的事务次序,按逻辑块号 写入其后像。这相当于按提交的次序重做各个事务。 redo满足幂等性 redo(redo(redo.redo(x))=redo(x) 问题:undo操作需要按照事务的次序吗?为什么?
4.后像文件 结构与前像文件相仿,不过记的是后像。在恢复 时,可按提交事务表中的事务次序,按逻辑块号, 写入其后像。这相当于按提交的次序重做各个事务。 redo满足幂等性: redo(redo(redo…redo(x)))=redo(x) 问题:undo操作需要按照事务的次序吗?为什么?
取后备复本后,之前的运行记录就失去了价值,对恢 复来说,只要保留最近后备复本以后的运行记录。但运 行记录仍可能很大。可采用下列措施减小运行记录规模。 1不保留已提交事务的前像 2有选择性的保留后像 3合并后像(对给定逻辑块号的物理块,如多次更新, 可只保留最近的后像) 如何判断该做undo还是redo呢?下一节,将解决这 个问题
取后备复本后,之前的运行记录就失去了价值,对恢 复来说,只要保留最近后备复本以后的运行记录。但运 行记录仍可能很大。可采用下列措施减小运行记录规模。 1.不保留已提交事务的前像 2.有选择性的保留后像 3.合并后像(对给定逻辑块号的物理块,如多次更新, 可只保留最近的后像) 如何判断该做undo还是redo呢?下一节,将解决这 个问题