当进行闪回时,先恢复到对应target time,即我们的之前的某个镜像上,然后根据redo log,重新应用redo log,将数据恢复到我们指定的闪回的时间点上。从这里可以看出,闪回数据库是需要redo log和归档日志支持的。
闪回数据库的限制
1:闪回数据库不能用于介质恢复
2:闪回数据库不能用于恢复使用了shrink技术的数据文件,不能用于恢复已经删除的数据文件
3:不能从重建控制文件或者恢复的控制文件,进行闪回数据库,因为控制文件中的闪回日志信息被过期丢弃了
4:我们不能使用闪回数据库将数据库闪回到执行nologging操作的时间点,因为有可能会造成数据快损坏
模拟一下控制文件恢复的情景:
[oraele@vm1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Tue Jan 27 09:13:12 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> recover database using backup controlfile;
ORA-00279: change 1138457 generated at 01/26/2015 16:10:27 needed for thread 1
ORA-00289: suggestion :
/u01/app/oraele/fast_recovery_area/ORCL/archivelog/2015_01_27/o1_mf_1_1_%u_.arc
ORA-00280: change 1138457 for thread 1 is in sequence #1
Specify log: {=suggested | filename | AUTO | CANCEL}
/u01/app/oraele/oradata/orcl/redo01.log
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select * from test;
ID SCN
---------- --------------------
0 1121575
1 1126681
2 1138419
3 1150711
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 267227136 bytes
Fixed Size 2227504 bytes
Variable Size 192938704 bytes
Database Buffers 67108864 bytes
Redo Buffers 4952064 bytes
Database mounted.
SQL> flashback database to scn 1138419;
flashback database to scn 1138419
*
ERROR at line 1:
ORA-38729: Not enough flashback database log data to do FLASHBACK.
SQL> desc v$flashback_database_log
Name Null? Type
----------------------------------------- -------- ----------------------------
OLDEST_FLASHBACK_SCN NUMBER
OLDEST_FLASHBACK_TIME DATE
RETENTION_TARGET NUMBER
FLASHBACK_SIZE NUMBER
ESTIMATED_FLASHBACK_SIZE NUMBER
SQL> select olddest_flashback_scn from v$flashback_database_log;
select olddest_flashback_scn from v$flashback_database_log
*
ERROR at line 1:
ORA-00904: "OLDDEST_FLASHBACK_SCN": invalid identifier
SQL> c/oldd/old
1* select oldest_flashback_scn from v$flashback_database_log
SQL> /
OLDEST_FLASHBACK_SCN
--------------------
1150901
SQL>
SQL> select begin_time from v$flashback_database_stat; BEGIN_TIM --------- 27-JAN-15
在使用闪回数据库技术或者其他闪回技术时,我们需要指定需要闪回到的scn或者时间点,为了简化工作,可以 创建restroe point来配