RMAN> run {
startup mount;
sql'alter database datafile 10 offline';
alter database open;
restore datafile 10;
recover datafile 10;
sql'alter database datafile 10 online';
}
10.3.3 文件头部损坏后的恢复
数据文件头部损坏之后,如果又处于offline状态,将来执行restore命令时通道会“不认识”这种文件,导致还原无法完成。Alert log中出现ORA-01210
场景:yhqt01.dbf文件头部已经损坏,随后检查点也已发生,告警日志中出现ORA-01210和ORA-01171错误,并已在控制文件中将yhqt01.dbf文件的状态修改为offline,
用户访问yhqt表空间的对象都返回ORA-00376: file 10 cannot be read at this time
此时用restore命令还原yhqt01.dbf文件将意外引发RMAN-06010错误,原因是控制文件表示该文件已下线,restore发现yhqt01.dbf存在,通道还是会访问yhqt01.dbf文件头部,
以确认其信息是否与控制文件中的一致,但损坏的是文件头,命令失败。
解决:
--1 删除头部已损坏的数据文件,这样通道就不会尝试检查文件头,当做文件丢失处理
--2 在db处于mount状态用alter database datafile ... online将数据文件修改为online,再使用restore
RMAN> restore datafile 10;
ORA-01135: file 10 accessed for DM/query is offline
ORA-01110: datafile 10 :/u01/app/oracle/oradata/orcl/yhqt01.dbf
RMAN-06010: error while looking up datafile 10
删除该数据文件
$ rm /u01/app/oracle/oradata/orcl/yhqt01.dbf
RMAN> restore datafile 10;
RMAN> recover datafile 10;
SQL> alter database open;
SQL> alter database datafile 10 online;
所以数据文件头部损坏后的修复步骤应该在低可用策略与高可用策略的基础上,再根据相关数据文件是否已经offline区分,总共3种:
--1未下线低可用策略恢复(online,mount)
--2已下线低可用策略恢复(offline,mount)
--3已下线高可用策略恢复(offline,open)
1的恢复的主要步骤
--1 使用shutdown abort关闭实例
--2 执行startup mount启动实例到mount状态
--3 RMAN执行restore或switch还原损坏的普通数据文件
--4 RMAN执行recover database 利用归档日志和在线日志恢复数据文件
--5 alter database open 打开数据库,恢复完成
RMAN> run {
shutdown abort;
startup mount;
restore datafile 10;
recover database;
alter database open;}
2的恢复主要步骤
--1 使用shutdown abort关闭实例
--2 startup mount到mount状态
--3 alter databse datafile 10 online将数据文件在控制文件中的状态修改为上线
--4 RMAN> restore datafile 10; 还原数据文件
--5 RMAN> recover database;
--6 SQL>alter database open;
RMAN> run {
shutdown abort;
startup mount;
sql'alter database 10 online';
restore datafile 10;
recover database;
alter database open;}
3的恢复主要步骤
--1 使用操作命令删除损坏的头部的普通数据文件,若非头部损坏忽略此步骤
--2 如果实例已经停止,startup mount启动到mount状态,如果数据库open状态,则忽略此步骤
--3 alter database 10 offline;
--4 如果符合第二步的条件,使用alter database open 打开数据库,否则忽略此步骤
--5 使用RMAN> restore datafile 10;
--6 RMAN>recover tablespace或者recover datafile,利用归档和redo log恢复数据文件
--7 执行alter database datafile 10 online;
$ rm /u01/app/oracle/oradata/orcl/yhqt01.dbf
--实例未关闭
RMAN> run {
sql'alter database datafile 10 offline';
restore datafile 10;
recover datafile 10;
sql'alter database datafile 10 online';
}
--实例已关闭
RMAN> run {
startup mount;
sql'alter database datafile 10 offline';
alter database open;
restore datafile 10;
recover datafile 10;
sql'alter database datafile 10 online';
}