读书人

FlashBack小结之闪回数据库与闪回删除

发布时间: 2012-08-30 09:55:54 作者: rapoo

FlashBack总结之闪回数据库与闪回删除(原创)

闪回数据库的特性

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 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志和Flash Recovery Area。一旦数据库启用了Flashback Database, 则RVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log, 这些日志包括的是数据块的 " 前镜像(before image)", 这也是Flashback Database 技术不完全恢复块的原因。RVWR进程写入的是闪回数据库日志,详细流程图见下图。

FlashBack小结之闪回数据库与闪回删除(原创)


[oracle@dg1 ~]$ ps -ef|grep rvw|grep -v grep
oracle??? 2665???? 1? 0 08:53 ???????? 00:00:00 ora_rvwr_orcl

RVWR和LGWR的区别

假设T表C1列默认值为null,并进行了如下操作

时间点

作用的列T(C1)的SQL

RVWR

LGWR

09:00:00

Update T set c1=1;

改变前的值null

改变前的值null,改变后的值1

09:10:00

Update T set c1=2;

改变前的值1

改变前的值1,改变后的值2

09:15:00

Update T set c1=3;

改变前的值2

改变前的值2,改变后的值3

09:20:00

Update T set c1=4;

改变前的值3

改变前的值3,改变后的值4

闪回日志和联机重做日志虽然作用相似,但他们还是有不少差异。闪回日志不是循环使用的,联机重做日志是循环使用的。当事务修改了buffer cache中的数据块时,会将改变前的值和改变后的值以重做记录的形式保存在log buffer中,然后通过LGWR将重做记录写入联机重做日志中。但是在记录闪回日志时,只会将改变前的值保存在flashback buffer中,再由RVWR写入闪回日志中。
闪回时,从闪回日志的尾部向头部方向,依次取出闪回日志中的记录并应用在数据库上。而应用重做日志在进行实例恢复时,从闪回日志的头部向尾部方向依次取出重做记录并应用到数据库上。
比如当前时间09:20:00表T中C1列的值为4,当需要闪回到09:10:00表T中C1为2的时候。从尾部应用日志开始,先取出C1=3这个值覆盖C1=4,之后继续取出C1=2覆盖C1=3。发现已经满足条件,故停止应用闪回日志。
与闪回数据库相关的几个视图

1.v$flashback_database_log
Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少,该视图就可以查看许多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点
Fashback_size: 记录了当前使用的Flash Recovery Area 空间的大小
Retention_target: 目标保存的实际(分钟)
Estimated_flashback_size: 根据策略对需要的空间大小的估计值
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.

SQL>? select OLDEST_FLASHBACK_SCN os,OLDEST_FLASHBACK_TIME ot,RETENTION_TARGET rt ,FLASHBACK_SIZE fs,ESTIMATED_FLASHBACK_SIZE efs from v$flashback_database_log;
??????? OS??????? OT???????????????????????? ? ? ? ? ? ? RT???????? FS???? ? ? ? ? ? EFS
----------??????? ------------------------ ??????? ? ? ----------?? ----------????????? ---------
??? 858471?? 2011-03-23 12:19:20?????? 1440?? 79970304??? 95920128


参考至:《教你成为10G OCp》韩思捷著

????????????????? http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4677378.aspx

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

读书人网 >其他数据库

热点推荐