1.问题现象:
rman 备份时,报错:2号数据文件异常
backup validate datafile 2;
2.排查过程
a.通过dbv查看是否有坏块
dbv file='CS_DATA02.dbf'
select * from v$database_block_corruption;
b.发现没有坏块,检查一下数据文件和数据文件头scn号,发现2和9号数据文件头部scn号和其他差了很多:
select file#,to_char(checkpoint_change#,'999999999999'),to_char(last_change#,'999999999999') from v$datafile;
file#,to_char(checkpoint_change#,'999999999999') from v$datafile_header;
查下控制文件的
SELECT CURRENT_SCN FROM v$database;
c.了解到用户那边没有感知,和现场确认是测试表空间的数据文件,并且查看数据文件都是online状态,执行一次检查点和recover datafile 2;都没有修复
alter system checkpoint;
recover datafile 2;
d.查看这两个表空间里面有没有数据,发现并没有对象,应该之前被删过
select owner,segment_name,tablespace_name from dba_segments where tablespace_name='CS_DATA02';
SELECT TABLE_NAME, COLUMN_NAME, SEGMENT_NAME, TABLESPACE_NAME
FROM DBA_LOBS
WHERE TABLESPACE_NAME ='CS_DATA02';
3.解决方法:
a.先将2和9数据文件offline(最坏情况业务有异常,再online)
ALTER DATABASE DATAFILE '路径/文件名.dbf' OFFLINE;
或者
ALTER DATABASE DATAFILE 2 OFFLINE;
b.对数据库做全备
backup database format ‘/oradata/bak_file/backup_%U.bak’;。
c.过1个月左右,如果业务没有异常,可以将这两个测试数据文件drop删除掉