ORACLEFLASHBACKDATABASE总结(四)

2015-02-02 13:28:33 · 作者: · 浏览: 46
hback log buffer已经写出到闪回日志。 这被称作 先写闪回日志 机制。在常规的闪回日志维护操作中 , RVWR进程定期地插入闪回标记(flashback markers)到flashback database logs中。 闪回标记(flashback markers)的作用是在闪回数据库是告知Oracle如何flashback 到之前的某个时间点。 在闪回操作执行过程中, Oracle 会用闪回标记(flashback markers)中的信息来决定多大范围的flashback database log需要用来还原数据块景象block image; 之后Oracle 会利用前向恢复(forward recovery)的方式把数据库穿越到用户指定闪回的SCN或者时间点。需要注意的是不是数据库中的每一次block change 都会触发before image被记录到闪回日志flashback log中。 如果每一次block change都记录flashback log record 那么闪回日志会要比 redo log大的多!对于hot block热块,Oracle仅在一段时间内记录一次block image到闪回日志; Oracle 内部通过闪回分界线(flashback barriers)实现这一点。在常规数据库状态下,flashback barriers被周期性的触发(一般为15分钟),对应每一个闪回分界线(flashback barriers)会有一个(flashback markers)被写出到闪回日志。常规情况下,对于每一个被修改的数据块在一个闪回区域(被分界线barriers分割的区域)内仅记录一个block image ,无论这个数据块在这段区域内被修改了多少次、被写出过多少次到磁盘上。

当进行闪回时,先恢复到对应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来配