Oracle无备份情况下,部分datafile丢失的处置方法

事情过去了,还是记录一下吧:
1.主机空间腾挪出现失误,将/u4的datafile搬到/u5,结果造成同名文件被覆盖掉,这里/u5/oradata/orcl/USER_DATA.dbf被覆盖掉了,造成database起不来
这是db_data_files的记录

file_id   file_name
17       /u5/oradata/orcl/USER_DATA.dbf    
18       /u4/oradata/orcl/USER_DATA.dbf  ---两个文件同名,但分属不同的分区,所以USER_DATA.dbf从/u4搬到u5时覆盖掉了u5的同名文件

2.处理办法:
由于是测试库,平日没有备份,也没有开启archive log,无法执行恢复作业,所以先offline被盖掉的datafile吧
alter databaase datafile ‘/u5/oradata/orcl/USER_DATA.dbf’ offline
先暂时开启来吧,能救一点是一点了

alter database open

开起来了,前端说部分可以读,部分不可已读,出现错误如下:

ORA-00376: file 17 cannot be read at this time
ORA-01110: data file 17: '/u5/oradata/orcl/user_data.dbf'
00376. 00000 -  "file %s cannot be read at this time"
*Cause:    attempting to read from a file that is not readable. Most likely the file is offline.
*Action:   Check the state of the file. Bring it online

我知道,这是因为file 17已经被盖掉了,db层面已经offline了,
因为file17已经救不回来了,后续的方案是select过程中如何绕过file 17
先定位有哪些table位于file 17吧

select distinct owner,segment_name from dba_extents where file_id=17 and segment_type='TABLE'

想到用rowid绕过file 17:

create table RECEIVE_NOTE_NEW as  select * from RECEIVE_NOTE where dbms_rowid.ROWID_RELATIVE_FNO(rowid)<>17

还是无法绕过:

ORA-00376: file 17 cannot be read at this time
ORA-01110: data file 17: '/u5/oradata/orcl/user_data.dbf'
00376. 00000 -  "file %s cannot be read at this time"
*Cause:    attempting to read from a file that is not readable. Most likely the file is offline.
*Action:   Check the state of the file. Bring it online

想来想去,最后发现绕不过去是因为上述sql执行full table scan,,首先确认一下这些table是否有索引
在这里插入图片描述
还好都有索引,改良一下吧:

create table RECEIVE_NOTE_NEW as  select /*+INDEX(RECEIVE_NOTE IDX_RECEIVE_NOTE1)*/ * from RECEIVE_NOTE where dbms_rowid.ROWID_RELATIVE_FNO(rowid)<>17 and inv_no is not null

终于看到如下字样了:

Table RECEIVE_NOTE_NEW 已建立.

好了,剩下的工作就是rename table了,这里就不赘述了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值