1、恢复过程查看的试图:
1)v$recovery_file:查看需要恢复的datafile
2)v$recovery_log:查看recover需要的redo日志
3)v$archived_log:查看已经归档的日志
2、手工完全恢复
实验一:所有数据文件和控制文件都丢失
1)先将控制文件dump到trace中
SQL> alter database backup controlfile to trace as '/u01/app/oracle/admin/EMREP/udump/haha.trc';
2)创建实验表
SQL> create table emp1 as select * from scott.emp;
插入数据提交并归档
SQL> insert into emp1 select * from scott.emp;
SQL> commit;SQL> alter system archive log current;插入数据只提交
SQL> insert into emp1 select * from scott.emp;SQL> commit;不提交不归档
SQL> insert into emp1 select * from scott.emp;
3)模拟断电,破会数据文件和控制文件
SQL> shutdown abort
[oracle@gc2 hot_bak]$ cd /u01/app/oracle/oradata/EMREP/
[oracle@gc2 EMREP]$ lscontrol01.ctl example01.dbf redo01.log sysaux01.dbf undotbs01.dbfcontrol02.ctl gguser.dbf redo02.log system01.dbf users01.dbfcontrol03.ctl goldengate01.dbf redo03.log temp01.dbf[oracle@gc2 EMREP]$ rm *.dbf[oracle@gc2 EMREP]$ rm *.ctl
4)启动数据库失败
SQL> startup
ORACLE instance started.Total System Global Area 608174080 bytesFixed Size 1220844 bytesVariable Size 197136148 bytesDatabase Buffers 406847488 bytesRedo Buffers 2969600 bytesORA-00205: error in identifying control file, check alert log for more info
5)恢复解决:
(1)重建控制文件,因为日志没有丢失,所以这里用NORESETLOGS
[oracle@gc2 udump]$ more haha.trc
CREATE CONTROLFILE REUSE DATABASE "EMREP" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292LOGFILE GROUP 1 '/u01/app/oracle/oradata/EMREP/redo01.log' SIZE 50M, GROUP 2 '/u01/app/oracle/oradata/EMREP/redo02.log' SIZE 50M, GROUP 3 '/u01/app/oracle/oradata/EMREP/redo03.log' SIZE 50M-- STANDBY LOGFILEDATAFILE
'/u01/app/oracle/oradata/EMREP/system01.dbf', '/u01/app/oracle/oradata/EMREP/undotbs01.dbf', '/u01/app/oracle/oradata/EMREP/sysaux01.dbf', '/u01/app/oracle/oradata/EMREP/users01.dbf', '/u01/app/oracle/oradata/EMREP/example01.dbf', '/u01/app/oracle/oradata/EMREP/goldengate01.dbf', '/u01/app/oracle/oradata/EMREP/gguser.dbf'CHARACTER SET WE8ISO8859P1;重建报错,我们需要先转储备份的数据文件
[oracle@gc2 hot_bak]$ cp * /u01/app/oracle/oradata/EMREP/
[oracle@gc2 hot_bak]$ cp control01.ctl /u01/app/oracle/oradata/EMREP/control01.ctl
[oracle@gc2 hot_bak]$ cp control01.ctl /u01/app/oracle/oradata/EMREP/control02.ctl[oracle@gc2 hot_bak]$ cp control01.ctl /u01/app/oracle/oradata/EMREP/control03.ctl再次重建成功;
查看scn号发现不一致
SQL> select file#,checkpoint_change# from v$datafile;
1 998993 2 998993 3 998993 4 998993 5 998993 6 998993 7 998993SQL> select file#,checkpoint_change# from v$datafile_header; 1 998253 2 998289 3 998313 4 998340 5 998360 6 998384 7 998410需要恢复数据库
SQL> recover database;
Media recovery complete.SQL> alter database open;SQL> select count(*) from emp1;
42数据恢复到最后一次提交。
实验二:只有数据文件丢失了
1)创建实验环境
SQL> create table emp2 as select * from scott.emp;
SQL> insert into emp2 select * from scott.emp;SQL> commit;SQL> alter system archive log current;SQL> insert into emp2 select * from scott.emp;SQL> commit;SQL> insert into emp2 select * from scott.emp;SQL> select count(*) from emp2; 56
2)模拟断电,破坏试验
SQL> shutdown abort
ORACLE instance shut down.删除所有的数据文件
[oracle@gc2 EMREP]$ ls
control01.ctl example01.dbf redo01.log sysaux01.dbf users01.dbfcontrol02.ctl gguser.dbf redo02.log system01.dbfcontrol03.ctl goldengate01.dbf redo03.log undotbs01.dbf[oracle@gc2 EMREP]$ rm *.dbf3)启动失败
SQL> startup
ORACLE instance started.Total System Global Area 608174080 bytesFixed Size 1220844 bytesVariable Size 197136148 bytesDatabase Buffers 406847488 bytesRedo Buffers 2969600 bytesDatabase mounted.ORA-01157: cannot identify/lock data file 1 - see DBWR trace fileORA-01110: data file 1: '/u01/app/oracle/oradata/EMREP/system01.dbf'查看需要恢复的数据文件
SQL> select file#,error from v$recover_file;
1 FILE NOT FOUND 2 FILE NOT FOUND 3 FILE NOT FOUND 4 FILE NOT FOUND 5 FILE NOT FOUND 6 FILE NOT FOUND 7 FILE NOT FOUNDSQL> select file#,name from v$datafile;
1 /u01/app/oracle/oradata/EMREP/system01.dbf
2 /u01/app/oracle/oradata/EMREP/undotbs01.dbf 3 /u01/app/oracle/oradata/EMREP/sysaux01.dbf 4 /u01/app/oracle/oradata/EMREP/users01.dbf 5 /u01/app/oracle/oradata/EMREP/example01.dbf 6 /u01/app/oracle/oradata/EMREP/goldengate01.dbf 7 /u01/app/oracle/oradata/EMREP/gguser.dbf转储备份:
[oracle@gc2 hot_bak]$ cp *.dbf /u01/app/oracle/oradata/EMREP/
恢复:
SQL> recover database;
ORA-00279: change 998253 generated at 07/27/2014 13:20:11 needed for thread 1ORA-00289: suggestion : /home/oracle/EMREP/1_23_839513627.dbfORA-00280: change 998253 for thread 1 is in sequence #23 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}auto ---让系统自己找需要的日志Log applied.Media recovery complete.SQL> alter database open;SQL> select count(*) from emp2; 42数据恢复到最后一次的提交。