可恢复与不可恢复计划
Posted
技术标签:
【中文标题】可恢复与不可恢复计划【英文标题】:Recoverable vs Non recoverable schedule 【发布时间】:2016-12-30 08:58:30 【问题描述】:将附表 1 视为
T1 T2 右(一) A=A-50 宽(一) 右(一) A=A+20 宽(一) 犯罪 R(B)
//Failure happens here
//and T1 Rollbacks
B=B+50
Commit
将附表 2 视为
T1 T2 右(一) A=A-50 宽(一) 右(一) A=A+20 宽(一) R(B)
//Failure happens here
//and T1 Rollbacks
B=B+50
Commit
Commit
如果 A 的初始值 = 100,那么在这两种情况下,A 的值最终都是 100,那么第一个计划是不可恢复的,而第二个计划是可恢复的?
同样在第一个计划中,事务 T1 在事务 T2 提交后回滚 A 的值。那么 A 的承诺值也会回滚到 100 吗?
【问题讨论】:
【参考方案1】:同样在第一个计划中,事务 T1 在事务 T2 提交后回滚 A 的值。那么 A 的承诺值也会回滚到 100 吗?
是的,它会回滚到它的初始值
可恢复的时间表是 其中,对于每对事务 Ti 和 Tj,Tj 之前读取了一个数据项 Ti写的,Ti的commit操作出现在commit操作之前 的 Tj 。
* 可恢复的计划 = 回滚未提交的事务 * 和
* 不可恢复的计划 = 已提交事务的回滚 *
【讨论】:
据我所知,对于第一个不可恢复的计划,我们应该无法取回 A 的原始值(即 100),因为 T2 在 A=70 时提交 A 的值,但你说它会回滚到 100。我很困惑 :( @Xylene23 当事务 T1 提交时意味着它将 A 和 B 的值写入硬盘,但根据您的情况,它在提交之前失败,因此原始值仍然与前一个相同。如何在 T2 中提交但原子性不存在,这是任何事务的重要组成部分,因此它尚未在硬盘中提交,因为它读取 A 的脏值。希望它有所帮助以上是关于可恢复与不可恢复计划的主要内容,如果未能解决你的问题,请参考以下文章