实验环境是在归档模式下,并且日志文件都在。

步骤:1. 全备数据库

 2. 利用备份的控制文件进行恢复

实验就把第一步省略了,直接开始第二步。

首先,先打开数据库到归档模式下:

SQL> startup mount
ORACLE instance started.
Total System Global Area  845348864 bytes
Fixed Size                  1339796 bytes
Variable Size             599789164 bytes
Database Buffers          239075328 bytes
Redo Buffers                5144576 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> select open_mode,log_mode from v$database;
OPEN_MODE                                LOG_MODE
---------------------------------------- ------------------------
READ WRITE                               ARCHIVELOG
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/11.2.0/db_1/ora_log
Oldest online log sequence     1
Next log sequence to archive   2
Current log sequence           2

开始备份控制文件:

SQL> alter database backup controlfile to '/tmp/controlfile.bak';
Database altered.

把原来的控制文件都删除,有几个删除几个,可以show parameter control_files查看,再次启动数据库:

SQL> startup
ORACLE instance started.
Total System Global Area  845348864 bytes
Fixed Size                  1339796 bytes
Variable Size             599789164 bytes
Database Buffers          239075328 bytes
Redo Buffers                5144576 bytes
ORA-00205: error in identifying control file, check alert log for more info

控制文件丢失,启动报错了,拷贝控制文件到原来的地方,有几个拷贝几个

cp /tmp/controlfile.bak $ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl

再次启动数据库

SQL> startup
ORACLE instance started.
Total System Global Area  845348864 bytes
Fixed Size                  1339796 bytes
Variable Size             599789164 bytes
Database Buffers          239075328 bytes
Redo Buffers                5144576 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

数据库已经挂载,但是没有打开,接下来按提示操作:

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u01/app/oracle/oradata/myorcl/system01.dbf'
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
SQL> recover database using backup controlfile;
ORA-00279: change 1298791 generated at 01/09/2014 05:50:43 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/product/11.2.0/db_1/ora_log/1_25_835925739.dbf
ORA-00280: change 1298791 for thread 1 is in sequence #25
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/myorcl/redo01.log
Log applied.
Media recovery complete.

到这里,数据库已经提示恢复完成了,可以打开数据库了

SQL> alter database open resetlogs;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE