1.闪回技术有三种,分别是闪回数据库、闪回查询、闪回删除。

闪回数据库是把数据库恢复到某一个时间点;闪回查询是查询表的历史记录;闪回删除是把drop掉的表还原回来(表存在于recyclebin中)。

2.三种闪回技术的限制:

闪回数据库受闪回日志大小的限制;

闪回查询受撤销保留时间限制;

闪回删除受表可用空间限制;

但可以通过配置Flashback Data Archive来无限期地存储行的前映像。(如何对表启用?)

3.闪回数据库的配置:

1)确保数据库处于归档模式中,如果不是归档模式则要进行修改;

2)创建闪回恢复区:

alter system set db_recovery_file_dest='/flash_recovery_area';

alter system set db_recovery_file_dest_size=8G; 

3)设置闪回保留目标时间:

alter system set db_flashback_retention_target=240;--单位是分钟,默认保留时间是1天;

4)干净地关闭并加载数据库

SQL>shutdown immediate;

SQL>startup mount;

5)启用闪回日志记录:

alter database flashback on;

6)打开数据库

alter database open;

4.使用闪回数据库

使用闪回数据库的步骤:

1)关闭数据库;

2)加载数据库;

3)闪回到某个时间点、SCN或日志切换序列号;

4)使用resetlogs打开数据库;

可以使用SQL*Plus、RMAN、Database Control进行闪回数据库

以SQL*Plus为例:

1)shutdown abort;

2)startup mount;

flashback database to timestamp to_timestamp( );

alter database open read only;--到这里如果不能满足需求,则要重新执行1)、2)步,切换不同的时间点

3)shutdown abort;

startup mount;

alter database open resetlogs;

5.闪回删除:

flashback table <table_name> to before drop [rename to <new_name>];--rename部分非必须

注意:truncate table<table_name>不能闪回;drop user user_name cascade后也不能闪回;

5.闪回查询

1)基本的闪回查询:

select * from <table_name>  as of  timestamp to_timestamp(timestamp,'yyyy-mm-dd hh24:mi:ss');--也可以是to SCN......

2)闪回表查询:

flashback table <table1>,<table2> to timestamp to_timestamp(timestamp,'yyyy-mm-dd hh24:mi:ss');

3)闪回版本查询

SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, col1,col2...

FROM <table_name> 

VERSIONS BETWEEN TIMESTAMP BeginTimestamp and EndTimestamp 

WHERE 条件表达式

--TIMESTAMP 可以用SCN替代

6.闪回数据归档

1)创建归档名称

create flashback archive <default> hrarch tablespace fbdal quota 10g retentions 5years;

注:

default表示所有表的归档,可以之后再进行设定:

alter flashback archive hrarch set default;

hrarch表示该归档的名称;

fbdal表示归档数据存储的表空间;

quota表示归档在表空间中占用的空间,表空间不够时可以扩展到另外一个表空间中:

alter flashback archive hrarch add tablespace fbda2 quota 10g;

retention表示归档保留时间,可以调整为

alter flashback archive hrarch modify retention 7 year;

数据超过保留期限后会自动删除,也可以手动删除:

alter flashback archive hrarch purge before timestamp to_timestamp(timestamp,'yyyy-mm-dd');

2)赋予用户归档的权限

grant flashback archive administer to fbdaadmin;

grant flashback archive on hrarch to hr;

3)启用表归档保护

alter table hr.employees flashback archive hrarch;

4)有3个数据字典视图来记录闪回数据的归档配置:

DBA_FLASHBACK_ARCHIVE;--描述配置的归档

DBA_FLASHBACK_ARCHIVE_TS:--显示每个表空间的每个归档的配额;

DBA_FLASHBACK_ARCHIVE_TABLES;--列出启用了归档的表