只有rman的备份文件(数据文件)恢复过程

通过rman备份文件恢复spfile


通过rman备份文件恢复controlfile


通过rman备份文件恢复datafile


利用恢复回来的controlfile和datafile生成redolog


我系统环境所有的文件如下:
[oracle@test dbs]$ pwd
/opt/oracle/10g/dbs
[oracle@test dbs]$ ls
initdw.ora  init.ora
ls /opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/
o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp
o1_mf_nnndf_TAG20080718T203240_482fkb0k_.bkp
在我这台电脑上, ,系统中所有的ORCL相关的数据文件,参数文件,日志文件,控制文件全部不在了, 没有其他可用的备份文件了,只有rman备份的文件在,这可怎么办呢?


restore必须在mount or open状态下.参数文件,控制文件都没有怎么mount? 
要mount必须有参数文件,控制文件,为此我们必须解决这2个难题了.参数文件,控制文件
在解决难题前先准备ORCL的必须的目录:
[oracle@test dbs]mkdir /opt/oracle/oradata/orcl
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/adump –p
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/cdump
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/bdump
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/udump
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/dpdump
[oracle@test dbs]mkdir /opt/oracle/admin/orcl/pfile
难题1:spfile参数文件恢复
有人说没参数文件我新建立一个pfile,当然这个办法是可行的,不过在10g中rman备份是自动备份了spfile的,所以我们可以利用rman来恢复spfile了.
[oracle@test dbs]rman target / nocatalog
RMAN> list backup;
RMAN-00571: ================================================


RMAN-03002: failure of list command at 07/18/2008 21:24:37
RMAN-06403: could not obtain a fully authorized session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist


看到上面的是正常的,因为数据库没有启动呢.
于是我们先启动数据库到nomout下
RMAN>startup nomount
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/10g/dbs/initorcl.ora'
starting Oracle instance without parameter file for retrival of spfile
Oracle instance started
RMAN>list backup;
将与上次执行看到的一样,此时也是正常的,不必担心,下面就是利用rman备份文件来解决难题1了.
RMAN> 
restore spfile from 
'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp';
下面是来验证spfileorcl.ora文件是否已存在:
[oracle@test dbs]$ ls
initdw.ora  init.ora  spfileorcl.ora


有了参数文件,就需要解决控制文件恢复了
难题2. 控制文件恢复
有分为两种方法来处理:
1是有在configure中设定autobackup controlfile


2在configure中没有设定autobackup controlfile;


平时可以通过在RMAN中输入CONFIGURE CONTROLFILE AUTOBACKUP ON;就会自动备份了
    是有在configure中设定autobackup controlfile的解决方法
启动到startup nomount;


RMAN>restore controlfile from 
'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp'; 
2.在configure中沒有设定autobackup controlfile 就可以通过下面的package从backupset中來提取controlfile


利用dbms_backup_restore提取controlfile恢复控制文件
步骤:


[oracle@test dbs]$sqlplus /nolog


SQL> conn /as sysdba


由于在刚才使用rman时执行了startup nomount,所以这里是connected,下面我们到nomount状态
SQL> startup force nomount


SQL>DECLARE


devtype varchar2(256);


done boolean;


BEGIN


devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');


sys.dbms_backup_restore.restoreSetDatafile;


sys.dbms_backup_restore.restoreControlfileTo(cfname=>'/opt/oracle/oradata/orcl/control01.ctl');


sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp',params=>null);


 sys.dbms_backup_restore.deviceDeallocate;


 end;


/
下面验证control01.ctl是否恢复:
[oracle@test dbs]$ ls /opt/oracle/oradata/orcl/
control01.ctl


于是我们可以启动数据库到mount状态了.


[oracle@test dbs]$sqlplus /nolog
SQL> conn /as sysdba
SQL> startup force mount
ORA-00205: error in identifying control file, check alert log for more info
我们已经恢复了控制文件了,怎么还是有错误呢,其实不用担心,看看spfile中的记录先
SQL> show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      


/opt/oracle/oradata/orcl/control01.ctl, /control02.ctl, control03.ctl
既然如此,我们就把控制文件同步下好了.
SQL> ho cp /opt/oracle/oradata/orcl/control01.ctl        
/opt/oracle/oradata/orcl/control02.ctl
SQL> ho cp /opt/oracle/oradata/orcl/control01.ctl /opt/oracle/oradata/orcl/control03.ctl
SQL> alter database mount;
SQL> ho ls /opt/oracle/oradata/orcl/
control01.ctl  control02.ctl  control03.ctl
3、恢复数据文件
有了恢复后的控制文件,我们就可以使用rman查看与使用以前的rman备份了.
恢复datafile 步骤:
rman target / nocatalog
connected to target database: ORCL (DBID=1188209463, not open)
看到了 红色部分了吗,太好了终于看到了正常的rman登陆信息了.
那就RMAN> list backup; 看看能找到我们的
o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp
o1_mf_nnndf_TAG20080718T203240_482fkb0k_.bkp


太好了,总于可以使用restore,recover来恢复datafile了.
RMAN> restore database;
此时可以在$ORACLE_BASE/oradata/orcl/下看到期望已久的datafile了.
[oracle@test dbs] ls /opt/oracle/oradata/orcl/
control01.ctl  sysaux01.dbf  system01.dbf  undotbs01.dbf  users01.dbf
不过此时还没有完哈,需要在接在励.
由于没有redo log日志文件所以我们不能应用日志恢复:


4、恢复redo日志文件、日志文件、密码文件
RMAN> recover database noredo;
到目前我们已经拥有了参数文件,控制文件,数据文件了:
[oracle@test dbs] ls /opt/oracle/oradata/orcl/
[oracle@test dbs] ls /opt/oracle/10g/dbs/
alert_orcl.log  hc_orcl.dat  initdw.ora  init.ora  lkORCL  spfileorcl.ora
还差一个密码文件,以及相关的日志文件了.
先解决密码文件:
[oracle@test dbs] orapwd file=/opt/oracle/10g/dbs/orapworcl password=uplooking entries=5
[oracle@test dbs] ls /opt/oracle/10g/dbs/
alert_orcl.log  initdw.ora  lkORCL     spfileorcl.ora  hc_orcl.dat     init.ora    orapworcl
下面需要大家坚持不懈的完成最后一个工作了.
那就是通过已经恢复的controlfile and datafile 来演算出redo log file了.
步骤:
[oracle@test dbs]sqlplus /nolog
SQL> conn /as sysdba
SQL>startup mount;
SQL> alter system set "_allow_resetlogs_corruption"=TRUE scope=spfile;
SQL>ho ls /opt/oracle/oradata/orcl/
control01.ctl  control03.ctl  sysaux01.dbf  undotbs01.dbf
control02.ctl  orapworcl      system01.dbf  users01.dbf
下面没有redo log file ,下面我将演算出redo log
SQL>startup force
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL>alter database open resetlogs;
SQL> ho ls /opt/oracle/oradata/orcl/
好了到这里,非常高兴了,你已经成功的从只有rman备份文件中恢复了参数文件,控制文件,所有数据文件,日志文件了. 
最好在做个数据库全备份


你可能感兴趣的:(只有rman的备份文件(数据文件)恢复过程)