这个情况需要满足两个条件:只从数据文件创建以后,所有的归档日志文件和控制文件都在就可以使用这种方式来恢复数据。假如数据库是关闭的,发现该数据文件丢失了,又没有备份
SQL> conn /as sysdba
已连接。
SQL> create tablespace tb3 datafile '/u01/app/oracle/oradata/orcl/tb3.dbf' size 10m;
表空间已创建。
SQL> create user u3 identified by u3 default tablespace tb3;
用户已创建。
SQL> grant connect,resource to u3;
授权成功。
SQL> create table u3.t as select * from all_objects;
表已创建。
现在正常关闭数据库,删除数据文件
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/tb3.dbf
现在肯定不能启动数据库,查询出丢失的文件的文件号码,也可以看见需要恢复文件记录。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 117443880 bytes
Database Buffers 46137344 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 15 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 15: '/u01/app/oracle/oradata/orcl/tb3.dbf'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- -------------------------------------------------- -------
1 /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
2 /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE
4 /u01/app/oracle/oradata/orcl/users01.dbf ONLINE
5 /u01/app/oracle/oradata/orcl/test01.dbf ONLINE
6 /u01/app/oracle/oradata/orcl/perfstat01.dba ONLINE
7 /u01/app/oracle/oradata/orcl/undo01.dbf ONLINE
8 /u01/app/oracle/oradata/orcl/tbspart01.dbf ONLINE
9 /u01/app/oracle/oradata/orcl/tbspart02.dbf ONLINE
10 /u01/app/oracle/oradata/orcl/tbspart03.dbf ONLINE
11 /u01/app/oracle/oradata/orcl/tbspart04.dbf ONLINE
FILE# NAME STATUS
---------- -------------------------------------------------- -------
12 /u01/app/oracle/oradata/orcl/tb1.dbf ONLINE
13 /u01/app/oracle/oradata/orcl/tb2.dbf ONLINE
14 /u01/app/oracle/oradata/orcl/ttb1.dbf ONLINE
15 /u01/app/oracle/oradata/orcl/tb3.dbf ONLINE
已选择15行。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
15 ONLINE ONLINE FILE NOT FOUND 0
恢复
SQL> alter database datafile 15 offline;
数据库已更改。
SQL> alter database create datafile '/u01/app/oracle/oradata/orcl/tb3.dbf';
数据库已更改。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
15 OFFLINE OFFLINE 1026698 08-10月-11
SQL> recover datafile 15;
完成介质恢复。
SQL> alter database datafile 15 online;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> conn u3/u3
已连接。
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
T TABLE
SQL> select count(*) from t;
COUNT(*)
----------
49945