您的位置:首页 > 数据库 > Oracle

oracle数据文件误删除以后的处理办法

2014-12-25 16:36 477 查看
00:13:17 kiwi@prod> select * from cat;

TABLE_NAME TABLE_TYPE

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

TEST TABLE

[root@kiwi prod]# ls
control01.ctl control02.ctl example01.dbf kiwi01.dbf redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf

[root@kiwi prod]# rm -rf kiwi01.dbf
[root@kiwi prod]# ls
control01.ctl control02.ctl example01.dbf redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf  users01.dbf

00:13:45 kiwi@prod> drop table test purge;
drop table test purge
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u02/oradata/prod/kiwi01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

[00:15:45 root()@kiwi fd]# ll
total 0
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 Dec 26 00:15 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 10 -> /dev/zero
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 11 -> /dev/zero
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 12 -> /u01/app/oracle/product/11.2.0/db/dbs/hc_prod.dat
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 13 -> /u01/app/oracle/product/11.2.0/db/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 14 -> /proc/7401/fd
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 15 -> /dev/zero
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 16 -> /u01/app/oracle/product/11.2.0/db/dbs/hc_prod.dat
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 17 -> /u01/app/oracle/product/11.2.0/db/dbs/lkPROD
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 18 -> /u01/app/oracle/product/11.2.0/db/rdbms/mesg/oraus.msb
l-wx------ 1 oracle oinstall 64 Dec 26 00:15 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 256 -> /u02/oradata/prod/control01.ctl
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 257 -> /u02/oradata/prod/control02.ctl
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 258 -> /u02/oradata/prod/system01.dbf
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 259 -> /u02/oradata/prod/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 260 -> /u02/oradata/prod/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 261 -> /u02/oradata/prod/users01.dbf
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 262 -> /u02/oradata/prod/example01.dbf
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 263 -> /u02/oradata/prod/kiwi01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 264 -> /u02/oradata/prod/temp01.dbf
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 5 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 6 -> /dev/null
lrwx------ 1 oracle oinstall 64 Dec 26 00:15 7 -> /u01/app/oracle/product/11.2.0/db/dbs/hc_prod.dat
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 8 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 26 00:15 9 -> /dev/null

00:14:54 kiwi@prod> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
1088766
1088766
1088766
1088766
1088766
1088766

6 rows selected.

Elapsed: 00:00:00.01
00:17:17 kiwi@prod> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
1088766
1088766
1088766
1088766
1088766
1088766

6 rows selected.

23:49:28 kiwi@prod> conn / as sysdba
Connected.
23:49:42 sys@prod>
23:49:42 sys@prod> alter database datafile 6 offline;

Database altered.

Elapsed: 00:00:00.10
23:49:51 sys@prod> recover datafile 6;
Media recovery complete.
23:49:57 sys@prod> alter database datafile 6 online;


至此,完成误删除无备份的恢复

这个是利用操作系统文件描述符的方法来进行数据文件的恢复
在操作系统中,内核利用文件描述符在访问文件。在linux系统中,误删除文件以后,虽然该数据文件已经从操作系统中删除了,但是其文件句柄仍有数据库打开并持有,所以才数据库层面并不会释放其链表信息。因而也就能够从进程的地址信息中,通过复制将其直接恢复:
但我们要注意:
数据的关闭offline都会使其文件句柄被释放 ,文件就很难被找回了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: