做系统管理的都是这样,难免会误删文件,某天要是把某个Oracle数据文件删除,那该如何恢复呢?(这里数据库是OPEN的,并且未关闭)
-
建立测试表空间
-
创建测试用户
-
插入测试数据
-
删除数据文件
-
恢复数据库文件
-
建立测试表空间
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL> select name from v$datafile;
NAME--------------------------------------------------------------------------------/opt/oracle/oradata/member/system01.dbf/opt/oracle/oradata/member/sysaux01.dbf/opt/oracle/oradata/member/undotbs01.dbf/opt/oracle/oradata/member/users01.dbfSQL> create tablespace test datafile '/opt/oracle/oradata/member/test01.dbf' size 10m;
Tablespace created.SQL> select name from v$datafile;
NAME--------------------------------------------------------------------------------/opt/oracle/oradata/member/system01.dbf/opt/oracle/oradata/member/sysaux01.dbf/opt/oracle/oradata/member/undotbs01.dbf/opt/oracle/oradata/member/users01.dbf/opt/oracle/oradata/member/test01.dbf |
2.创建测试账户
|
1
2
|
SQL> create user test identified by test default tablespace test;
SQL> grant connect,resource to test;
|
3.插入测试数据
|
1
2
3
4
5
6
7
8
|
SQL> conn test/testSQL> create table t1(id int);
SQL> insert into t1 values(1);
SQL> select * from t1;
ID
---------- 1
|
4.删除数据文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[[email protected] ~]$ rm -f /opt/oracle/oradata/member/test01.dbf[[email protected] ~]$ sqlplus test/testSQL> create table t2 as select * from t1;
create table t2 as select * from t1
*
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/opt/oracle/oradata/member/test01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME------------------------------ ------------------------------T1 TEST |
数据文件被删除了,这怎么办呢?这个时候千万别重启数据库,否则数据就丢失了
5.数据文件恢复
|
1
2
3
4
5
6
|
oracle 3309 1 0 12:07 ? 00:00:00 ora_dbw0_memberoracle 6217 5105 0 15:29 pts/0 00:00:00 grep dbw0
#找到ora_dbw0_SID的进程号3309#以上3309就是进程号,然后执行ls -al查看文件的链接 |
可以看到文件27就是被删除的文件
|
1
|
|
查看test表空间状态
|
1
2
3
4
5
6
7
8
|
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------- -------/opt/oracle/oradata/member/system01.dbf SYSTEM/opt/oracle/oradata/member/sysaux01.dbf ONLINE/opt/oracle/oradata/member/undotbs01.dbf ONLINE/opt/oracle/oradata/member/users01.dbf ONLINE/opt/oracle/oradata/member/test01.dbf ONLINE |
下线test01表文件
|
1
2
3
4
5
|
SQL> alter database datafile '/opt/oracle/oradata/member/test01.dbf' offline;
SQL> recover datafile '/opt/oracle/oradata/member/test01.dbf';
Media recovery complete.SQL> alter database datafile '/opt/oracle/oradata/member/test01.dbf' online;
Database altered.
|
#以上就成功恢复了,若是出现
|
1
2
3
4
5
|
SQL> recover datafile '/opt/oracle/oradata/member/test01.dbf';
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 5: '/opt/oracle/oradata/member/test01.dbf'
ORA-01157: cannot identify/lock data file 5 - see DBWR trace fileORA-01110: data file 5: '/opt/oracle/oradata/member/test01.dbf'
|
则有可能是/opt/oracle/oradata/member/test01.dbf文件的权限问题引起,在root用户下
|
1
2
|
[[email protected] ~]# chown -R oracle.oinstall /opt/oracle/oradata/member/test01.dbf 再recover datafile '/opt/oracle/oradata/member/test01.dbf'
|
实验完成后,删除测试用户及测试表空间
|
1
2
|
SQL> drop user test cascade;
SQL> drop tablespace test INCLUDING CONTENTS AND DATAFILES;
|
本文转自 rong341233 51CTO博客,原文链接:http://blog.51cto.com/fengwan/1737664