从报错信息来看,是数据库数据文件/oracle/DEV/sapdata2/dev_10/dev.data10有坏块。
由于SAP数据是有一致性要求的,所以一般建议从以前好的备份中恢复这个数据文件,然后滚数据库归档日志到当前状态。或者直接恢复整个数据库,滚数据库归档日志到最近状态。
恢复单个文件的方法是:
先将当前有问题的数据文件offline,然后移个位置,再用下面的命令恢复单个文件
是 brrestore -b bddcbjcq.afd -m 59=/oracle/DEV/sapdata2/dev_10/dev.data10
说明:59是文件id,可以在DB02中看到,=后面是恢复到什么目录
然后再将文件在数据库中online,ALTER DATABASE DATAFILE '/oracle/DEV/sapdata2/dev_10/dev.data10' ONLINE;
然后recover数据文件 RECOVER DATAFILE '/oracle/DEV/sapdata2/dev_10/dev.data10';
恢复整个数据库的方法是:
brrestore -b bddcbjcq.afd -m full
SQL>startup mount
SQL>recover database until cancel using backup controlfile;
逐个确认待恢复的archived redolog,待最后一个完成后,键入cancel,使恢复结束
SQL>alter database open resetlogs;
以上两种方法,都需要有之前好的数据库备份,以及到现在为止完整的数据库归档日志。如果没有这些就只能从测试机做数据库刷新到开发机了。
解决方法:
修改了数据库为非归档模式,按如下操作步骤;
alter tablespace psapdev640 offline;
alter database datafile '/oracle/DEV/sapdata3/dev640_10/dev640.data10' offline;
mv /oracle/DEV/sapdata3/dev640_10/dev640.data10 /oracle/DEV/sapbackup/
brrestore -b bevfqywn.afd -m 50=/oracle/DEV/sapdata3/dev640_10/
RECOVER DATAFILE '/oracle/DEV/sapdata3/dev640_10/dev640.data10';
ALTER DATABASE DATAFILE '/oracle/DEV/sapdata3/dev640_10/dev640.data10' ONLINE;
alter tablespace psapdev640 online;
select name,status from v$datafile;
验证结论:
http://docs.oracle.com/cd/E11882_01/server.112/e22490/dbverify.htm#SUTIL1539
https://oracle-base.com/articles/misc/detect-and-correct-corruption