66.Oracle数据文件误删除之后怎样恢复

发布时间 2023-09-02 01:54:10作者: 站在巨人的肩上Z

前提:当数据库的数据文件被误删除后,一定不要关闭库!!!一定不要关闭库!!!一定不要关闭库!!

1.查看数据库状态:

SQL> select status from v$instance;

STATUS
------------
OPEN

2.查看数据文件

col name for a50;
select name,status from v$datafile;
NAME                                               STATUS
-------------------------------------------------- -------
/data/ORACLE/system01.dbf                          SYSTEM
/data/ORACLE/sysaux01.dbf                          ONLINE
/data/ORACLE/undotbs01.dbf                         ONLINE
/data/ORACLE/test01.dbf                            ONLINE
/data/ORACLE/users01.dbf                           ONLINE

3.模拟删除 /data/ORACLE/test01.dbf 这个文件 

[oracle@db01 fd]$ rm -rf /data/ORACLE/test01.dbf

4.此时如果关闭库(shutdown immedite)会报如下错误:

SQL> shu immediate;
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/data/ORACLE/test01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

  且查询这个文件里对应的任何对象都会报这个错误

5.开始恢复

  5.1 恢复的思路主要是先物理恢复数据文件

[oracle@db01 ORACLE]$ ps -ef|grep dbw0
oracle   10238     1  0 01:25 ?        00:00:00 ora_dbw0_oracle
oracle   11000  2447  0 01:35 pts/2    00:00:00 grep --color=auto dbw0
[oracle@db01 ORACLE]$ cd /proc/10238/fd

  这里查看dbw0这个进程对应的进程号,然后进入该进程号对应的fd中。

    这里会发现已经误删除的文件在这里是一个软连接(261),此时执行如下命令将它物理恢复到相应的位置上。

[oracle@db01 fd]$ cp 261 /data/ORACLE/test01.dbf

    执行完上述命令之后,发现该物理文件已经恢复到了/data/ORACLE/  目录下面了。

  5.2 然后进入数据库执行如下命令

SQL> alter database datafile 5 offline;
Database altered.
SQL> recover datafile 5;
Media recovery complete.
SQL> alter database  datafile 5 online;
Database altered.

  ok 恢复完毕!