今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于open状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件。

在Linux下大致重新演示一下恢复的过程,恢复的步骤与数据库版本没有太大关系,与操作系统的不同会有所不同。

1. 在数据库open的时候,直接删除users表空间中的数据文件。

SQL> select name from v$datafile;

NAME

--------------------------------------------------------------------------------

/app/oracle/oradata/ORCL/datafile/o1_mf_system_555wqbnk_.dbf

/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_555wqxgl_.dbf

/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_555wr5p6_.dbf

/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

SQL> host rm /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

2. 尝试在users表空间中创建表,开始报错。

SQL> create table t tablespace users as select * from dual;

create table t tablespace users as select * from dual

*

ERROR at line 1:

ORA-01116: error in opening database file 4

ORA-01110: data file 4:

'/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

在告警日志中,同样也可以看到类似信息。

Mon Dec 19 21:48:17 CST 2011

Errors in file /app/oracle/admin/orcl/bdump/orcl_m000_3897.trc:

ORA-01116: error in opening database file 4

ORA-01110: data file 4: '/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

3. 检查dbwr的进程PID

$ ps -ef|grep dbw0|grep -v grep

oracle 2879 1 0 21:38 ? 00:00:00 ora_dbw0_orcl

4. dbwr会打开所有数据文件的句柄。在proc目录中可以查到,目录名是进程PID,fd表示文件描述符。

$ cd /proc/2879/fd

$ ls -l

total 0

lr-x------ 1 oracle dba 64 Dec 19 21:50 0 -> /dev/null

lr-x------ 1 oracle dba 64 Dec 19 21:50 1 -> /dev/null

lr-x------ 1 oracle dba 64 Dec 19 21:50 10 -> /dev/zero

lr-x------ 1 oracle dba 64 Dec 19 21:50 11 -> /dev/zero

lr-x------ 1 oracle dba 64 Dec 19 21:50 12 -> /app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb

lrwx------ 1 oracle dba 64 Dec 19 21:50 13 -> /app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat

lrwx------ 1 oracle dba 64 Dec 19 21:50 14 -> /app/oracle/product/10.2.0/db_1/dbs/lkORCL

lrwx------ 1 oracle dba 64 Dec 19 21:50 15 -> /app/oracle/oradata/ORCL/controlfile/o1_mf_555wq3ng_.ctl

lrwx------ 1 oracle dba 64 Dec 19 21:50 16 -> /app/oracle/oradata/ORCL/datafile/o1_mf_system_555wqbnk_.dbf

lrwx------ 1 oracle dba 64 Dec 19 21:50 17 -> /app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_555wqxgl_.dbf

lrwx------ 1 oracle dba 64 Dec 19 21:50 18 -> /app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_555wr5p6_.dbf

lrwx------ 1 oracle dba 64 Dec 19 21:50 19 -> /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)

lr-x------ 1 oracle dba 64 Dec 19 21:50 2 -> /dev/null

lrwx------ 1 oracle dba 64 Dec 19 21:50 20 -> /app/oracle/oradata/ORCL/datafile/o1_mf_temp_555wrbnz_.tmp

lr-x------ 1 oracle dba 64 Dec 19 21:50 21 -> /app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb

lr-x------ 1 oracle dba 64 Dec 19 21:50 3 -> /dev/null

lr-x------ 1 oracle dba 64 Dec 19 21:50 4 -> /dev/null

l-wx------ 1 oracle dba 64 Dec 19 21:50 5 -> /app/oracle/admin/orcl/udump/orcl_ora_2871.trc

l-wx------ 1 oracle dba 64 Dec 19 21:50 6 -> /app/oracle/admin/orcl/bdump/alert_orcl.log

lrwx------ 1 oracle dba 64 Dec 19 21:50 7 -> /app/oracle/product/10.2.0/db_1/dbs/lkinstorcl (deleted)

l-wx------ 1 oracle dba 64 Dec 19 21:50 8 -> /app/oracle/admin/orcl/bdump/alert_orcl.log

lrwx------ 1 oracle dba 64 Dec 19 21:50 9 -> /app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat

注意其中“/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

(deleted)”字样,表示该文件已经被删除,如果是Solaris操作系统,ls命令不会有如此清晰的显示,为了在Solaris系统中确认哪个句

柄对应哪个文件,则需要使用lsof程序。

5. 直接cp该句柄文件名回原位置。

cp 19 /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

6. 进行数据文件recover

SQL> alter database datafile 4 offline;

Database altered.

SQL> recover datafile 4;

Media recovery complete.

SQL> alter database datafile 4 online;

Database altered.

完成数据文件恢复。

恢复的原理是,在Linux操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读

写,并且该文件的文件描述符可以从/proc目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有

其它方法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。

当然,客户的操作系统是Solaris,并且客户删除的文件还包括current online redo log,因此还有其它更复杂的操作,不在这里描述。

原创出处:

oracle 数据文件recover,Oracle数据库意外删除数据文件的恢复(转载)相关推荐

  1. android手机 文件丢失,Android手机意外删除了文件恢复

    操作方法: 如果手机已启用云备份功能或使用第三方云备份软件,则可以登录手机上的云备份帐户,最后将数据同步到手机上. 可恢复的内容包括图片和文件,信息,地址簿. Android手机使用技巧: 1.由于A ...

  2. 恢复被rm意外删除数据文件

    恢复被rm意外删除数据文件 ======================== 对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是 ...

  3. recuva文件恢复乱码_使用Recuva恢复意外删除的文件

    recuva文件恢复乱码 It can be the worst feeling in the world when you accidentally delete a very important ...

  4. linux恢复意外删除的文件

    author:skate time:2013/10/12 linux恢复意外删除的文件 当进程打开某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中.这意味着,进程并不知道文件已经 ...

  5. ORA-27041: unable to open file--恢复被rm意外删除数据文件

    当数据库中的某个数据文件被误删除之后,DBA可以选择使用已有的备份进行还原与恢复,下文为DBA提供了另一种选择,已经通过测试环境进行了相关测试,该方法是个不错的选择. 转自http://www.xif ...

  6. linux还原环境,Linux环境利用恢复被rm意外删除数据文件

    Linux环境下不小心在操作系统误rm删除数据文件后,在没有重启数据库或者操作系统的情况下可以利用操作系统句柄恢复.[@more@]1.数据库版本信息: SQL> select * from v ...

  7. Oracle查询优化-04插入、更新与删除数据

    4.1 插入新记录 问题 向表中插入一条新的记录. 解决方案 使用带有values子句的insert语句来插入一行. insert into dept(deptno,dname,loc) values ...

  8. oracle导出clob表数据及表结构,数据库导出clob数据

    PL/SQL Developer导入导出数据库方法及说明 PL/SQL Developer是Oracle数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和 ...

  9. php如何删除数据库中的数据库文件夹,学习猿地-php数据库如何删除数据

    php数据库删除数据的方法:首先创建一个代码文件:然后通过PHP函数"mysql_query"执行"SQL DELETE"语句从MySQL表中删除数据即可. 本 ...

最新文章

  1. 电大计算机应用,(2016年电大)电大全国计算机应用考试网考.doc
  2. cortex M内核优先级设置
  3. 简单题汇总,小知识点
  4. 一般屏幕的3D模型是公开的吗?
  5. EasyUI的简单介绍
  6. 贵阳计算机网络技术学院录取分数线,贵阳职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  7. JVM的7种垃圾收集器
  8. python怎么读取csv文件-python3读取csv文件任意行列代码实例
  9. Jenkins 部署 jmeter + Ant
  10. 网络空间安全和计算机科学与技术的区别,密码与网络空间安全学科有什么区别...
  11. Android屏幕旋转-横屏竖屏切换
  12. 书单 | 7月畅销新书情报,看谁是最大黑马
  13. 2017到2018总结与展望
  14. u盘中的android文件夹图标不显示,怎么解决u盘图标变成文件夹,手把手教你解决方法...
  15. 人脸识别-特征脸方法
  16. 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
  17. 晒弟弟考取的教资证写的朋友圈文案
  18. 怎么设置android投屏 桌面程序,手机怎么投屏到电脑?
  19. 幼儿园教师计算机运用论文,幼儿园信息化论文范文
  20. 日语动词活用之假定形

热门文章

  1. An RFC destination could not be specified for the logical system QI3CLNT504
  2. Unable to install breakpoint in Modify compiler options to generate line number attributes
  3. SAP WebIDE 里开发 SAP UI5 应用时,使用 Ctrl + Space 实现代码自动完成功能
  4. SAP CRM WebClient UI上分销渠道点击展开按钮后执行了哪些逻辑
  5. 最简单的教程:在Ubuntu操作系统里安装Docker
  6. 如何从ERP将Material的Batch信息下载到CRM
  7. m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
  8. 从中序与后序遍历序列构造二叉树Python解法
  9. 886 微型计算机原理,886微型计算机原理及应用.pdf
  10. php js 防止重复提交表单,php如何防止form重复提交