66.Oracle数据文件误删除之后怎样恢复
前提:当数据库的数据文件被误删除后,一定不要关闭库!!!一定不要关闭库!!!一定不要关闭库!!!
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 恢复完毕!