Oracle 的恢复模型

Oracle 将通过以下方式管理其内容和结构的更改,以确保可将数据库恢复为任意单一故障点后最后提交的事务。恢复为最后提交的事务 意味着执行完 COMMIT 语句后,控制权将被转移给用户,Oracle 将确保提交的数据已按某种格式写入到了磁盘中,且这些数据可以恢复。单一故障点 意味着任意单个文件或过程都可能失败,但不会丢失任何已提交事务的内容。如果数据文件丢失或损坏,则重做日志的内容可确保数据可恢复。如果控制文件中断,则其他控制文件可确保信息仍然安全。过程可能会被删除,但提交的数据不会丢失。

要在发生任意故障后恢复数据库,Oracle 将执行以下步骤:

  1. 阅读 init.ora 文件,以确定控制文件的名称和位置
  2. 阅读各个控制文件以验证彼此间是否一致并确定数据库的物理文件结构
  3. 打开控制文件中提及的各个数据文件,以确定数据文件为当前的文件且能够反映最新提交的更改,还是需要对数据文件进行恢复
  4. 按顺序打开各个重做日志文件,并根据需要应用在重做日志文件中找到的信息,以使各数据文件处于包含全部已提交事务的状态

如果数据库中丢失了某个控制文件,则会用当前控制文件的副本替换该丢失的控制文件,进而恢复数据库。

如果数据库丢失了一个或多个数据文件,则会先将丢失的数据文件替换为备份副本,然后使用重做日志(在线或存档)使恢复的副本成为当前数据文件,进而恢复数据库。如果备份副本被恢复为不同于要替换的原始文件的位置,必须使用 ALTER DATABASE > RENAME FILE 命令来指示 Oracle 实例在哪里能够找到恢复的文件。

如果数据库丢失了当前的在线重做日志,则数据库实例在尝试提交更多事务时会停止。数据库恢复后,将不会丢失任何数据,但不会提交最新的事务,可能需要重新输入。不过,必须替换当前的在线重做日志,且应立即备份数据库。

如果数据库丢失了存档的重做日志,则数据库实例会继续运行,因为其未意识到此丢失情况。不过,如果第二个介质发生了故障或者文件丢失了,则恢复数据库的能力可能会减弱。如果存档的重做日志丢失了,应使用新的备份。

相关主题

5/10/2014