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

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等工具

转载于:https://blog.51cto.com/newcourage/2177816

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值