Oracle 数据文件状态变为 recover 的处理方式

Oracle 数据文件状态变为 recover 的处理方式

在检查Oracle dba_data_files 中数据文件状态时发现 ONLINE_STATUS 的值是 recover,数据库处于归档模式。
假如这种情况刚刚发生,可以尝试如下方式进行处理即可:
alter database datafile 13 offline;
recover datafile 13;
alter database datafile 13 online;
select tablespace_name,file_name,autoextensible,online_status,bytes from dba_data_files;

状态变为 recover 的原因:
是执行了 alter database datafile 13 offline drop 导致,估计是在添加数据文件时写错了名字、放错了位置,或者是底层操作系统执行了误移动、删除数据文件的情况,这条命令并不是真正的删除某个数据文件,而是把一个数据文件置于离线状态。
假如恢复不了那么就需要能确认处于recover状态的数据文件上面是否存有业务数据,如果没有数据则可以选择导出整个表空间的数据,删除表空间重建,然后再把数据导入新的表空间即可;也可以将表空间上的其他对象move到另外一个表空间上,再删除这个有数据文件异常的表空间,然后重建。假如数据文件存有业务数据那么就需要根据实际情况做出相应处理。
注意:对数据文件的删除操作,一定要谨慎,并且一定要通过表空间管理命令来进行,不能直接在操作系统删除。
ALTER TABLESPACE ZZH_TBS DROP DATAFILE '+DATA/ZZH/DATAFILES/zzh_tbs01.dbf';

正确删除表空间的语法:
DROP TABLESPACE users INCLUDING CONTENTS;
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

在删除表空间数据文件之前,一定要确认数据文件是否为空、确认表空间中是否有回收站内容等:
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';
SELECT ORIGINAL_NAME, TYPE, TS_NAME, CAN_PURGE
  FROM DBA_RECYCLEBIN
 WHERE TS_NAME = '&tablespace_name';
注意:如果误操作执行了 alter database datafile 13 offline drop ,最好立即执行下 recover datafile 13 命令,重新启用该数据文件 online。

总结:数据文件 ONLINE_STATUS 状态处于 recover 对数据库的影响
1、假如该数据文件中有数据,那么数据将变得不可访问;
2、重启实例告警日志会一直写该数据文件不可用的异常记录;
3、rman 备份将会失败,如需备份就需要加 skip 跳过不可用的数据文件才能备份成功。如:backup database skip inaccessible;

情况模拟(数据库处于归档模式)
我们创建一个TEST表空间添加一个数据文件进行模拟,模拟处理过程如下:
SQL> select file_id,online_status from dba_data_files where tablespace_name='TEST';

   FILE_ID ONLINE_STATUS
---------- --------------
         5 ONLINE

SQL> alter database datafile 5 offline drop;

数据库已更改。

SQL> select file_id,online_status from dba_data_files where tablespace_name='TEST';

   FILE_ID ONLINE_STATUS
---------- --------------
         5 RECOVER
注意:执行 drop 命令后,数据文件状态变为 RECOVER。

SQL> alter database datafile 5 offline;

数据库已更改。

SQL> recover datafile 5;

完成介质恢复。

SQL> alter database datafile 5 online;

数据库已更改。

SQL> select file_id,online_status from dba_data_files where tablespace_name='TEST';

   FILE_ID ONLINE_STATUS
---------- --------------
         5 ONLINE
在 RECOVER 后 online 数据文件成功,再次查询,状态变为 ONLINE。
 

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ahern_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值