重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4420|回复: 2

[备份恢复] 如何恢复LINUX中意外删除的文件

[复制链接]
发表于 2016-3-11 19:18:45 | 显示全部楼层 |阅读模式
如果数据库被删除了整个目录的数据文件,操作系统级别的删除,那么如何恢复呢??


一下为测试(确保万一,先把虚拟机设置快照)
1.在数据库 open 的时候,直接删除 users 表空间中的数据文件。


2751256e2a8e81414b.png


2. 尝试在 users 表空间中创建表,开始报错。
6585356e2a9033c6bc.png
在告警日志中,同样也可以看到类似信息。
2728956e2a914aa71a.png


3. 检查 dbwr 的进程 PID
7836356e2a924a30da.png


4. dbwr 会打开所有数据文件的句柄。在 proc 目录中可以查到,目录名是进程 PID,fd 表示文件描述符。
6212356e2a93650109.png
注意其中“/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)”字样,表示该文件已经被删除,如果是 Solaris 操作系统,ls 命令不会有如此清晰的显示,为了在 Solaris 系统中确认哪个句柄对应哪个文件,则需要使用 lsof 程序。

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


6. 进行数据文件 recover
3721156e2a96dade69.png
完成数据文件恢复。

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



回复

使用道具 举报

发表于 2016-3-13 15:59:18 | 显示全部楼层
有实战意义,原创吗
回复 支持 反对

使用道具 举报

发表于 2016-11-16 12:12:53 | 显示全部楼层
分享是快乐的!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-19 02:06 , Processed in 0.121228 second(s), 27 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表