调度的可恢复性

2025年6月24日 | 5 分钟阅读

引言

众所周知,可恢复性在维护数据库系统的完整性方面发挥着重要作用。它还可以确保数据库即使在系统崩溃、断电或软件故障的情况下也能恢复到稳定一致的状态。尽管如此,在数据不断被修改或被各种用户同时轻松访问的环境中,这一概念尤为重要。其核心在于,可恢复性主要确保由事务进行的所有更改都能得到正确处理。

什么是数据库可恢复性?

在数据库中,可恢复性被认为是一个重要的概念,尤其是在许多人同时使用系统或数据频繁更新的情况下。简而言之,可恢复性意味着确保对选定的数据库所做的任何更改都得到正确处理。如果事务(工作单元)正确完成,它所做的更改应保留。但如果它失败或被中断,所有更改都应被撤销,以便数据库能有效地保持正确。

DBMS Recoverability of Schedule

这在很大程度上是由于一种称为事务日志的东西。这些日志会保存每个事务所做操作的逐步记录。如果发生系统崩溃等意外情况,数据库可以轻松地利用日志来重做成功事务的工作,或撤销未完成事务的更改。这可以确保数据的安全和准确。在现实世界中,大多数事务是同时发生的。有些事务是完全独立的,而另一些则相互依赖。如果其中一个关联事务失败,也可能影响到其他事务。

数据库系统的可恢复性级别

数据库可以以不同的方式轻松地从故障中恢复。这些是常见的级别:

  • 无撤销日志记录:这是最简单的形式,一旦事务完成,其更改就会被永久保存。但如果事务在完成前崩溃,系统就无法撤销其已做的任何操作。
  • 撤销日志记录:在这种情况下,系统可以撤销未完成事务的更改。但有时,它也可能删除已成功事务的更改,特别是如果这些事务发生在失败事务之后。
  • 重做日志记录:这种类型主要允许系统在磁盘故障后重做或重新应用成功事务的更改。但是,它也不会撤销任何未完成事务的更改。
  • 撤销-重做日志记录:这是最完整的方法。它允许系统撤销未完成的事务,并重做已成功的事务。这主要有助于将数据库恢复到精确的正确状态,无论发生了什么问题。

额外的恢复技术

更常见的是,为了加快恢复速度并减轻系统负载,数据库系统还可能使用以下方法:

  • 检查点:它主要负责在特定时间点保存数据库的快照,以限制崩溃后需要重做或撤销的工作量。
  • 影子页:它主要保留数据页的副本,以便在出现问题时可以轻松地回滚更改。

数据库系统的可恢复性

有时,由于软件问题、系统崩溃或硬件故障,事务可能无法完全执行。在这种情况下,失败的事务必须回滚。但其他事务也可能使用了失败事务生成的值。因此,我们也必须回滚那些事务。


DBMS Recoverability of Schedule

上面的表 1 显示了一个包含两个事务的计划。T1 读取并写入 A 的值,T2 也读取并写入该值。T2 提交了,但后来 T1 失败了。由于失败,我们必须回滚 T1。T2 也应该被回滚,因为它读取了 T1 写入的值,但 T2 在 T1 提交之前无法回滚,因为它已经提交了。因此,这种类型的计划被称为不可恢复计划。

不可恢复计划:如果 Tj 读取了 Ti 的更新值,并且 Tj 在 Ti 提交之前提交,则该计划将是不可恢复的。


DBMS Recoverability of Schedule

上面的表 2 显示了一个包含两个事务的计划。事务 T1 读取并写入 A,而事务 T2 也读取并写入该值。但后来 T1 失败了。因此,我们必须回滚 T1。T2 应该被回滚,因为 T2 读取了 T1 写入的值。由于它在 T1 提交之前没有提交,所以我们可以回滚事务 T2。因此,它是可恢复的,并带有级联回滚。

可恢复(带有级联回滚):如果 Tj 读取了 Ti 的更新值,并且 Tj 的提交延迟到 Ti 提交为止,则该计划将是可恢复的(带有级联回滚)。


DBMS Recoverability of Schedule

上面的表 3 显示了一个包含两个事务的计划。事务 T1 读取并写入 A 并提交,而 T2 读取并写入该值。因此,这是一个无级联可恢复的计划。

常见问题解答

问题 1:为什么可恢复性被认为是数据库系统的重要方面?

答案:可恢复性至关重要。它有助于数据库始终可信,即使在发生意外情况(如崩溃或断电)时也是如此。它通常确保未完成事务所做的任何更改都不会弄乱数据,并且已完成的工作会得到妥善保存。没有它,系统可能会变得不可靠或丢失重要信息。

问题 2:DBMS 如何在发生故障后恢复数据库?

答案:系统通常会记录事务操作,就像备份日记一样。如果发生故障,它会使用此记录来撤销任何未完成的工作并重做已完成的任务。它还会设置检查点和安全点,以便在需要时返回。然而,所有这些方法都有助于它修复任何问题并使数据库恢复到正确状态。

结论

确保数据库能够从问题中恢复是数据库管理系统 (DBMS) 最重要的工作之一。尽管如此,它还是有助于个人保持数据准确可靠,即使在发生崩溃或系统故障等意外情况时也是如此。为此,系统会利用一些关键工具,例如确保事务的所有部分都已完成(原子性)、永久保存已完成的更改(持久性)、保留事件日志、设置检查点,以及在存储发生故障时使用恢复方法。总之,这些步骤有助于在任何问题后将数据库恢复到安全、正确的状态。


下一主题DBMS 故障分类