Oracle数据文件误删除(没开归档,无备份,闪回也没有开之开启数据库方法)

碰到了一件悲催的事情,数据库没开归档,没开备份误删除了一个数据文件。开启数据库报错,datafile丢失,需要介质恢复。不过幸好只是测试环境,只要能正常开启就行,数据文件啥的不重要了。不过就算想恢复数据文件也不可能了,因为发现已经是5天后了,日志早就刷新到哪里去都不知道了。

1.定位丢失的数据文件
可以看到SWA_LOB表空间的数据文件5异常,大小,自动扩展都是空。

select FILE_NAME,TABLESPACE_NAME,bytes/1024/1024,AUTOEXTENSIBLE,MAXBYTES/1024/1024 from dba_data_files;
在这里插入图片描述

2.关闭数据库

shutdown immediate

3.启动数据库到mount状态

startup mount

4.删除刚才的数据文件

alter database datafile ‘/oracle/oradata02/***/swa_lob_05.dbf’ offline drop;

5.打开数据库

alter database open

6.查看数据文件的状态,发现还是一样。
在这里插入图片描述

7.删除表空间,报错,提示还有相关的表,视图没删除
drop tablespace swa_lob INCLUDING CONTENTS and datafiles;
在这里插入图片描述

7.因为是大字段表,所以要删除所有该用户相关的表和视图

SELECT * FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE ‘%LOB%’ AND OWNER=‘SWALOB’;

8.查询出来的结果一一删除。
删除之前用将需要删除的表和视图的ddl语句备份,用sqldeveloper选中对象表快速DDL保存到文件。

drop user.table table_name;
drop user.viewer view_name;

9.再次删除表空间,成功。

drop tablespace swa_lob INCLUDING CONTENTS and datafiles;

10.重建表空间

create tablespace SWA_LOB datafile ‘/oracle/oradata02/***/swa_lob_01.dbf’ size 1G AUTOEXTEND ON MAXSIZE 30G;

11.通过执行刚才备份的DDL文件,恢复刚才删除的表

12.确认失效的同义词,视图等等

select * from all_objects where status <> ‘VALID’ and owner not in (‘SYS’,‘PUBLIC’,‘WMSYS’,‘APEX_030200’) order by owner;

13.重新编译失效的同义词和视图,或者存储过程。

alter view user.view_name compile;编译视图
alter synonym user.synonym_name compile.编译同义词
alter package user.package_name compile;编译package
alter package user.package_name compile body;编译package body

14.编译时可能会报权限错误,根据错误提示进行授权。

grant select on user.table_name to user;

OK,到此为止异常的表空间恢复了,再从正式环境导入数据即可。
*以上经验都是自己测试所得,如有错误请指正,谢谢!
数据无价,建议清理之前备份需要清理的表空间!实际操作应先在测试环境测试完成后,再在生产环境执行。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值