解释 DBMS 中可恢复性的概念
dbmsdatabasebig data analytics更新于 2026/1/12 20:37:17
非序列化调度的特点如下 −
事务可能是一致的,也可能不是一致的。
事务可能是可恢复的,也可能不可恢复。
现在我们来谈谈可恢复性调度。
我们都知道,可恢复和不可恢复都是非序列化技术。
不可恢复调度
如果一个事务对一个未提交的事务执行了脏读操作,并且在读取该值的事务之前提交,则这种调度称为不可恢复调度。
示例
我们考虑如下所示的两个事务调度 −
| T1 | T2 |
|---|---|
| Read(A) | |
| Write(A) | |
| - | Read(A) ///Dirty Read |
| - | Write(A) |
| - | Commit |
| - | |
| Rollback |
由于以下原因,上述调度不可恢复:
事务 T2 正在对 A 执行脏读操作。
事务 T2 也在事务 T1 完成之前提交。
事务 T1 随后失败并发生回滚。
事务 T2 读取了错误的值。
最后,事务 T2 无法恢复,因为它已经提交。
可恢复调度
如果任何事务从未提交的事务执行脏读操作,并且其已提交的操作被延迟到未提交的事务提交或回滚,则此类调度称为可恢复调度。
示例
让我们考虑两个事务时间表如下 −
| T1 | T2 |
|---|---|
| Read(A) | |
| Write(A) | |
| - | Read(A) ///Dirty Read |
| - | Write(A) |
| - | |
| - | |
| Commit | |
| Commit // delayed |
由于以下原因 −,上述调度是可恢复的调度。
事务 T2 对 A 执行脏读操作。
事务 T2 的提交操作被延迟,直到事务 T1 提交或回滚。
事务稍后提交。
在上述调度中,事务 T2 现在被允许提交,而 T1 尚未提交。
在这种情况下,事务 T1 失败,事务 T2 仍有机会通过回滚恢复。

