码迷,mamicode.com
首页 > 数据库 > 详细

oracle误删除数据文件在线恢复方法

时间:2018-09-20 18:46:12      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:数据   lte   文件的   name   保留   一个   dba   roc   new   

oracle误删除数据文件在线恢复方法
如果因为操作系统rm命令或者数据库语句误删除Oracle数据库的数据文件,**并且数据库未重启的话**,可以使用利用**文件描述符的方式**来进行恢复。

① 首先找到一个后台进程(如 DBWR 进程):在操作系统的root 用户执行:

root@db1 # ps -ef | grep dbw
root 14348 9859 0 10:15:50 pts/3 0:00 grep dbw
oracle 762 1 0 Jun 10 ? 202:01 ora_dbw0_nms

上面进程号为14348 的便是DBW进程(DBW是将数据缓冲区中所有修改过的缓冲块数据写到数据文件的进程)

通过其进程地址找到文件句柄(/proc/<proc_id>/fd)

root@db1 #cd /proc/14384/fd
root@db1 #ll
lr-x------ 1 oracle dba 64 Dec 19 21:50 12 ->
/oracle/10.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle dba 64 Dec 19 21:50 13 -> /oracle/10.2.0/db_1/dbs/hc_orcl.dat
lrwx------ 1 oracle dba 64 Dec 19 21:50 14 -> /oracle/10.2.0/db_1/dbs/lkORCL
lrwx------ 1 oracle dba 64 Dec 19 21:50 15 ->
/oradata/controlfile/o1_mf555wq3ng.ctl
lrwx------ 1 oracle dba 64 Dec 19 21:50 16 ->
/oradata/datafile/o1_mf_system555wqbnk.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 17 -> /oradata/datafile/o1_mf_undotbs1.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 18 -> /oradata/datafile/sysaux_555wr.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 19 -> /oradata/datafile/users.dbf
lr-x------ 1 oracle dba 64 Dec 19 21:50 2 -> /dev/null
lrwx------ 1 oracle dba 64 Dec 19 21:50 20 ->
/oradata/datafile/o1_mf_temp555wrbnz.tmp
lr-x------ 1 oracle dba 64 Dec 19 21:50 21 ->
/oracle/10.2.0/db_1/rdbms/mesg/oraus.msb
l-wx------ 1 oracle dba 64 Dec 19 21:50 5 -> /admin/udump/orcl_ora_2871.trc
l-wx------ 1 oracle dba 64 Dec 19 21:50 6 -> /admin/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 7 -> /oracle/10.2.0/db_1/dbs/lkinstorcl
l-wx------ 1 oracle dba 64 Dec 19 21:50 8 -> /admin/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 9 -> /oracle/10.2.0/db_1/dbs/hc_orcl.dat
以下就是数据库文件的句柄显示信息,复制这些文件即可恢复那些被删除但尚未消失的数据文件。
③:复制文件恢复之后,创建了一个新的目录(保留原来的目录结构不动),随后通过 offline、
rename、 recover、 online 四个步骤恢复这些文件,将其加载到数据库中。
首先复制文件到新分配的目录空间。
cp /proc/14348/fd/19 /new_u02/oradata/cinms_user01.dbf

将相应的文件离线。
alter database datafile 8 offline;

通过更名(RENAME)的方式对文件进行重定向。
alter database rename file
‘/u02/oradata/cinms_user01.dbf‘ to ‘ /new_u02/oradata/cinms_user01.dbf‘;

然后执行恢复。
recover datafile 8;

最后将文件 Online 加载。
alter database datafile 8 online;

注释:找到对应的进程,如何从大量的(/proc/<proc_id>/fd) fd 中找到需要的文件是个关键。在 Oracle 数据库
文件的第一个块(文件头块)上,存有数据文件号信息,只要找到这个文件号,就能和数据库建立起对应关系;
找出这些文件可以运用用BBED/od /lsof等工具

oracle误删除数据文件在线恢复方法

标签:数据   lte   文件的   name   保留   一个   dba   roc   new   

原文地址:http://blog.51cto.com/newcourage/2177816

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!