flashback database 功能非常类似于RMAN的不完全恢复,它可以把整个数据库回退到过去某个时间点的状态。这个功能依赖于
flashback log日志,比RMAN 更快速和高效。
flashback database 的限制:
1.不能解决介质故障。
2.删除数据文件和SHRINK技术缩小数据文件大小,这样的也不能闪回。
3.如果控制文件是从备份中恢复出来的,或者是重建的数据库控制文件,也是不能闪回的。
4.使用FLASHBACK DATABASE 所能恢复出来的最早SCN,取决于FLASHBACK LOG 中记录最早的SCN。
架构:
一个进程 recover writer(RVWR)后台进程、flashback database log 日志和flash recovery area.
一旦数据库启用了flashback database ,则RVWR 进程会启动,RVWR 进程会向flash recovery area写入flashback database log. 这些日志包括的是数据块的”前镜像“(before image)。 这也是flashback database 技术比不完全恢复快的原因。
flashback buffer:
如果数据库启用FLASHBACK 功能,ORACLE 即在SHARED POOL 中分配FLASHBACK BUFFER。
查询分配大小:
SQL> select name, bytes from v$sgastat where pool='shared pool' and name like'%flash%';
NAME BYTES
-------------------------- ----------
flashback generation buff 3981204
当FLASHBACK BUFFER 空间紧张时,可能会出现FLASHBACK BUF FREE BY RVWR等待事件.在这里就要调BUFFER的大小了。
oracle flashback buffer 大小设置不公和隐含参数_flashback_generation_buffer_size有关而且和granule 大小有关。
granule大于_flashback_generation_buffer_size 时,_flashback_generation_buffer_size生效。
对于大内存高并生产库建议将log_buffer设置8M以上。
select x.ksppinm NAME, y.ksppstvl VALUE, x.KSPPDESC PDESC
FROM SYS.x$ksppi x, SYS.x$ksppcv y
where x.indx=y.indx and x.ksppinm like '%&par%';
enter value for par: flashback
修改过程:
select name, bytes from v$sgastat where pool='shared pool' and name like'%flash%';
NAME BYTES
-------------------------- ----------
flashback generation buff 3981204
SQL>
SQL> alter system set log_buffer=10000000 scope=spfile;
System altered.
SQL> alter system set "_ksmg_granule_size"=8388608 scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup force;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218148 bytes
Variable Size 92277148 bytes
Database Buffers 176160768 bytes
Redo Buffers 15556608 bytes
Database mounted.
Database opened.
SQL> select name, bytes from v$sgastat where pool='shared pool' and name like'%flash%';
NAME BYTES
-------------------------- ----------
flashback generation buff 7966612
RAC 的两个节点都要操作。