数据恢复:如何恢复Linux中意外删除的文件

企业动态
数据文件恢复的原理是,在 Linux 操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从 /proc 目录中获得。

 

[[163584]]

  张乐奕

  云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人

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

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

 

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

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

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

  3. 检查 dbwr 的进程 PID

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

  注意其中“/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)”字样,表示该文件已经被删除,如果是 Solaris 操作系统,ls 命令不会有如此清晰的显示,为了在 Solaris 系统中确认哪个句柄对应哪个文件,则需要使用 lsof 程序。

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

  6. 进行数据文件 recover

  完成数据文件恢复。

  恢复的原理是,在 Linux 操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从 /proc 目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有其它方法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。

 

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

 

责任编辑:市场部 来源: 南方企业新闻网
相关推荐

2022-03-28 19:53:24

Linux恢复文件意外删除文件

2013-06-05 11:41:53

2017-01-12 19:22:19

Linuxlsof命令恢复删除的文件

2009-12-21 16:17:01

2016-11-17 12:46:45

2016-11-22 19:37:54

Linux恢复文件

2020-10-05 22:02:00

testdiskLinux文件

2021-10-22 09:42:13

Linux恢复文件

2020-09-30 06:00:00

Linux误删除恢复文件

2017-07-21 13:25:33

LinuxMD5哈希恢复文件

2015-06-04 16:02:08

顶尖数据文件乱码

2015-08-06 09:19:09

2010-06-01 15:11:08

SVN删除文件

2017-06-22 08:41:58

MySQLibd文件恢复数据

2018-04-18 10:10:07

Windows 10照片恢复

2011-04-14 15:12:10

Linux恢复

2018-04-28 15:28:44

数据库MySQL误删除

2009-07-02 19:07:25

Linux

2009-06-29 08:52:04

Linux

2021-01-07 09:56:43

Windows 功能系统
点赞
收藏

51CTO技术栈公众号