描述:
今天测试库造数据的时候,归档日志过多,一直在手动删除日志。中途去数据文件目录看了一眼数据文件,路径没有切换走,后面就惯性的把数据文件当日志文件全部删掉了。最后用debugfs工具恢复了数据文件。
删除数据库文件,文件在/data1/oradata/ora1路径下,在/dev/sda3设备上:
[oracle]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 36G 29G 4.6G 87% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 283M 33M 236M 13% /boot
/dev/sdb1 30G 44M 28G 1% /data2
[oracle]$ pwd
/data1/oradata/ora1
[oracle]$ ll
total 12954268
-rw-r-----. 1 oracle dba 12337152 Jun 13 14:38 control01.ctl
-rw-r-----. 1 oracle dba 12337152 Jun 13 14:38 control02.ctl
-rw-r-----. 1 oracle dba 33562624 Jun 13 13:14 dpm_cur_data01.dbf
-rw-r-----. 1 oracle dba 369106944 Jun 13 13:14 dpm_his_data01.dbf
-rw-r-----. 1 oracle dba 33562624 Jun 13 13:14 indx01.dbf
-rw-r-----. 1 oracle dba 52429312 Jun 13 14:38 redo01.log
-rw-r-----. 1 oracle dba 52429312 Jun 13 13:07 redo02.log
-rw-r-----. 1 oracle dba 52429312 Jun 13 13:09 redo03.log
-rw-r-----. 1 oracle dba 1069555712 Jun 13 14:35 sysaux01.dbf
-rw-r-----. 1 oracle dba 1499471872 Jun 13 14:35 system01.dbf
-rw-r-----. 1 oracle dba 2143297536 Jun 13 13:12 temp01.dbf
-rw-r-----. 1 oracle dba 104865792 Jun 13 13:14 tem_tps101.dbf
-rw-r-----. 1 oracle dba 4311752704 Jun 13 13:14 tp01.dbf
-rw-r-----. 1 oracle dba 524296192 Jun 13 13:14 tps201.dbf
-rw-r-----. 1 oracle dba 2993692672 Jun 13 14:32 undotbs01.dbf
[oracle]$ rm -rf *
用debugfs命令恢复文件,为了避免恢复的数据覆盖还未恢复的数据块,将数据恢复到了/dev/sdb1这个设备上。
[root@]# debugfs
debugfs: open /dev/sda3
debugfs: ls -d /data1/oradata/ora1/
debugfs: dump <1193015> /data2/control01.ctl
debugfs: quit
[root]# debugfs --在root账号下执行debugfs命令
debugfs 1.41.12 (17-May-2010)
debugfs: open /dev/sda3 --打开数据文件所在的设备
debugfs: ls -d /data1/oradata/ora1/ --查看原路径下文件的Inode号,有<>尖括号的Inode是已经被删除了的,后面跟有原文件名
1192997 (12) . 1192996 (4084) .. <1193015> (24) control01.ctl
<1193016> (24) control02.ctl <1193019> (20) redo01.log
<1193020> (20) redo02.log <1193021> (20) redo03.log
<1193022> (40) system01.dbf <1193027> (20) sysaux01.dbf
<1193032> (3924) undotbs01.dbf <1193033> (20) temp01.dbf
<1193407> (88) tp01.dbf <1193688> (48) indx01.dbf
<1193770> (28) dpm_cur_data01.dbf <1194451> (24) tem_tps101.dbf
<1194612> (3792) tps201.dbf <1193448> (3772) dpm_his_data01.dbf
debugfs:
debugfs: dump <1193015> /data2/control01.ctl --用dump命令恢复所有文件,恢复到/dev/sdb1设备的/data2/路径下,防止恢复的数据覆盖了原来数据的数据块。
debugfs: dump <1193016> /data2/control02.ctl
debugfs: dump <1193019> /data2/redo01.log
debugfs: dump <1193020> /data2/redo02.log
debugfs: dump <1193021> /data2/redo03.log
debugfs: dump <1193022> /data2/system01.dbf
debugfs: dump <1193027> /data2/sysaux01.dbf
debugfs: dump <1193032> /data2/undotbs01.dbf
debugfs: dump <1193033> /data2/temp01.dbf
debugfs: dump <1193407> /data2/tp01.dbf
debugfs: dump <1193688> /data2/indx01.dbf
debugfs: dump <1193770> /data2/dpm_cur_data01.dbf
debugfs: dump <1194451> /data2/tem_tps101.dbf
debugfs: dump <1194612> /data2/tps201.dbf
debugfs: dump <1193448> /data2/dpm_his_data01.dbf
debugfs: quit --退出
最后将文件拷贝到原路径,修改文件的用户和群组即可。