OS:Oracle Linux 5u8 x64
DB:Oracle 11.2.0.4
在Oracle运行时,如果误删除了数据文件,可以通过如下方式恢复。前提是不能关闭Oracle进程。因为文件在用命令删除时,并未立刻在磁盘上被删除,其句柄扔被进程访问,因此一旦进程终止,将无法找回文件。
另有一点注意,对于用户表空间(如USERS),可用如下方式恢复。但如果是SYSTEM表空间则不可以,因为删除SYSTEM表空间后,已无法使用sqlplus登录。
下面开始实验。
数据库已打开,其下有数据文件
删除USERS表空间数据文件
此时,可能仍然能查询该表空间内的数据,但应无法执行DML语句。
下面开始尝试恢复。
1. 确认PID
2. 确认FD
3. 复制相关文件到新路径
注意:cp后user01.dbf有可能是目录,真正的文件在改目录下。移动重命名即可。
4. 将问题数据文件离线、重命名、恢复、在线;
注意:在offline期间可能Oracle进程被自动强制关闭,此时需重新将Oracle启动到mount状态。
完成!
DB:Oracle 11.2.0.4
在Oracle运行时,如果误删除了数据文件,可以通过如下方式恢复。前提是不能关闭Oracle进程。因为文件在用命令删除时,并未立刻在磁盘上被删除,其句柄扔被进程访问,因此一旦进程终止,将无法找回文件。
另有一点注意,对于用户表空间(如USERS),可用如下方式恢复。但如果是SYSTEM表空间则不可以,因为删除SYSTEM表空间后,已无法使用sqlplus登录。
下面开始实验。
数据库已打开,其下有数据文件
点击(此处)折叠或打开
- $ cd /oradata/APR/datafile/
- [oracle@apr datafile]$ ll
- total 4690612
- -rw-r----- 1 oracle oinstall 597696512 Jun 6 23:04 o1_mf_sysaux_chzbv7op_.dbf
- -rw-r----- 1 oracle oinstall 786440192 Jun 6 23:04 o1_mf_system_chzbv7mg_.dbf
- -rw-r----- 1 oracle oinstall 30416896 Jun 6 23:06 o1_mf_temp_chzbynjn_.tmp
- -rw-r----- 1 oracle oinstall 1073750016 Jun 6 23:06 o1_mf_temp_chzg2zy8_.tmp
- -rw-r----- 1 oracle oinstall 94380032 Jun 6 23:04 o1_mf_undotbs1_chzbv7pc_.dbf
- -rw-r----- 1 oracle oinstall 2629312512 Jun 6 23:04 o1_mf_users_chzbv7qk_.dbf
点击(此处)折叠或打开
- $ ll *users*
- -rw-r----- 1 oracle oinstall 2629312512 Jun 6 23:04 o1_mf_users_chzbv7qk_.dbf
- [oracle@apr datafile]$ rm -f *users*
点击(此处)折叠或打开
- SQL> select owner,table_name,tablespace_name from dba_tables where owner='SH' and TABLE_NAME='SALES';
-
- OWNER TABLE_NAME
- ------------------------------ ------------------------------
- TABLESPACE_NAME
- ------------------------------
- SH SALES
- USERS
-
- SQL> connect sh/sh
- Connected.
- SQL> create table tt (x int);
-
- Table created.
-
- SQL> insert into tt values (1);
- insert into tt values (1)
- *
- ERROR at line 1:
- ORA-01116: error in opening database file 4
- ORA-01110: data file 4: '/oradata/APR/datafile/o1_mf_users_chzbv7qk_.dbf'
- ORA-27041: unable to open file
- Linux-x86_64 Error: 2: No such file or directory
- Additional information: 3
1. 确认PID
点击(此处)折叠或打开
- $ ps -ef | grep dbw
- oracle 4883 1 0 23:04 ? 00:00:00 ora_dbw0_apr
- oracle 5067 5034 0 23:07 pts/4 00:00:00 grep dbw
点击(此处)折叠或打开
- # lsof -p 4883
- ……
- oracle 4883 oracle 258uW REG 253,2 786440192 2867203 /oradata/APR/datafile/o1_mf_system_chzbv7mg_.dbf
- oracle 4883 oracle 259u REG 253,2 608182272 2867204 /oradata/APR/datafile/o1_mf_sysaux_chzbv7op_.dbf
- oracle 4883 oracle 260uW REG 253,2 94380032 2867205 /oradata/APR/datafile/o1_mf_undotbs1_chzbv7pc_.dbf
- oracle 4883 oracle 261uW REG 253,2 2629312512 2867206 /oradata/APR/datafile/o1_mf_users_chzbv7qk_.dbf (deleted)
- oracle 4883 oracle 262uW REG 253,2 30416896 2867213 /oradata/APR/datafile/o1_mf_temp_chzbynjn_.tmp
- oracle 4883 oracle 263uW REG 253,2 1073750016 2867214 /oradata/APR/datafile/o1_mf_temp_chzg2zy8_.tmp
- [root@apr ~]#
注意:cp后user01.dbf有可能是目录,真正的文件在改目录下。移动重命名即可。
点击(此处)折叠或打开
- $ mkdir /oradata/neworadata
- [oracle@apr ~]$ cp /proc/4883/fd/261 /oradata/neworadata/users01.dbf
注意:在offline期间可能Oracle进程被自动强制关闭,此时需重新将Oracle启动到mount状态。
点击(此处)折叠或打开
- alter database datafile '/oradata/APR/datafile/o1_mf_users_chzbv7qk_.dbf' offline;
-
- alter database rename file '/oradata/APR/datafile/o1_mf_users_chzbv7qk_.dbf' to '/oradata/neworadata/users01.dbf';
-
- SQL> recover datafile '/oradata/neworadata/users01.dbf';
- Media recovery complete.
- SQL> alter database datafile '/oradata/neworadata/users01.dbf' online;
-
- Database altered.
-
- SQL> alter database open;
-
- Database altered.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-2116545/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22621861/viewspace-2116545/