解释DBMS中可恢复性的概念
非串行化调度的特征如下:
事务可能是或可能不是一致的。
事务可能是或可能不是可恢复的。
所以,现在让我们谈谈可恢复性调度。
我们都知道可恢复和不可恢复是非串行化技术,
不可恢复调度
如果一个事务从一个未提交的事务中执行脏读操作,并在读取该值的事务之前提交,则这样的调度称为不可恢复调度。
示例
让我们考虑如下所示的两个事务调度:
T1 | T2 |
---|---|
Read(A) | |
Write(A) | |
- | Read(A) ///脏读 |
- | Write(A) |
- | Commit |
- | |
Rollback |
上述调度是不可恢复的,原因如下:
事务T2正在对A执行脏读操作。
事务T2也在事务T1完成之前提交。
事务T1随后失败并回滚。
事务T2读取了不正确的值。
最后,事务T2无法恢复,因为它已经提交。
可恢复调度
如果任何执行从未提交事务的脏读操作的事务,并且其提交操作也被延迟,直到未提交的事务被提交或回滚,则此类调度称为可恢复调度。
示例
让我们考虑如下所示的两个事务调度:
T1 | T2 |
---|---|
Read(A) | |
Write(A) | |
- | Read(A) ///脏读 |
- | Write(A) |
- | |
- | |
Commit | |
Commit // 延迟 |
上述调度是可恢复的调度,原因如下:
事务T2对A执行脏读操作。
事务T2的提交操作被延迟,直到事务T1提交或回滚。
事务稍后提交。
在上述调度中,现在允许事务T2提交,而T1尚未提交。
在这种情况下,事务T1失败,而事务T2仍然有机会通过回滚来恢复。
广告