Flashback Query和Flashback Table都是利用UNDO内容来完成的,所以恢复效果取决于保留的UNDO内容多少,要达到理想效果,就要考虑UNDO_RETENTION的参数设置。
UNDO_RETENTION参数定义的是提交修改后的UNDO记录还要保留多长时间。但是Oracle并不强制保留这么长时间,如果UNDO空间不够,即使还没有达到时间限制,这些记录还是会被覆盖。可以通过在UNDO表空间或者数据库设置Retention Guarantee来强制这种保留时间限制,缺省时这个特性没有启用。这个属性可以在dba_tablespace视图中查看。
(1)缺省状态下,Guarantee没有启动。
- SQL> select tablespace_name,retention from dba_tablespaces;
- TABLESPACE_NAME RETENTION
- --------------- -------
- SYSTEM NOT APPLY
- UNDOTBS1 NOGUARANTEE
(2)启动Retention Guarantee。
- SQL> alter tablespace undotbs1 retention guarantee;
- Tablespace altered.
(3)确认修改生效。
- SQL> select tablespace_name,retention from dba_tablespaces;
- TABLESPACE_NAME RETENTION
- --------------- --------
- SYSTEM NOT APPLY
- UNDOTBS1 GUARANTEE
最后通过表10-3对Flashback工具集做一下总结。
表10-3 Flashback家族技术总结
工 具 集 | Flashback Log | Tablesapce Bin | UNDO | 目 的 |
Flashback Database | √ |
|
| 回滚数据库 |
Flashback Drop |
| √ |
| 恢复用户 误删除的表 |
Flashback Version Query |
|
| √ | 恢复用户 误操作的数据 |
Flashback Transaction Query |
|
| √ | 同上 |
Flashback Table |
|
| √ | 同上,但是 在数据表级别 |