欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

误操作删除数据文件恢复案例讨论

发布时间:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 误操作删除数据文件恢复案例讨论 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、实验说明:

     本文转载EYGLE的《数据安全警示录》中的一个案例,也有在itpub上发表过http://www.itpub.net/thread-1721724-1-1.html,在这里只是做一个模拟,并记录一下!

     操作系统:rhel 5.4 x32

     数据库:oracle 11g r2

二、实验操作:

     在UNIX、Linux系统中,误删除数据文件后,虽然该文件已从操作系统中删除,但是其文件句柄仍由数据库进行打开持有,所以在数据库层面仍然不会释放其链表信息,因而也就能够从进程的地址信息中,通过复制将其直接恢复。但是请注意,这要求数据库不能中途关闭,如果关闭了数据库,则所有文件句柄被释放,文件就真的难以回归了。

----首先创建一个环境---- SQL> create tablespace jack datafile '/u01/app/oracle/oradata/yft/jack01.dbf' size 50m;Tablespace created.SQL> create user echo identified by echo default tablespace jack;User created.SQL> grant resource,connect to echo;Grant succeeded.SQL> create table echo.tab(domian varchar2(100)) tablespace jack;Table created.SQL> insert into echo.tab values('www.jack.com');1 row created.SQL> commit;Commit complete.----在这里删除数据文件,告警日志没有报错---- [oracle@yft ~]$ rm /u01/app/oracle/oradata/yft/jack01.dbf ----查看一下句柄---- [oracle@yft ~]$ ps -ef|grep dbw|grep -v grep oracle    3911     1  0 07:10 ?        00:00:01 ora_dbw0_yft[oracle@yft ~]$ ll /proc/3911/fd total 0 lr-x------ 1 oracle oinstall 64 Jan 10 08:14 0 -> /dev/null l-wx------ 1 oracle oinstall 64 Jan 10 08:14 1 -> /dev/null l-wx------ 1 oracle oinstall 64 Jan 10 08:14 10 -> /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3855.trc l-wx------ 1 oracle oinstall 64 Jan 10 08:14 11 -> /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3855.trm lr-x------ 1 oracle oinstall 64 Jan 10 08:14 12 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb lr-x------ 1 oracle oinstall 64 Jan 10 08:14 13 -> /dev/zero lr-x------ 1 oracle oinstall 64 Jan 10 08:14 14 -> /proc/3911/fd lr-x------ 1 oracle oinstall 64 Jan 10 08:14 15 -> /dev/zero lrwx------ 1 oracle oinstall 64 Jan 10 08:14 16 -> /u01/app/oracle/product/11.2.0/db_1/dbs/hc_yft.dat lrwx------ 1 oracle oinstall 64 Jan 10 08:14 17 -> /u01/app/oracle/product/11.2.0/db_1/dbs/lkYFT lrwx------ 1 oracle oinstall 64 Jan 10 08:14 18 -> /u01/app/oracle/oradata/yft/control01.ctl lrwx------ 1 oracle oinstall 64 Jan 10 08:14 19 -> /u01/app/oracle/flash_recovery_area/yft/control02.ctl l-wx------ 1 oracle oinstall 64 Jan 10 08:14 2 -> /dev/null lrwx------ 1 oracle oinstall 64 Jan 10 08:14 20 -> /u01/app/oracle/oradata/yft/jack01.dbf (deleted) lrwx------ 1 oracle oinstall 64 Jan 10 08:14 22 -> socket:[13943]----直接把数据文件拷贝回来---- [oracle@yft ~]$ cp /proc/3911/fd/20 /u01/app/oracle/oradata/yft/jack01.dbf[oracle@yft ~]$ ll /u01/app/oracle/oradata/yft/ total 2698480 -rw-r----- 1 oracle oinstall    9879552 Jan 10 08:28 control01.ctl -rw-r----- 1 oracle oinstall    9748480 Jan  9 19:42 control01.ctl.bak -rw-r----- 1 oracle oinstall  104865792 Jan 10 08:22 example01.dbf -rw-r----- 1 oracle oinstall   52436992 Jan 10 08:27 jack01.dbf -rw-r----- 1 oracle oinstall   52429312 Jan 10 08:27 redo01.log -rw-r----- 1 oracle oinstall   52429312 Jan 10 07:16 redo02.log -rw-r----- 1 oracle oinstall   52429312 Jan 10 07:16 redo03.log -rw-r----- 1 oracle oinstall  513810432 Jan 10 08:22 sysaux01.dbf -rw-r----- 1 oracle oinstall  713039872 Jan 10 08:27 system01.dbf -rw-r----- 1 oracle oinstall   30416896 Jan 10 08:22 temp01.dbf -rw-r----- 1 oracle oinstall   99622912 Jan 10 08:27 undotbs01.dbf -rw-r----- 1 oracle oinstall    5251072 Jan 10 08:22 users01.dbf -rw-r----- 1 oracle oinstall 1073750016 Jan 10 08:22 yft01.dbf

如果我在删除之后使用alter system checkpoint之后就有可能恢复不过来。

----在拷贝之前,数据库checkpoint了一下---- SQL> alter system checkpoint;System altered.----告警日志中的错误---- Thu Jan 10 08:35:08 2013 Errors in file /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ckpt_3915.trc: ORA-01171: datafile 7 going offline due to error advancing checkpoint ORA-01116: error in opening database file 7 ORA-01110: data file 7: '/u01/app/oracle/oradata/yft/jack01.dbf' ORA-27041: unable to open file Linux Error: 2: No such file or directory Additional information: 3----查询不到数据,并报错---- SQL> select * from echo.tab; select * from echo.tab* ERROR at line 1: ORA-00376: file 7 cannot be read at this time ORA-01110: data file 7: '/u01/app/oracle/oradata/yft/jack01.dbf'----句柄已经消失---- [oracle@yft ~]$ ll /proc/3911/fd total 0 lr-x------ 1 oracle oinstall 64 Jan 10 08:14 0 -> /dev/null l-wx------ 1 oracle oinstall 64 Jan 10 08:14 1 -> /dev/null l-wx------ 1 oracle oinstall 64 Jan 10 08:14 10 -> /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3855.trc l-wx------ 1 oracle oinstall 64 Jan 10 08:14 11 -> /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3855.trm lr-x------ 1 oracle oinstall 64 Jan 10 08:14 12 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb lr-x------ 1 oracle oinstall 64 Jan 10 08:14 13 -> /dev/zero lr-x------ 1 oracle oinstall 64 Jan 10 08:14 14 -> /proc/3911/fd lr-x------ 1 oracle oinstall 64 Jan 10 08:14 15 -> /dev/zero lrwx------ 1 oracle oinstall 64 Jan 10 08:14 16 -> /u01/app/oracle/product/11.2.0/db_1/dbs/hc_yft.dat lrwx------ 1 oracle oinstall 64 Jan 10 08:14 17 -> /u01/app/oracle/product/11.2.0/db_1/dbs/lkYFT lrwx------ 1 oracle oinstall 64 Jan 10 08:14 18 -> /u01/app/oracle/oradata/yft/control01.ctl lrwx------ 1 oracle oinstall 64 Jan 10 08:14 19 -> /u01/app/oracle/flash_recovery_area/yft/control02.ctl l-wx------ 1 oracle oinstall 64 Jan 10 08:14 2 -> /dev/null lrwx------ 1 oracle oinstall 64 Jan 10 08:14 22 -> socket:[13943] lrwx------ 1 oracle oinstall 64 Jan 10 08:14 23 -> /u01/app/oracle/oradata/yft/system01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 24 -> /u01/app/oracle/oradata/yft/sysaux01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 25 -> /u01/app/oracle/oradata/yft/undotbs01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 26 -> /u01/app/oracle/oradata/yft/users01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 27 -> /u01/app/oracle/oradata/yft/example01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 28 -> /u01/app/oracle/oradata/yft/yft01.dbf lrwx------ 1 oracle oinstall 64 Jan 10 08:14 29 -> /u01/app/oracle/oradata/yft/temp01.dbf l-wx------ 1 oracle oinstall 64 Jan 10 08:14 3 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/log/yft_ora_3855.trc lr-x------ 1 oracle oinstall 64 Jan 10 08:14 30 -> /u01/app/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb lr-x------ 1 oracle oinstall 64 Jan 10 08:14 4 -> /dev/null lr-x------ 1 oracle oinstall 64 Jan 10 08:14 5 -> /dev/null lr-x------ 1 oracle oinstall 64 Jan 10 08:14 6 -> /dev/null lrwx------ 1 oracle oinstall 64 Jan 10 08:14 7 -> /u01/app/oracle/product/11.2.0/db_1/dbs/hc_yft.dat lrwx------ 1 oracle oinstall 64 Jan 10 08:14 8 -> /u01/app/oracle/product/11.2.0/db_1/dbs/lkinstyft (deleted) lr-x------ 1 oracle oinstall 64 Jan 10 08:14 9 -> /proc/3911/fd


转载于:https://blog.51cto.com/9796716/1704355

总结

以上是生活随笔为你收集整理的误操作删除数据文件恢复案例讨论的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。