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等工具
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|