友善交流技术...

Flashback Database

上一篇 / 下一篇  2010-01-28 18:22:03 / 个人分类:Oracle数据库

Flashback Database

Flashback Database功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log日志RMAN更快速和高效。因此Flashback Database可以看作是不完全恢复的替代技术。但它也有某些限制:

1. Flashback Database不能解决Media Failure这种错误RMAN恢复仍是唯一选择

2.如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore出来,然后利用Flashback Database执行剩下的Flashback Datbase

3.如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database

4.使用Flashback Database锁能恢复到的最早的SCN取决与Flashback Log中记录的最早SCN

Flashback Database架构

Flashback Database整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志Flash Recovery Area。一旦数据库启用了Flashback DatabaseRVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log这些日志包括的是数据块的"前镜像(before image)"这也是Flashback Database技术不完全恢复块的原因。

[oracle@dba ~]$ ps -ef|grep rvw

oracle  12620 12589 0 13:21 pts/1   00:00:00 grep rvw

启用Flashback Database

数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,就需要做如下配置。

1.配置Flash Recovery Area

 要想使用Flashback Database必须使用Flash Recovery Area,因为Flashback Database Log只能保存在这里。要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RACflash recovery area必须位于共享存储中。数据库必须处于archivelog模式.

启用Flash Recovery Area

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH;

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH;

禁用Flash Recovery Area

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;

对于Flash Recovery AreaOracle是这样建议的,flash recovery area设置的越大,flashback database的恢复能力就越强,因此建议flash recovery area能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs

在数据库运行过程中,oracle自动向该区域写入文件,当剩余空间不足15%的时候,它就会在alert中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,直到所有空间统统被用掉之后,oracle首先尝试删除寻些过期的文件,冗余文件或备份过的文件,如果这些做完了,还是没有空闲空间的话,数据库就被hang住了。

对于因Flash Recovery Area导致的数据库hang的处理,请参考:

http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx

或者

http://user.qzone.qq.com/251097186/blog/1244650673

2.启用数据库Flashback功能

1).数据库启动到mount状态

SQL> startup mount

2).检查Flashback功能,缺省时功能是关闭的。

SQL> select name, current_scn, flashback_on from v$database;

NAME   CURRENT_SCN FLASHBACK_ON

-------   -----------         ------------------

 

DBA     945715         NO

3).启动Flashback功能

SQL> alter database flashback on;

数据库已更改。

SQL> select name, current_scn, flashback_on from v$database;

NAME     CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

DBA                0 YES

4).设置初始化参数:DB_FLASHBACK_RETENTION_TARGET

SQL>alter system set db_flashback_retention_target=1440 scope=both;

该参数用来控制flashback log数据保留的时间,或者说,你希望flashback database能够恢复的最早的时间点。默认值是1440,单位是minute,即24小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area的大小就至少是数据库所占容量的20%

5).启动数据库

SQL>alter database open;

Flashback Database操作示例

做操作前先备份数据库

RMAN> backup database;

1.检查是否启动了flash recovery area:­

SQL> show parameter db_recovery_file

NAME                   TYPE       VALUE

 

------------------------------------ ----------- ------------------------------

 

db_recovery_file_dest      tring      D:\oracle/flash_recovery_area

 

db_recovery_file_dest_size big integer 1G

2.检查是否启用了归档­

SQL> archive log list;

数据库日志模式     存档模式

自动存档           启用

存档终点           USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列 9

下一个存档日志序列 11

TAG:

 

评分:0

我来说两句