5.03 Execution and recovery of update transaction 更新事物的执行和恢复
1 5.03 Execution and recovery of update transaction 更新事物的执行和恢复
更新事务执行时 应该遵守2条规则: 1.Commit rule提交规则 后像必须在提交前写入非易失存储器中。 即写入数据库或运行记录中。 原因:ACID准则:提交事务对数据库的影 响应该是持久性
2 更新事务执行时 应该遵守2条规则: 1.Commit rule 提交规则 后像必须在提交前写入非易失存储器中。 即写入数据库或运行记录中。 原因:ACID 准则:提交事务对数据库的影 响应该是持久性
·注意:后像写入运行记录即可提交事务。 只要后像已写入运行记录,后像尚未写入或 未完全写入数据库也可提交事务。待提交后 继续完成写入数据库操作。 此期间如故障,可以用后像redo,若提交后, 写入DB前其他事务访问这些数据,更新数据 仍然在缓存中,自然可访问已经更新的数据
3 ⚫ 注意:后像写入运行记录 即可提交事务。 ⚫ 只要后像已写入运行记录,后像尚未写入或 未完全写入数据库也可提交事务。待提交后 继续完成写入数据库操作。 ⚫ 此期间如故障,可以用后像redo,若提交后, 写入DB前其他事务访问这些数据,更新数据 仍然在缓存中,自然可访问已经更新的数据
2.Log ahead rule 先记后写规则。 若后像在事务提交前写入数据库,则必须先 把前像记入运行记录。 原因:事务提交前,还有可能执行失败卷回, 这时要消除事务对数据库的一切影响。 ● 只要事务未提交,改动数据库前就必须先把 前像写入运行记录。以便执行向后恢复 后像写入数据库时间,有3种更新事务执行方 案
4 2.Log ahead rule 先记后写规则。 ⚫ 若后像在事务提交前写入数据库,则必须先 把前像记入运行记录。 原因:事务提交前,还有可能执行失败卷回, 这时要消除事务对数据库的一切影响。 ⚫ 只要事务未提交,改动数据库前就必须先把 前像写入运行记录。以便执行向后恢复 。 ⚫ 后像写入数据库时间,有3种更新事务执行方 案
1)后像在事务提交前完全写入数据库。 执行的步骤: (1)TID->ATL /事务标识符->活动事务表。 (2) BI->Log /前像->Log(运行记录) (3) Al->DB /提交前,后像完全写入DB,满 足提交规则:B1已入L0G/ (4) TID->CTL //事务标识符->提交事务表 (5)从ATL删除TID //从活动事务表删除该事 务标识符 特点:前像后像都要记。后像必须记;因提交之 前,后像写入数据库,前像也须记
5 1)后像在事务提交前完全写入数据库。 执行的步骤: (1) TID->ATL //事务标识符->活动事务表。 (2) BI->Log //前像->Log(运行记录) (3) AI->DB //提交前,后像完全写入DB,满 足提交规则:BI已入LOG // (4) TID->CTL //事务标识符->提交事务表 (5)从ATL删除TID //从活动事务表删除该事 务标识符 特点:前像后像都要记。后像必须记;因提交之 前,后像写入数据库,前像也须记
当事务执行过程中发生故障,可根据ATL和 CTL情况,采取相应措施: ATL CTL 事务处的状态判断 恢复措施 有 无 步(1)已完成,(4)尚 1.若BI已入iog执行ndo,否则不 执行undo.(Bl未入LOG,AI定 未完成 未入DB) 2.从ATL删除该TD 有 有 步骤(4)已完成 从ATL删除TD即可 无有 步骤(5)已完成 无须任何处理
6 当事务执行过程中发生故障,可根据ATL和 CTL情况,采取相应措施: ATL CTL 事务处的状态判断 恢复措施 有 无 步(1)已完成,(4)尚 未完成 1.若BI已入log执行undo,否则不 执行undo.(BI未入LOG,AI定 未入DB) 2.从ATL删除该TID 有 有 步骤(4)已完成 从ATL删除TID即可 无 有 步骤(5)已完成 无须任何处理
2)后像在事务提交后才写入数据库。 执行步骤如下: (1)TID->ATL //事务标识符->活动事务表。 (2)A1->Log /后像入运行记录/提交规则// (3)TID->CTL //事务标识符->提交事务表DB //后像写入DB, (5)从ATL删除TID/从活动事务表删除该事务标 识符。 特点:前像可以不记。在后像中做事务,直至提交, 然后才去修改数据库
7 2)后像在事务提交后才写入数据库。 执行步骤如下: (1)TID->ATL //事务标识符->活动事务表。 (2)AI->Log //后像入运行记录 //提交规则// (3)TID->CTL //事务标识符->提交事务表DB //后像写入DB, (5)从ATL删除TID //从活动事务表删除该事务标 识符。 特点:前像可以不记。在后像中做事务,直至提交, 然后才去修改数据库
。方式2的恢复措施: ATL CTL 事务处的状态判断 恢复措施 有 无 步(1)已完成,(3)尚 从ATL删除该TD 未完成 有 有 步骤(3)已完成,(5) 1.redo; 未完成 2.从ATL删除该TD 无 有 步骤(5)已完成 无须任何处理
8 ⚫ 方式2的恢复措施: ATL CTL 事务处的状态判断 恢复措施 有 无 步(1)已完成,(3)尚 未完成 从ATL删除该TID 有 有 步骤(3)已完成;(5) 未完成 1.redo; 2.从ATL删除该TID. 无 有 步骤(5)已完成 无须任何处理
讨论: 方案1:似乎不要AI;这是只从事务执行的成 败,而数据库不遭破坏的情况下的结论 如果数据库破坏,恢复主要靠后像才行。所 以三种方案无论在步骤中列出与否,后像均要 记入运行记录。 各方案在数据库原地恢复时都要undo或redo. 若不做undo也不做redo方案.则必须用异地更 新方案。即影子存储的事务执行方案
9 讨论: ⚫ 方案1:似乎不要AI;这是只从事务执行的成 败,而数据库不遭破坏的情况下的结论. 如果数据库破坏,恢复主要靠后像才行。所 以三种方案无论在步骤中列出与否,后像均要 记入运行记录。 ⚫ 各方案在数据库原地恢复时都要undo或redo. ⚫ 若不做undo也不做redo方案.则必须用异地更 新方案。即影子存储的事务执行方案
3)后像在事务提交前后写入数据库。 执行步骤如下: (1)TID->ATL/事务标识符 事物活动表 (2)AI,B1->Log/前像、后像入运行记录 (3)Al -DB (开始,部分提交) (4)TID -CTL (5)Al -DB (6)从ATL删除TID。 10
10 3)后像在事务提交前后写入数据库。 执行步骤如下: (1)TID->ATL //事务标识符 事物活动表 (2)AI,BI -> Log //前像、后像入运行记录 (3)AI -> DB (开始,部分提交) (4)TID -> CTL (5)AI -> DB (6)从ATL删除TID