RMAN> run {
sql'alter database datafile 10 offline';
switch datafile 10 to datafilecopy
'/u01/app/oracle/fra/ORCL/autobackup/2019_07_23/o1_mf_s__glzrwsd5_.dbf';
sql'alter database datafile 10 online';
}
场景4:数据文件yhqt01.dbf在备份时为只读状态(read only),后来所在的表空间yhqt被修改为read write状态, 但没有备份,现在该数据文件损坏了
--open
RMAN> run {
sql'alter database datafile 10 offline';
restore datafile 10;
recover datafile 10;
sql'alter database datafile 10 online';
}
场景5:数据文件yhqt01.dbf在备份时为read write,后来被修改为read only状态,没有备份,现该数据文件损坏
--open
RMAN> run {
sql'alter database datafile 10 offline';
restore datafile 10 force;
recover datafile 10;
sql'alter database datafile 10 online';
}
在restore中使用force关键字是为了使该命令能够应付文件虽然损坏却依然存在的情况。
11.3.3 控制文件损坏情况下的恢复
所谓控制文件损坏情况下的恢复是指:只读数据文件与控制文件一起损坏时的恢复
--1 启动到nomount
--2 用restore 还原控制文件
--3 启动到mount
--4 用restore还原只读数据文件
--5 用recover恢复整个数据库
--6 用resetlogs打开数据库
场景1:只读数据文件yhqt01.dbf与控制文件一起损坏或丢失,db只能启动到nomount状态,错误报告:ORA-00205: error in identifying control file ,check alert log more info
RMAN> run {
startup nomount;
restore controlfile from autobackup;
mount database;
restore datafile 10;
recover database;
alter database open resetlogs;
}
##recover database 是恢复控制文件的标准操作,对只读的10号数据文件是没有作用的,该命令对应的输出结果中将显示“10号文件未被处理的信息”
using channel ORA_DISK_1
datafile 10 not processed because file is read-only
场景2:在数据文件yhqt01.dbf为只读状态时,对该文件和控制文件进行了备份,随后yhqt表空间(包含yhqt01.dbf数据文件)修改为read write,但数据文件和控制控制文件没有备份,如今yhqt01.dbf和controlfile同时损坏。
ORA-00205: error in identifying control file ,check alert log more info
RMAN> run {
startup nomount;
restore controlfile from '/u01/app/oracle/fra/ORCL/autobackup/2019_07_18/o1_mf_s_1013968921_gm0jws37_.bkp';
mount database;
restore datafile 10;
recover database;
alter database open resetlogs;
}
Oracle Error
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error blew
ORA-01152: file 10 was not restored from a sufficiently old backup
ORA-01110: data file 10 :'/u01/app/oracle/oradata/orcl/yhqt01.dbf'
造成此问题的原因是数据文件头和控制文件内信息一致,表示yhqt01.dbf应该是只读文件,导致执行了recover database时,yhqt01.dbf文件根本没有被列入应该恢复的范畴。
但随着恢复的进行,redo log中有一条变更记录把yhqt01.dbf修改为read write状态,此时通道意识不到不应该将yhqt01.dbf文件排除在恢复之外,继而在recover时报错。
解决办法:在执行一次recover database
正确的方案
RMAN> run {
startup nomount;
restore controlfile from '/u01/app/oracle/fra/ORCL/autobackup/2019_07_18/o1_mf_s_1013968921_gm0jws37_.bkp';
mount database;
restore datafile 10;
recover database;
recover database;
alter database open resetlogs;
}
当控制文件和数据文件(只读或曾经处于只读状态)同时损坏之后。
RMAN> run {
startup nomount;
restore controlfile from autobackup;
mount database;
restore datafile 10;
recover database;
recover database;
alter database open resetlogs;
}