dba_data_files 检查数据文件,发现ONLINE_STATUS的值是recover,该怎么办?
select tablespace_name,file_name,autoextensible,
online_status,bytes from dba_data_files;
为什么数据文件的ONLINE_STATUS是RECOVER?通常是由于执行了 alter database datafile 3 offline drop导致,估计是因为添加数据文件时写错了名字或者是底层操作系统执行了删除,数据库重启打不开了,但是这个命令并不是真正的删除某个数据文件,而是把一个数据文件置于离线状态,并且需要恢复的目的(recover的含义就已经说明了意图)才用到。 数据文件的相关信息还会存在数据字典和控制文件中。
处于recover状态的,如果确认的确不要了,上面没有业务数据(判断方法往后看),那就导出整个表空间的数据,删除表空间重建,然后再导入。或者将表空间上的其他对象move到另外一个表空间上,再删除这个表空间。
总之,对数据文件的删除,应该通过表空间层面的命令来进行,例如:
ALTER TABLESPACE example DROP DATAFILE '+DG1/exam3.dbf';
如果是归档模式下,而且发生此情况不久(1天以内),可以尝试用以下命令恢复正常:
alter database recover datafile 3;
alter database datafile 3 online;
从头梳理一下相关知识点:
1、看看alter database命令的语法:
标准命令应该是:
offline或drop的作用是:
2、再看一下删除datafile的限制:
3、再看一下dba_data_files 的ONLINE_STATUS字段的几种状态:
4、删除表空间的注意事项:
命令语法:
DROP TABLESPACE users INCLUDING CONTENTS;
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;
5、确定数据文件是否为空
SELECT distinct b.owner, b.segment_name
FROM dba_data_files a,
dba_extents b
WHERE a.file_id = b.file_id
AND a.tablespace_name ='&tablespace_name'
AND a.file_name ='&datafile_name';
6、确认表空间中是否有回收站内容
SELECT original_name, type, ts_name, can_purge
FROM dba_recyclebin
WHERE ts_name='&tablespace_name'
7、处于recover状态会有什么影响?
1)此文件中的信息不可访问,如果有的话
2)重启实例不会起不来,告警日志会有异常提示
3)rman备份需要加skip,例如 backup database skip inaccessible;
4)看着难受
结束。