第14章 闪回技术(Flashback)
闪回技术(Flashback),是Oracle 11g数据库提供的7个能使数据库整体或局部回到"过去"的闪回功能的总称,主要用于对抗人为错误。在这些功能中,有的不会修改现有的数据而只是展示以前的数据,即能够观察过去;有的可以将数据修改为以前的值,即真正地回到过去。
闪回技术有闪回查询、闪回数据归档、闪回事务查询、闪回事务、闪回表、闪回删除和闪回数据库。
14.1 闪回查询(Flashback Query)
以表为单位查询其过去的数据称为闪回查询,共两种风格:利用select命令的"as of"子句与PL/SQL包dbms_flashback在过去的一个时间点上的查询,称为闪回时间点查询;利用select命令的"versions between"子句在过去的一段时间范围内的查询,称为闪回版本查询。
之所以可以查看"过去",是因为闪回查询能够在撤销段内搜索撤销数据("旧"数据),数据库能够保留多少撤销数据决定了闪回查询的时间窗口的大小,撤销数据的保留策略取决于以下4个因素:
(1)初始化参数undo_retention的值,单位为秒,该参数是一种建议机制,表示任何修改所产生的撤销数据应该在发起修改的事务提交之后再保留多长时间。默认建议是900s,这是个特殊的建议,必须强制落实,如果管理员将undo_retention修改为大于900的值,那么该参数真正"沦落"为一个建议而已:
- SQL> show parameter undo_retention
- NAME TYPE VALUE
- ----------------------------------- ---------- ------------------------------
- undo_retention integer 900
比如修改为建议保留1小时:
- SQL> alter system set undo_retention=3600;
- System altered.
到底能否保留3600s还得看其他因素。
(2)UNDO表空间的数据文件是否启用了自动增长功能。若能够自动增长,则undo_retention参数的建议能够被最大限度地采纳。
- SQL> select autoextensible from dba_data_files
- 2 where tablespace_name=
- 3 (select value from v$parameter where name='undo_tablespace');
- AUT
- ---
- YES
必须注意,能够自动增长若配合高的不合理的undo_retention设置可以打造出一个很大的UNDO表空间,请小心使用。
(3)UNDO表空间是否绝对尊重undo_retention的设置,将撤销数据(Undo Data)真正保留那么久。默认情况为数据库不尊重900s以上的任何设置,即NOGARANTEE。
- SQL> select retention from dba_tablespaces
- 2 where tablespace_name='UNDOTBS1';
- RETENTION
- -----------
- NOGUARANTEE
用"alter tablespace"命令可修改UNDO表空间的RETENTION属性,比如让数据库绝对尊重undo_retention的设置,即设置为GUARANTEE:
- SQL> alter tablespace undotbs1 retention guarantee;
- Tablespace altered.
这样做的实质是使原本为"建议"的undo_retention变为强制的"规定",结合(1)现在可是要求保留1小时的撤销数据了。
必须注意,若UNDO表空间能够自动增长再配合高的不合理的undo_retention设置,现在再加上GUARANTEE设置,在这种情况下只能说请管理员自重了,准备迎接巨无霸UNDO表空间吧。
(4)数据库中的事务量。显然事务量越大产生新的撤销数据的速率就越高,面对庞大的事务量管理员在设置以上3要素时必须做出艰难的决定:想要确保UNDO表空间尽量地小撤销数据提交后肯定留不了多久,极端情况是接近900s;若要确保撤销数据提交后再留得久一些,UNDO表空间必然变得很大。其中利弊只能由管理员自己权衡了。
切记以上影响闪回查询时间窗口的4因素,闪回事务查询、闪回表的时间窗口同样受其影响。
总而言之,闪回查询时间窗口可以有多大,最终取决于数据库能容忍一个多大的UNDO表空间,即用空间换"过去的时间"。
言归正传,首先介绍闪回查询中的闪回时间点查询。
原帖地址:http://book.51cto.com/art/201207/347689.htm
这本书感觉值得拥有,所有在这里转载下。