恢复被rm意外删除数据文件
来源:互联网 发布:sql select a,b,c 编辑:程序博客网 时间:2024/05/21 21:41
恢复被rm意外删除数据文件
========================
对于rm,很多人都有惨痛的教训。我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍。但是很多人可能就不像我这么幸运了。本文收集了一些恢复rm删除的文件的方法,给大家作为参考。
首先,最好的方法是避免这个问题,以下是几点建议:
1、rm -rf误操作的后果是可怕的,rm -f也要三思而行,不能轻易使用。
2、做好数据备份。
3、用一些策略避免出错:
提倡在shell下用 TAB 补全,用脚本执行任务,减少出错的机会。
或者编写一个脚本,起名rm,在脚本里将真实的rm改为mv ,将删除的都mv到一个指定的目录里面,定期清理。
那么rm删除的文件还能恢复吗?
rm的man里面有如下说法:
请注意,如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证该文件的内容无法还原,请考虑使用 shred。
所以理论上rm删除的文件是还能恢复的。删掉文件其实只是将指向数据块的索引点(information nodes)释放,只要不被覆盖,数据其实还在硬盘上,关键在于找出索引点,然后将其所指数据块内的数据抓出,再保存到另外的分区。在用rm误删除文件后,我们要做的第一件事就是保证不再向误删文件的分区写数据。
通常我们可以有以下几种选择:
1、借助工具。
2、自己写程序。你需要会编程并了解对应的文件系统。
3、如果数据很有用,也许可以找专业公司抢救。
工具
1、The Sleuth Kit http://www.sleuthkit.org/sleuthkit/(Autopsy是它的一个图形前端)
2、Foremost http://foremost.sourceforge.net
3、一个全能的工具,Finaldata,可以恢复unix/linux/dos下误删的文件。对于unix,支持这些产品, Solaris、AIX和HP-UX。对于linux,支持EXT2的文件系统。对于dos,支持FAT 12/16/32, NTFS 4/5/5.1 的文件系统。
4、如果文件系统是ext2(对ext3无效):
ext3的删除机制是直接把 inode data 删除了,所以造成 ext3 无法反删除(ext3设计为无法恢复被删除的文件)。
unrm
ext2ed
ebugfs(undel lsdel )
recover
Midnight Commander(mc)
e2undel
tct
5、如果文件系统是FAT32或者NTFS:
asyRecovery
inaldata
6、freebsd如果使用了rm,可以试一下undelete这个命令.
7、有人用debugfs恢复ext3被rm的资料
http://www.sosdb.com/jdul/dispbbs.asp?boardID=6&ID=342&page=1
8、当进程打开了某个文件时,只要该进程保持打开该文件,lsof可以用来恢复删除文件。
编程的方式
1、CU上有人写了一个小程序恢复Solaris上误删的数据
http://bbs.chinaunix.net/viewthread.php?tid=16642
2、恢复ext3被rm的资料
http://blog.seety.org/everydaywork/2005/3/11/248/
3、如何恢复 Linux 上删除的文件,第 2 部分
http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc2/?S_TACT=105AGX52
oracle 的linux 的数据库文件被删除后的一种处理方法
=================================================
一.模拟数据文件删除
[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Sat Dec 31 22:00:52 2011
Copyright (c) 1982, 2011, Oracle. All rights reserved.
--数据库版本
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
--所有数据文件
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ora11g/system01.dbf
/opt/oracle/oradata/ora11g/sysaux01.dbf
/opt/oracle/oradata/ora11g/undotbs01.dbf
/opt/oracle/oradata/ora11g/users01.dbf
/opt/oracle/oradata/ora11g/example01.dbf
--删除example01.dbf数据文件
SQL> !rm /opt/oracle/oradata/ora11g/example01.dbf
SQL> !ls -l /opt/oracle/oradata/ora11g/example01.dbf
ls: /opt/oracle/oradata/ora11g/example01.dbf: 没有那个文件或目录
--因为数据文件被删除,创建表失败
SQL> create table t_xifenfei tablespace example
2 as select * from dba_tables;
as select * from dba_tables
*
ERROR at line 2:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/opt/oracle/oradata/ora11g/example01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
二.找回数据文件
--查找dbw进程spid
[oracle@node1 ~]$ ps -ef|grep dbw|grep -v grep
oracle 18387 1 0 Dec22 ? 00:00:12 ora_dbw0_ora11g
--查看该进程所有文件句柄
[oracle@node1 ~]$ ll /proc/18387/fd
总计 0
lr-x------ 1 oracle oinstall 64 12-31 22:03 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 12-31 22:03 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 10 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 11 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 12 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/orazhs.msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 13 -> /opt/oracle/product/11.2.0/db_1/dbs/hc_ora11g.dat
lr-x------ 1 oracle oinstall 64 12-31 22:03 14 -> /proc/18387/fd
lr-x------ 1 oracle oinstall 64 12-31 22:03 15 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 16 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 17 -> /opt/oracle/product/11.2.0/db_1/dbs/hc_ora11g.dat
lrwx------ 1 oracle oinstall 64 12-31 22:03 18 -> /opt/oracle/product/11.2.0/db_1/dbs/lkORA11G
lr-x------ 1 oracle oinstall 64 12-31 22:03 19 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/orazhs.msb
l-wx------ 1 oracle oinstall 64 12-31 22:03 2 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 20 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 21 -> socket:[441562]
lrwx------ 1 oracle oinstall 64 12-31 22:03 256 -> /opt/oracle/oradata/ora11g/control01.ctl
lrwx------ 1 oracle oinstall 64 12-31 22:03 257 -> /opt/oracle/oradata/ora11g/system01.dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 258 -> /opt/oracle/oradata/ora11g/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 259 -> /opt/oracle/oradata/ora11g/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 260 -> /opt/oracle/oradata/ora11g/users01.dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 261 -> /opt/oracle/oradata/ora11g/example01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 12-31 22:03 262 -> /opt/oracle/oradata/ora11g/temp01.dbf
lr-x------ 1 oracle oinstall 64 12-31 22:03 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 4 -> /dev/null
lrwx------ 1 oracle oinstall 64 12-31 22:03 5 -> /opt/oracle/product/11.2.0/db_1/dbs/hc_ora11g.dat
lr-x------ 1 oracle oinstall 64 12-31 22:03 6 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 7 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 8 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 9 -> /dev/null
--通过句柄恢复数据文件[被删除数据文件会被标示(deleted)]
[oracle@node1 ~]$ cp /proc/18387/fd/261 /opt/oracle/oradata/ora11g/example01.dbf
--确认该数据文件已经恢复成功
[oracle@node1 ~]$ ll /opt/oracle/oradata/ora11g/example01.dbf
-rw-r----- 1 oracle oinstall 362422272 12-31 22:05 /opt/oracle/oradata/ora11g/example01.dbf
三.数据文件online
SQL> alter database datafile 5 offline;
Database altered.
SQL> recover datafile 5;
Media recovery complete.
SQL> alter database datafile 5 online;
Database altered.
SQL> create table t_xifenfei tablespace example as select * from dba_tables;
Table created.
四.补充说明
在意外使用os命令删除掉数据文件时,千万不要慌张重启数据库或者操作系统,可以通过dbwn进程相关句柄找回数据文件
[root@rhel5 ~]# lsof -p 28963
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
oracle 28963 oracle cwd DIR 8,3 4096 2193690 /u01/app/oracle/product/11.2.0/db_1/dbs
oracle 28963 oracle rtd DIR 8,3 4096 2 /
oracle 28963 oracle txt REG 8,3 173660034 3470099 /u01/app/oracle/product/11.2.0/db_1/bin/oracle
oracle 28963 oracle mem REG 8,3 873742 2197778 /u01/app/oracle/product/11.2.0/db_1/lib/libskgxp11.so
oracle 28963 oracle mem REG 8,3 44060 11982768 /lib/librt-2.5.so
- 恢复被rm意外删除数据文件
- 恢复被rm意外删除数据文件
- 恢复被rm意外删除数据文件
- 恢复被rm意外删除数据文件
- 恢复被rm意外删除数据文件
- 恢复被rm意外删除数据文件
- Linux环境利用恢复被rm意外删除数据文件
- 千万不要做的RM( 恢复被rm意外删除的数据文件)
- ORA-27041: unable to open file--恢复被rm意外删除数据文件
- 【Linux】rm删除数据文件的恢复操作
- Oracle 意外删除数据文件的恢复
- Oracle意外删除数据文件恢复方法
- 不使用rman工具就能恢复被rm删除的数据文件案例
- Oracle数据库数据文件rm -rf误删除后恢复
- Oracle数据库数据文件rm -rf误删除后恢复
- git意外rm文件恢复
- oracle数据文件被删除没备份恢复
- oracle数据文件被删除的恢复
- C盘空间不足的整理磁盘方法
- 【你适合多大的男朋友呢?】据说很准。[嘻嘻]
- 编写计算“两个整数的最大公约数”程序
- ListControl自动高亮显示下一行
- AFHTTPClient本地文件数据失败可能原因之一
- 恢复被rm意外删除数据文件
- jquery实现上传图片的预览
- 数据结构之栈
- 设计模式-模板方法
- Android 游戏项目中Manifest文件中的4个重要设置
- ASP.NET Web应用程序与ASP.NET Web服务应用程序有什么区别
- Codeforces Round #218 (Div. 2) / 371B Fox Dividing Cheese (想法题)
- jQuery hover事件
- JPA 注解