误操作删除数据文件恢复案例讨论
2015-10-19 23:16
507 查看
一、实验说明: 本文转载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
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解