一、闪回功能介绍
用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。
闪回特性可应用在以下方面:
1、自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
2、恢复Email和声音Email:当用户意外删除了Email或者声音信息时,可以通过移回到固定时间点来恢复删除。
3、账号平衡状况:可以查看以前的历史数据。如银行外币管理中用于记录特定时间的汇率。在以前,汇率变更被记录在一个历史表中,现在就可以通过闪回功能进行查询。
4、用于趋势分析的决策支持系统:决策支持系统和联机分析应用必须执行一个长时间的事务。使用闪回查询,这些应用可以对历史数据执行分析和建模。例如,特定产品如矿泉水随季节变化需求情况的变化
二、确认一个数据库是否打开了flashback:
1、直接查数据库
SQL> select name,log_mode,flashback_on from v$database;
NAME LOG_MODE FLASHBACK_ON
--------- ------------ ------------------
ORA11G ARCHIVELOG NO --> flashback未打开
三、打开闪回数据库特性:
1、确保数据库处于归档模式,如果为非归档模式,将数据库转换成归档模式
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /cwarch
最早的联机日志序列 1274
下一个存档日志序列 1276
当前日志序列 1276
2、设置闪回恢复区
设置闪回区大小:
SQL> alter system set db_recovery_file_dest_size=80g scope=spfile;
设置闪回区位置:
SQL> alter system set db_recovery_file_dest='/workdb/account_flashback_area' scope=spfile;
设置闪回目标为5天,以分钟为单位,每天为1440分钟:
SQL> alter system set db_flashback_retention_target=7200 scope=spfile;
3、打开闪回功能
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;
4、确认数据库闪回特性已经启用
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
四、关闭闪回数据库特性:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback off;
SQL> alter database open;
五、闪回功能的具体应用:Oracle 11g使用闪回特性恢复误修改的存储过程
工作中常有误修改了存储过程而未备份的情况,Oracle 11g的闪回特性为我们提供了一个方便的补救方法。
先看这个视图:DBA_SOURCE
DBA_SOURCE describes the text source of all stored objects in the database.
SQL> desc dba_source
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
NAME VARCHAR2(30)
TYPE VARCHAR2(12)
LINE NUMBER
TEXT VARCHAR2(4000)
SQL>
只要确定修改的时间,通过闪回查询DBA_SOURCE视图就能找回修改前的源代码了。
例如:
SELECT *
FROM DBA_SOURCE AS OF TIMESTAMP TO_TIMESTAMP('2009-03-18 10:07:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE OWNER = 'USER'
AND NAME = 'PRO_UPDATE_TB_USER_LOGIN'
ORDER BY LINE