日期:2014-05-16  浏览次数:20462 次

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

    通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing
backup controlfile方式来恢复控制文件。说简单点,只要是备份的控制文件与当前的控制文件不一致进行恢复数据库,就需要使用到 unsing
backup controlfile方式,而一旦使用了该方式,则需使用resetlgos选项来打开数据库。

 

    有关控制文件的介绍请参考: Oracle 控制文件(CONTROLFILE)

 

一、基于备份控制文件的恢复注意事项(无论是否使用恢复目录catalog)
1、即使没有数据文件需要还原,当使用unsing backup controlfile 方式时必须结合 recover 命令
2、不论使用备份的控制文件进行时点恢复或完全恢复,必须使用 open resetlogs 方式打开数据库
3、如果联机日志不可访问,必须使用不完全恢复到联机日志文件中最早的一个SCN之前。这是因为RMAN并不备份联机日志文件
4、在恢复期间,RMAN自动搜索联机日志和没有记录在RMAN存储仓库中的归档日志以完成恢复
5、RMAN会根据初始化参数文件中归档位置以及控制文件联机日志信息自动寻找有效的归档日志和联机日志。使用unsing backup controlfile方
   式时,在恢复期间,一旦归档目的地以及归档格式发生变化,或添加新的联机日志成员将收到RMAN-06054错误信息。

   本文主要使用热备方式来完成演示

 

二、演示unsing backup controlfile的使用

1、控制文件全部丢失的情形(控制文件备份后发生变化)

-->首先使用热备脚本进行备份
sys@SYBO2SZ> get db_hot_bak.sql
  1  set feedback off heading off verify off
  2  set pagesize 0 linesize 200
  3  define dir='/u02/database/SYBO2SZ/backup/hotbak'
  4  define script='/tmp/tmphotbak.sql'
  5  spool &script
  6  select 'ho cp '||name||' &dir' from v$datafile;
  7  spool off
  8  alter database begin backup;
  9  start &script
 10  alter database end backup;
 11  alter database backup controlfile to '&dir/contlbak.ctl' reuse;
 12  create pfile='&dir/initSYBO2SZ.ora' from spfile;
 13* set feedback on heading on verify on pagesize 100
 
sys@SYBO2SZ> @db_hot_bak 

sys@SYBO2SZ> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u02/database/SYBO2SZ/controlf
                                                 /cntl1SYBO2SZ.ctl, /u02/databa
                                                 se/SYBO2SZ/controlf/cntl2SYBO2
                                                 SZ.ctl, /u02/database/SYBO2SZ/
                                                 controlf/cntl3SYBO2SZ.ctl
                                                 
-->为数据库添加新的表空间,此时控制文件将不同于先前备份的控制文件                                                  
sys@SYBO2SZ> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on;

Tablespace created.

-->为数据库添加对象
sys@SYBO2SZ> create table tb_emp tablespace tbs as select * from scott.emp ;

Table created.

sys@SYBO2SZ> select count(*) from tb_emp;

  COUNT(*)
----------
        14

sys@SYBO2SZ> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         3          1        116   20971520          2 NO  CURRENT                1078066 08-SEP-12
         4          1        115   20971520          2 YES INACTIVE               1063428 08-SEP-12

sys@SYBO2SZ> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,
-----------------
20120908 16:30:41

-->切换日志
sys@SYBO2SZ> alter system archive log current;

System altered.

-->删除部分记录用于恢复后验证
sys@SYBO2SZ> delete from tb_emp where deptno=10;

3 rows deleted.

sys@SYBO2SZ> commit;

Commit complete.

sys@SYBO2SZ> alter system archive log current;

System altered.

sys@SYBO2SZ> ho ls -hltr /u02/databa