前言
前言
上次尝试了部分丢失控制文件后通过另外已存在的备份文件进行恢复的方法,但一旦两个控制文件全部损坏这种方法即无法使用。故本次尝试使用RMAN进行系统备份及恢复,同时记录遇到的一个问题。
一、使用RMAN备份
RMAN备份分为全量备份、增量备份;增量备份中的0级备份与全量备份类似,其可作为1级备份的基础。本次使用level 0级备份。
[oracle@******]$ rman target /
RMAN> backup as compressed backupset incremental level=0 format '/data/rmanback/data/df0_t%T_s%s_p%p' database include current controlfile;
RMAN> list backup;
*注:RMAN登录时有一个DBID记得记录下来,恢复控制文件时需要。
二、模拟控制文件丢失(选一个就好)
1. 改名
[root@******] mv /u01/app/oradata/ORCL/control01.ctl /u01/app/oradata/ORCL/control01_back.ctl
2. 更改路径
[root@******] mv /u01/app/oradata/ORCL/control01.ctl /u01/app/oradata/ORCL1/control01.ctl
三、开始恢复
1、重启数据库, 将数据库启动到nomount状态
SQL> startup nomount;
2、通过rman还原控制文件
[oracle@******]$ rman target /
RMAN> set DBID=********;
RMAN> restore controlfile from '/data/rmanback/data/df0_**_**_**';
如果不知道控制文件在哪一个备份集、哪一个切片内,如果文件不多可一个一个试)
3、将数据库启动到mount状态
SQL> alter database mount
4、还原、恢复和启动数据库
RMAN> restore database;
RMAN> recover database;
RMAN> sql 'alter database open resetlogs';
四、故障记录
第一步备份时,未检查list backup,故未发现进行的level 0级备份产生的文件未更新进catalog(即list backup里仍然是上次备份的数据文件但此时该文件已被删除),这就导致list backup of datafile 1; 显示的数据文件为已过期的上次备份的文件,进而在第三(4)步restore database时系统无法读取旧备份文件状态,报错ORA-19870、ORA-19505、ORA-27037、RMAN-00571、 RMAN-00569、RMAN-03002、ORA-01180、ORA-01110。
解决方法为
RMAN> catalog start with '/data/rmanback/data/';
(语句地址最后一定要以 / 结尾)在catalog中重新注册新的备份集。然后restore, recover即可正常运行。