Flashback Table
Flashback Table不仅恢复过去一个时间点的表的行数据, 数据库在线时同样也恢复表的索引, 触发器和约束, 增加数据库的整体可用性. 表使用时间点或者SCN进行恢复. 在用户小范围错误或极少数几个表的情况下, Flashback Table比其它的闪回方法更有效. 对于恢复大量量, Flashback Database是个更好的选择. Flashback Table不能用于备用数据库, 不能重建所有的DDL操作, 如增加和删除字段.
在使用Flashback Table操作表之前必须在表上启用行移动功能(row movement). Oracle段收缩功能也需要行移动功能支持.
SQL> delete from flashtest;
7 rows deleted
SQL> commit;
Commit complete
SQL> flashback table flashtest
2 to timestamp systimestamp – interval ’15′ minute;
flashback table flashtest
to timestamp systimestamp – interval ’15′ minute
ORA-08189: 因为未启用行移动功能, 不能闪回表
SQL> alter table flashtest enable row movement;
Table altered
SQL> delete from flashtest;
7 rows deleted
SQL> commit;
Commit complete
SQL> flashback table flashtest
2 to timestamp systimestamp – interval ’15′ minute;
Done
SQL> select count(*) from flashtest;
COUNT(*)
———-
7
Flashback Version Query
Flashback Version Query是另一个依赖重做数据的闪回特性, 提供比as of查询更深层次的细节描述, 返回给定期间或SCN内的所有历史操作记录.
Flashback Version Query使用versions between子句为分析的表指定SCN和期间范围, 并利用一些虚拟列确定改变的SCN和时期, 事务ID和操作类型.
虚拟列说明如下:
VERSIONS_START{SCN|TIME} : 当行版本被改变时的开始SCN和时间戳, 这里行已改变.
VERSION_END{SCN|TIME} : 改变对行不再有效时的结束SCN和时间戳, 若该参数为空, 则行的版本是当前的, 或已经被删除.
VERSIONS_XID : 为行版本创建的事务ID
VERSIONS_OPERATION : 行上执行的操作(I, U, D)
具体见下面实验:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
————————
3002569
SQL> update flashtest set object_id=100
2 where object_id=46;
1 row updated
SQL> delete from flashtest where object_id=’15′;
1 row deleted
SQL> insert into flashtest
2 select * from all_objects
3 where rownum<2;
1 row inserted
SQL> update flashtest set object_id=200 where object_id= 3;
1 row updated
SQL> commit;
Commit complete
SQL> update flashtest set object_id = 300 where object_id = 54;
1 row updated
SQL> commit;
Commit complete
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
————————
3005474
SQL> select versions_startscn startscn, versions_endscn endscn,
2 versions_xid xid, versions_operation oper,
3 object_id, object_name
4 from flashtest
5 versions between scn 3002569 and 3005474;
STARTSCN ENDSCN XID OPER OBJECT_ID OBJECT_NAME
—————- ———- ————————– ——- ———- ——————
3005473 05001400A8070000 U 300 I_CDEF2
3005406 090015006D070000 U 200 I_OBJ#
3005406 090015006D070000 I 20 ICOL$
3005406 090015006D070000 D 15 UNDO$
3005406 090015006D070000 U 100 I_USER1
3005406 46 I_USER1
28 CON$
3005406 15 UNDO$
29 C_COBJ#
3005406 3 I_OBJ#
25 PROXY_ROLE_DATA$
3005473 &n
bsp; 54 I_CDEF2
12 rows selected