解释DBMS中可恢复性的概念


非串行化调度的特征如下:

  • 事务可能是或可能不是一致的。

  • 事务可能是或可能不是可恢复的。

所以,现在让我们谈谈可恢复性调度。

我们都知道可恢复和不可恢复是非串行化技术,

不可恢复调度

如果一个事务从一个未提交的事务中执行脏读操作,并在读取该值的事务之前提交,则这样的调度称为不可恢复调度。

示例

让我们考虑如下所示的两个事务调度:

T1T2
Read(A)
Write(A)
-Read(A) ///脏读
-Write(A)
-Commit
-
Rollback

上述调度是不可恢复的,原因如下:

  • 事务T2正在对A执行脏读操作。

  • 事务T2也在事务T1完成之前提交。

  • 事务T1随后失败并回滚。

  • 事务T2读取了不正确的值。

  • 最后,事务T2无法恢复,因为它已经提交。

可恢复调度

如果任何执行从未提交事务的脏读操作的事务,并且其提交操作也被延迟,直到未提交的事务被提交或回滚,则此类调度称为可恢复调度。

示例

让我们考虑如下所示的两个事务调度:

T1T2
Read(A)
Write(A)
-Read(A) ///脏读
-Write(A)
-
-
Commit

Commit // 延迟

上述调度是可恢复的调度,原因如下:

  • 事务T2对A执行脏读操作。

  • 事务T2的提交操作被延迟,直到事务T1提交或回滚。

  • 事务稍后提交。

  • 在上述调度中,现在允许事务T2提交,而T1尚未提交。

  • 在这种情况下,事务T1失败,而事务T2仍然有机会通过回滚来恢复。

更新于:2021年7月8日

8K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告