oracle误删除数据文件在线恢复方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle误删除数据文件在线恢复方法相关的知识,希望对你有一定的参考价值。
oracle误删除数据文件在线恢复方法
如果因为操作系统rm命令或者数据库语句误删除Oracle数据库的数据文件,**并且数据库未重启的话**,可以使用利用**文件描述符的方式**来进行恢复。
① 首先找到一个后台进程(如 DBWR 进程):在操作系统的root 用户执行:
[email protected] # 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)。
[email protected] #cd /proc/14384/fd
[email protected] #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误删除数据文件在线恢复方法的主要内容,如果未能解决你的问题,请参考以下文章