oracle 控制文件丢失 oracle11g 控制文件丢失重建控制文件

当rman备份信息存放控制文件中,恢复丢失了的控制文件问题:

Q:
我正在做一些rman恢复测试,不过我对恢复中得到的一些反馈感到惊讶。
我的数据库rman备份信息是存在在控制文件中的。RMAN设置是对控制文件进行autobackup。
我从备份中将控制文件恢复出来了,不过当我尝试打开数据库时,我收到了以下报错:

ORA-01113: file 1 needs media recovery followed by ORA-01110: data file 1

因此,我对整个数据库进行了restore和recover操作。
但是因为控制文件是启动的自动备份,我难道不能仅仅简单地在那个时点进行打开数据库操作么?


A:

  • 当你从备份中恢复了一份控制文件,控制文件中的SCN是过时的。
    所恢复的控制文件来自过去的备份(它的状态应该是BACKUP)。
    因此你需要进行部分恢复来保证所有数据文件,重做日志和控制文件都恢复到一致的SCN上。
    在你没有将所有文件进行同步的前提下,你是无法打开数据库的。
  • 进行恢复后,一旦所有数据文件都保持一致后,那么open resetlogs会将所有三类文件写入相同的SCN号(数据文件,redo日志文件,控制文件)。如果是做完全恢复,那么就不需要resetlogs, 不过需要一份当前最新的控制文件(非备份)和当前在线重做日志(未被备份)。

为了检查你的数据库一致性,你可以使用以下语句进行查看:

set echo on;
set feedback on;
set numwidth 30;
set pagesize 50000;
alter session set nls_date_format = 'DD-MON-RRRR HH24:MI:SS';
column name format a10;
SELECT status,
       checkpoint_change#,
       checkpoint_time,
       resetlogs_change#,
       resetlogs_time,
       COUNT(*),
       fuzzy
  FROM v$datafile_header
 GROUP BY status,
          checkpoint_change#,
          checkpoint_time,
          resetlogs_change#,
          resetlogs_time,
          fuzzy;

要想打开数据库,就必须仅返回一行(数据文件保持一致性状态)且 fuzzy列值为NO。

以下查询则告诉你数据文件所需的最小和最大sequence号,它可以是相同的值或者两者存在间隙,这取决于当时数据库的活动和多久进行备份等情况。

select min(fhrba_Seq), max(fhrba_Seq) from X$KCVFH;

恢复操作举例

将备份控制文件恢复到默认位置

  • 如果实例仍在运行,关闭先:
SQL> SHUTDOWN ABORT
  • 先处理引发介质受损的硬件问题。
  • 将备份控制文件恢复到CONTROL_FILES所指定的位置。

例如,如果/disk1/oradata/trgt/control01.dbf和/disk2/oradata/trgt/control02.dbf是在spfile中已经列出的控制文件位置,那么可以使用操作系统工具将备份的控制文件恢复到这些指定位置上:

% cp /backup/control01.dbf /disk1/oradata/trgt/control01.dbf
% cp /backup/control02.dbf /disk2/oradata/trgt/control02.dbf
  • 启动实例并mount数据库。例如:
SQL> STARTUP MOUNT 
  • 执行带有USING BACKUP CONTROLFILE语法的RECOVER命令开始进行恢复。如果进行的是不完全恢复,那么指定UNTIL CANCEL。例如:
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
  • 应用提示所需的归档日志。如果被告知某个归档日志丢失,那么这可能意味着这个日志可能在在线重做日志目录中,这一般发生在实例挂掉后在线重做日志归档未完成的情况下。
    例如,假设你看到以下报错:
ORA-00279: change 55636 generated at 11/08/2002 16:59:47 needed for thread 1
ORA-00289: suggestion : /oracle/work/arc_dest/arcr_1_111.arc
ORA-00280: change 55636 for thread 1 is in sequence #111
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
You can specify the name of an online redo log and press Enter (you may have to try this a few times until you find the correct log):

ORACLE_HOME/oradata/redo01.dbf
Log applied.
Media recovery complete.

如果发现在线重做日志无法访问,那么你可以取消继续恢复。
如果所有数据文件都是最新的,且在线重做日志需要且可以用于进行恢复,那么你就不应该在未应用在线重做日志的情况下选择打开数据库。
如果在线重做日志无法访问,那么你就必须重建控制文件来进行恢复。

  • 最后在完成数据库恢复后使用RESETLOGS打开数据库。
SQL> ALTER DATABASE OPEN RESETLOGS;

猜你喜欢

转载自blog.csdn.net/liu_maclean/article/details/81563297