首先说一下恢复的命令:
1、recover database;是sql*plus的命令,该命令对应的sql命令为alter database recover database; 后面的同理!
2、recover tablespace [tablespace name]; 对应 alter database recover tablespace [tablespace name];
3、recover datafile n; 对应 alter database recover datafile n;
如果要恢复的文件比较多,就是用第一个命令。如果要恢复表空间就使用第二个命令。如果只想恢复单个数据文件就使用第三个命令。
完全恢复的大致分类:
1、在mount状态下恢复数据文件
system表空间只能在mount状态下面恢复,因为system表空间损坏了,数据库是不能正常open的。其它的用户表空间都可以在open状态下面恢复。对于一个生产数据库应该在open状态下面恢复用户表空间,这样在恢复的时候数据库也可以对外提供服务。下面记录大致恢复步骤:
SQL> startup mount;
SQL> select * from v$recover_file;
SQL> ! cp ... ...
SQL> alter database rename file 'xxx' to 'xxx';
SQL> recover datafile n;
SQL> alter database open;
2、在open状态下恢复关闭时意外丢失的数据文件
如果关闭数据库后,出现数据文件丢失,那么数据库是无法正常打开的。下面记录大致恢复步骤:
SQL> startup mount;
SQL> select * from v$recover_file;
SQL> alter database datafile n offline;
SQL> alter database open;
SQL> ! cp ... ...
SQL> alter database rename file 'xxx' to 'xxx';
SQL> recover datafile n;
SQL> alter database datafile n online;
3、在open状态下恢复打开时意外丢失的数据文件
如果数据库打开的时候用户数据文件丢失了,那么数据库还是能够正常的使用,因为数据并不是每时每刻都要写到数据文件里面嘛。下面记录大致恢复步骤:
SQL> select * from v$recover_file;
SQL> alter database datafile n offline;
SQL> ! cp ... ...
SQL> alter database rename file 'xxx' to 'xxx';
SQL> recover datafile n;
SQL> alter database datafile n online;
4、在open状态下恢复未备份的数据文件
要恢复未备份的数据文件,必须要这个数据文件在创建以后的所有日志存在,才可以恢复。下面记录大致恢复步骤:
SQL> startup mount;
SQL> select * from v$recover_file;
SQL> alter database datafile n offline;
SQL> alter database open;
SQL> alter database create datafile 'xxx' as 'xxx';
SQL> recover datafile n;
SQL> alter database datafile n online;
注意:要完全恢复只要日志文件不丢才可以,后面的不完全恢复就是日志文件丢失了,数据文件也丢失了,就只有丢数据了!