通过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备份文件中恢复了参数文件,控制文件,所有数据文件,日志文件了.
最好在做个数据库全备份