18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 信息时代 > 可恢复性(数据库)

可恢复性(数据库)

时间:2022-10-30 00:30:01 | 来源:信息时代

时间:2022-10-30 00:30:01 来源:信息时代

    可恢复性 : 度量事务调度的一个属性,被用于确保事务的原子性。一个事务调度如果能够保证在执行COMMIT之前的任何时候,都是可以被撤销的,也就是它对数据库所作的影响可以被消除,则称该调度满足可恢复性。
按照事务原子性的要求,事务由于各种原因中止执行时,需要撤销事务已对数据库所做的修改(称为回退)。更进一步,当事务Ti中止执行时,还会引起依赖于事务Ti的事务Tj(即Tj读了Ti写的数据)也必须中止(称为级联回退)。事务调度必须确保上述的撤销操作是可以执行的。
1. 可恢复的调度
考虑图1中的调度。假定系统允许事务T2在执行了Read(A)和Write(B)后执行COMMIT操作,也就是在事务T1未结束前,T2已“成功”结束。如果事务T1在T2的COMMIT之后,由于某种原因引起失败,为保证事务的原子性,事务T1将执行ROLLBACK操作。但是事务T2已经不能再回退了。这种情况称为事务T2引用了未提交的数据,事务T1的失败,引起恢复工作不能彻底进行。这种调度称为“不可恢复”的调度。任何一对事务Ti和Tj,如果事务Tj读了事务Ti写的数据值,那么Tj的COMMIT操作必须在Ti的COMMIT操作之后。满足上述条件的调度称为可恢复的调度(recoverable schedule)。

T1T2
Read(A)
Write(A)
 
 Read(A)
Write(B)
/*COMMlT*/
Read(B)
/*ROLLBACK*/
 


图1 不可恢复的调度


2. 无级联回退调度
在一个事务回退时,必须回退依赖于这个事务的其他事务(即读了这个事务写的数据)。这种回退称为级联回退(cascading rollback)。不会发生级联回退的调度称为无级联回退调度(cascadeless schedule)。
考虑图2中的调度。事务T2读了事务T1写的数据A,事务T3读了事务T2写的数据A。如果T1失败,那么事务T1必须回退;T2依赖于T1,因而T2必须回退; T3依赖于T2,T3也必须回退。

T1T2T3
Read(A)
Read(B)
Write(A)
  
 Read(A)
Write(A)
 
  Read(A)


图2 关于无级联回退调度


如果对并发调度中每一对事务Ti和Tj满足以下条件:如果事务Tj读了事务Ti写的数据值,那么事务Ti的COMMIT操作必须在Tj的读操作之前。则称该并发调度为无级联回退调度。
级联回退给系统的实现带来一系列问题,而无级联回退调度是系统良好性能的表现。容易验证,每个无级联回退调度都是可恢复的调度。但是可恢复的调度不一定是无级联的调度。

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭