闪回包括:闪回查询、闪回版本查询、闪回事务查询、闪回表、闪回删除和闪回数据库
其中前四个需要使用插销数据,这里主要先介绍着四个。
如果经常使用闪回操作,则建议使用有保证的撤销保留,要不然可能会收到‘快照太旧’的错误。
一、闪回查询
查询数据在过去某个时刻或者某个SCN处的一个旧版本。
要对对象闪回查询,需要用户具有对象上的flashback权限,或者具有flashback any table权限。
1、使用SQL语句
使用TIMESTAMP:select select_list from table_name
as of timestamp to_timestamp('timestamp_value','timestamp_format')
[ where 条件]
使用SCN:select select_list from table_name
as of scn scn_value
[where 条件]
2、使用dbms_flashback
exec dbms_flashback.enable_at_time(to_timestamp('timestamp_value','timestamp_format'));
或者:
exec dbms_flashback.enable_at_system_change_number(scn_value);
然后
select .... from table_name
[where 条件];
最后
exec dbms_flashback.disable;
3、使用闪回查询纠正过去的错误操作
比如:update table_name set column_name=(select column_name from table_name as of scn scn_value[ where 条件])
[where 条件];
insert into table_name[(column_name [, ...])]
select .... from table_name
as of timestamp to_timestamp('timestamp_value','timestamp_format')
[where 条件];
二、闪回版本查询
1、注意事项:只能检索行的已提交版本
检索所有已删除的行和当前行
检索删除之后重新插入的行
查询的结果为表的形式,每一版本包含一行
2、限制:只能查询实际的表,不能查询视图
不能跨越DDL应用versions子句
忽略纯粹的行物理变化
不能应用到外部表和临时表
3、伪列:versions_starttime versions_startscn :该版本开始时间、开始scn。如果为空,则表示在指定的最小时间或者最小scn之前开始。
versions_endtime versions_endscn :该版本结束时间、结束时scn。如果为空则表示为当前行或者已经删除。
versions_operation:表示在行上执行的操作类型,I:insert U:update D:delete
versions_xid:导致该版本的事务唯一标示符。
4、select ..... from table_name
{versions between {timestamp | scn } {expression | minvalue }
and {expression | maxvalue}}
[as of timestamp scn] --指定字某个时间点或者scn之后的所有行,如果使用minvalue或者maxvalue而没有使用as of子句,oracle将检索自会话以来的数据。
[where 条件]
三、闪回事务查询
闪回事务查询就是对flashback_transaction_query视图的查询。
执行闪回事务查询需要具有select any transaction权限。
注意事项:如果操作涉及链接行或者特殊的存储结构(如集群表),应该打开最小的补充日志:alter database add supplemental log data;
在查询组织表时,更新操作总是显示为两步骤:删除、插入
如果查询涉及已经删除的表或者已经删除的用户,则只显示对象编号和用户id,不显示对象名和用户名。
四、闪回表
1、权限
闪回表需要在表上的flashback权限,或者flashback any table权限
同时需要在表上的insert、update或者delete权限
2、需要启用行移动
alter table table_name enable row movement;
3、flashback table table_name [,table_name ....]
to
{scn |timestamp} expression
[{enable |disable} triggers]