如何使用在线重做日志进行恢复 ============================ ============== 目的 ------- 轻松快速地找出联机重做日志文件是否 可用于恢复数据库。 听众 -------- 本文档面向希望 在数据库崩溃时快速找到最佳恢复解决方案的DBA 。 HOW TO ------ 今天的许多数据库都在没有启用存档日志记录的情况下运行,这 减少了快速恢复数据库的可用选项。基本上有 2 个选项可用: a) 从备份恢复 b) 使用联机重做日志恢复数据库。 选项 a) 是直接的,这里不会介绍。唯一 需要提及的是选项 a) 如果 自备份以来对数据库进行了更新/插入,将导致数据丢失。 让我们来看看选项 b): 如果 由于 ORA-1110、ORA-1113 或两者而导致数据库崩溃或数据库无法启动,我们首先需要确定哪些 文件需要恢复。 1) 首先我们挂载数据库,然后发出以下查询:
select * from v$recover_file; 这将为我们提供需要媒体恢复的文件列表。它还 会给我们 CHANGE#,即媒体恢复所在的 SCN 必须开始。要获取文件名,请使用 FILE# 列并 像这样查询 v$datafile: select name from v$datafile where file# = <file# from v$recover_file> 或像这样从 9i 中
select substr(d.name,1,30) fname , r.online_status , r.error , r.change# , r.time from v$datafile d, v$recover_file r where d.file# = r.file#
2) 接下来我们做:
archive log list
这将为我们提供当前的日志序列。我们需要当前的 日志序列 -1。这将为我们提供 正在使用的最后一个重做日志文件。 3)作为我们做的最后一步:
select recid , stamp , sequence# , first_change# , next_change# from v$log_history where sequence# = <current log sequence -1)
这将显示重做 日志文件中的 NEXT_CHANGE#,即最高 SCN 。它还将在 此重做日志文件中为我们提供 FIRST_CHANGE# SCN 。我们需要这 2 个 SCN 编号来确定我们是否 可以使用重做日志文件对 1) 中找到的文件进行恢复。如果 1) 中的 CHANGE# 在 FIRST_CHANGE# 和 NEXT_CHANGE# 之间,那么我们可以使用重做日志文件进行恢复。 如果 1) 中的 CHANGE# 低于 FIRST_CHANGE#,我们需要 调查较早的联机重做日志文件。 当我们确定了用于恢复的重做日志文件后,我们 通过以下方式使用重做日志文件执行恢复:
- mount the database - recover database
现在,恢复过程将显示类似于以下内容:
ORA-00279: change 12599 generated at 08/18/98 13:25:48 needed for thread 1 ORA-00289: suggestion : //arch_129.arc ORA-00280: change 12599 for thread 1 is in sequence #129 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
由于数据库未处于 ARCHIVELOG 模式,我们将没有 129.arc 文件。相反,必须在 命令行上输入重做日志文件的名称。文件名必须包含完整路径。 应用重做日志文件后,恢复过程将返回:已应用日志。 在此阶段,可能会发生 2 件事: 1) 介质恢复已完成 2) 或必须应用其他重做日志文件 如果 2) 则只需在命令行上指定下一个重做日志文件并 继续执行此操作,直到显示介质恢复已完成。这必须 完成所有重做日志文件以及当前重做日志。要查找 当前重做日志文件,可以发出以下查询:
select f.member,to_char(v.first_change#) , v.sequence# from v$log v , v$logfile f where v.group# = f.group# and v.status='CURRENT';
当 CURRENT 重做日志被应用后,可以使用以下命令打开 数据库: 有必要应用所有相关的重做日志,否则我们将无法 执行完全恢复,这是 当数据库处于 NOARCHIVELOG 模式时我们唯一的选择。 如果我们没有找到任何涵盖 1) 中CHANGE# 的在线重做日志文件,我们将无法恢复数据库或数据文件。这 意味着我们只有 2 个选项可以使数据库重新联机: 1) 从崩溃前的有效备份中恢复。这样做并 在 NOARCHIVELOG MODE 中运行数据库将导致数据丢失。 这是不可避免的。 2) 强制打开数据库。这将覆盖 Oracle 的内部 数据文件同步和一致性检查。结果是一个 不一致的数据库。现在必须导出和重建 数据库,因为不一致的数据库不可靠,因此不受支持。 最后一个选项只能与 Oracle Support 合作使用
How To Recover NOARCHIVELOG DB Using The Online Redo Log (Doc ID 186137.1)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




