侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Oracle 误删数据文件解决方法

与晚风述往事
2021-10-14 / 0 评论 / 0 点赞 / 211 阅读 / 791 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在CentOS操作系统中,有一台正常运行的数据库,由于特殊原因,导致误删除了数据文件users01.dbf。

前置条件

在误删文件后,数据库还处于打开状态。

原理

在Linux服务器中,即使文件被删除,只要数据库的进程没有关闭,那么在删除之前打开的进程仍然有该文件的句柄,进程指向的文件仍然能正常读写。

可恢复文件类型

使用此方法可以恢复的文件有数据文件、临时数据文件和控制文件。

解决

1、查找文件进程PID

查看dbw写进程

写进程可能有多个,如果有多个,就需要逐个排查句柄里面包含的数据文件才能知道是哪个被误删除。

[oracle@localhost orcl]$ ps -ef|grep ora_dbw

oracle_delete_data_file_1

2、查看进程中的文件

从上一步得到dbw写进程的PID后,就可以去句柄中查找文件了。

进入句柄

[oracle@localhost orcl]$ cd /proc/18309/fd

查看被删除的文件

[oracle@localhost fd]$ ll

oracle_delete_data_file_2

被删除的文件会一直闪烁,并且路径后面会跟着(deleted)。

3、恢复数据文件至原位置

拷贝至原位置

[oracle@localhost fd]$ cp 261 /home/oracle/oradata/orcl/users01.dbf

4、重启数据库并介质恢复

进入sqlplus命令窗口

[oracle@localhost fd]$ sqlplus / as sysdba

立即关闭数据库

SQL> shutdown immediate

启动数据库

应该启动到mount模式,但是我们不清楚数据文件的FILE_ID,最简单的就是直接启动数据库,让它来提示我们哪个文件有问题。

SQL> startup

介质恢复

SQL> recover datafile 4;

打开数据库

SQL> alter database open;

oracle_delete_data_file_3

结束

至此,数据库数据文件就恢复完毕。虽然有方法恢复这种误删,但是希望永远都用不到。

0

评论区