误操作删除数据文件恢复案例讨论
一、实验说明:
本文转载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
误操作删除数据文件恢复案例讨论相关推荐
- linux追加SQL结果到文件,RAC环境下误操作将数据文件添加到本地存储
今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上.发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可行 ...
- mac 备忘录误操作删除了文件,找不到最近删除的文件
菜单:显示-->显示文件夹
- linux还原环境,Linux环境利用恢复被rm意外删除数据文件
Linux环境下不小心在操作系统误rm删除数据文件后,在没有重启数据库或者操作系统的情况下可以利用操作系统句柄恢复.[@more@]1.数据库版本信息: SQL> select * from v ...
- linux oracle删除恢复数据恢复,Linux下Oracle误删除数据文件恢复操作
检查数据文件的位置如下: SQL> select name from v$datafile; NAME --------------------------------------------- ...
- 恢复被rm意外删除数据文件
恢复被rm意外删除数据文件 ======================== 对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是 ...
- linux 误删除mysql表能恢复吗_Linux下Oracle误删除数据文件恢复操作
检查数据文件的位置如下: SQLgt; select name from v$datafile; NAME----------------------------------------------- ...
- oracle 数据文件recover,Oracle数据库意外删除数据文件的恢复(转载)
今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于open状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件. 在Li ...
- 删除数据文件—启动不了数据库--恢复数据库—启动数据库
Sqlplus / as sydsba 绕过密码以操作系统认证的方式登陆数据库 Select file_name from dba_data_files; 在SQL下查看数据文件位置(一会儿模拟删除 ...
- 如何恢复手机删除数据文件
如何恢复手机删除数据文件 随着现在手机功能的不断增强,人们对电脑的依赖性有所下降,不知道有多少朋友跟我一样.下班回家,都不会打开电脑,要想娱乐一下,一个手机和一个舒服的沙发就够了.再开电脑根本就是浪费 ...
最新文章
- python project_GitHub - DeqianBai/Python-Project: A series of python projects
- hibernateTemplate的load方法
- php在web端播放amr语音(如微信语音)
- 计算机常用图像文件格式,常用的图像文件格式
- 2020-10-14 B树 概念添加删除笔记
- mongodb如何快速进行版本升级
- 网站维护页面_营销型企业网站有哪些功能?
- 有重复数字的组合问题_带数字重复的组合和问题
- 【python】BytesIO与串化
- 写代码抽取代码的技巧
- 多类目MoE模型在京东电商搜索中的应用
- 计算机专业Java毕业设计思路分享(项目+设计+源码)
- linux打开dwg格式文件怎么打开软件,DWG 文件扩展名: 它是什么以及如何打开它?...
- 区块链开发基础知识学习
- UVM——Sequencer Driver
- 【YOLOv5 Head解耦】
- CDA数据分析师level2(模拟题考点记录)
- AI 投资探索路上的一些感受
- 【tflearn系列教程】(一)为什么要学tflearn?
- c语言文件合并,c++实现合并文件以及拆分实例代码
热门文章
- 开始使用Google Analytics 示例
- python卸载_删除系统 Python 引发的惨案
- 热点分析图_通过分析功率MOSFET管的工作特性,判断其损坏原因
- 去掉 edittext 长按全选_开封消毒湿巾全选
- 彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人
- Java设计模式(13)----------代理模式
- 6000字说透,如何做好产品「适老化」!
- 2021年95后“他经济”研究报告
- python用turtle调整文字位置_Python turtle学习笔记
- 界面设计方法(2)— 6.功能按钮设计(删除,保存,提交)