可恢复与不可恢复计划

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 的脏值。希望它有所帮助

以上是关于可恢复与不可恢复计划的主要内容,如果未能解决你的问题,请参考以下文章

9.灾难预防和恢复

MySQL之备份与恢复

大型数据库作业

可定制的数据库备份和恢复程序

VMware Workstation 不可恢复错误: (mks)

解决VMware Workstation 不可恢复错误: (vcpu-0)