如果出现了日志断点就要进行不完全恢复
不完全恢复可以用手动,也可以用rman,当然最好用flashback。不管用那种方式,都需要用控制文件。无论控制文件是新的还是旧的都可以用来恢复。
如果是控制文件时最新的,则不完全恢复后,不能recover database,不然就将数据文件恢复到控制文件记录的scn的地方,直接到最新了。
如果用旧的控制文件恢复,数据文件和控制文件一起恢复到指定的scn或时间点。因为控制文件和数据文件始终同步,那recover database就没有意义了。因为recover database就是让数据文件前进到和控制文件同步
手动 不完全恢复(用新的控制文件恢复)
1、将所有备份的数据文件考回数据目录下
2、startup mount
3、控制文件,数据文件中scn不一致
SQL> select checkpoint_change# from v$datafile; 控制文件中
CHECKPOINT_CHANGE#
------------------
836757
SQL> select checkpoint_change# from v$datafile_header; 数据文件中
CHECKPOINT_CHANGE#
------------------
836575 scn 较小, 数据文件太旧
4、不完全恢复
SQL> recover database until cancel
5、查看数据文件,控制文件的scn
SQL> select checkpoint_change# from v$datafile; 控制文件中
CHECKPOINT_CHANGE#
------------------
836757
SQL> select checkpoint_change# from v$datafile_header;; 数据文件中
CHECKPOINT_CHANGE#
------------------
836700 scn前进了,但是还是不一致
6、打开数据库
alter database open resetlogs
7、查看数据文件,控制文件的scn
SQL> select checkpoint_change# from v$datafile; 控制文件中
CHECKPOINT_CHANGE#
------------------
836702 scn回退了,但是一致了
SQL> select checkpoint_change# from v$datafile_header;; 数据文件中
CHECKPOINT_CHANGE#
------------------
836702
rman 不完全恢复(用旧的控制文件恢复)
1、导回旧的控制文件
RMAN> restore controlfile from '/opt/oracle/flash_recovery_area/ORCL/backupset/2013_06_29/o1_mf_ncsnf_TAG20130629T182624_8wxfnb87_.bkp';
2、挂载数据库
RMAN> alter database mount;
3、执行脚本
RMAN> @/home/oracle/a.sql
run{
sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
set until time '2013-06-29 18:27:51';
restore database;
recover database;
alter database open resetlogs;
}
run{
set until scn 877131;
restore database;
recover database;
alter database open resetlogs;
}