1.Flashback Table功能描述
将数据表恢复到之前的一个时间点或SCN号。
注意:该功能将改变当前表及相关对象统一闪回到之前的一个状态。
2.需要修改的系统参数
undo_management,参数需要是“AUTO”,保证回滚段使用模式是SMU mode
undo_retention,单位是秒,调整可回滚的时间范围
确认系统的相关参数
sys@ora10g> show parameter undo
NAME TYPE VALUE
----------------- ---------- ----------------
undo_management string AUTO
undo_retention integer 2000
undo_tablespace string UNDOTBS1
3.10g的flashback table闪回特点
在线操作
恢复到指定时间点或者SCN的任何数据.
自动恢复相关属性,如索引,触发器等
满足分布式的一致性
满足数据一致性,所有相关对象将自动一致
4.Flashback Table语法
FLASHBACK TABLE tablename TO TIMESTAMP to_timestamp('2011-05-07 08:23:48','yyyy-mm-dd hh24:mi:ss');
FLASHBACK TABLE employee TO SCN 123456;
FLASHBACK TABLE t1 TO TIMESTAMP to_timestamp('2011-05-07 08:23:48','yyyy-mm-dd hh24:mi:ss'); ENABLE TRIGGERS;
5.闪回的前提条件
需要有flashback any table的系统权限或者是该表的flashback对象权限。
需要有该表的SELECT, INSERT, DELETE, ALTER权限
必须保证该表ROW MOVEMENT
6.实验内容及目的
使用flashback table闪回到之前某个时间点
验证flashback table不能够闪回被drop掉的索引
验证flashback table不能够闪回truncate的表内容
7.创建测试表
sec@ora10g> set time on
08:23:09 sec@ora10g> create table t1 as select * from dba_objects;
Table created.
08:23:13 sec@ora10g> create table t2 as select * from t1;
Table created.
08:23:19 sec@ora10g> select count(*) from t1;
COUNT(*)
----------
11413
08:23:30 sec@ora10g> select count(*) from t2;
COUNT(*)
----------
11413
08:23:34 sec@ora10g> create index inx_test1 on t1(object_name);
Index created.
08:23:40 sec@ora10g> create index inx_test2 on t1(object_id);
Index created.
08:23:43 sec@ora10g> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2011-05-07 08:23:48
8.模拟删除:删除表的索引,delete方式删除数据,truncate方式删除数据
08:24:11 sec@ora10g> drop index inx_test1;
Index dropped.
08:24:14 sec@ora10g> delete from t1;
11413 rows deleted.
08:24:24 sec@ora10g> commit;
Commit complete.
08:24:33 sec@ora10g> truncate table t2;
Table truncated.
08:24:38 sec@ora10g> select count(*) from t1;
COUNT(*)
----------
0
08:24:41 sec@ora10g> select count(*) from t2;
COUNT(*)
----------
0
9.Flashback Table闪回测试
08:24:45 sec@ora10g> alter table t1 enable row movement;
Table altered.
08:25:01 sec@ora10g> alter table t2 enable row movement;
Table altered.
08:25:04 sec@ora10g> flashback table t1 to timestamp to_timestamp('2011-05-07 08:23:48','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
08:26:09 sec@ora10g> flashback table t2 to timestamp to_timestamp('2011-05-07 08:23:48','yyyy-mm-dd hh24:mi:ss');
flashback table t2 to timestamp to_timestamp('2011-05-07 08:23:48','yyyy-mm-dd hh24:mi:ss')
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
08:26:22 sec@ora10g> select count(*) from t1;
COUNT(*)
----------
11413
08:26:34 sec@ora10g> select count(*) from t2;
COUNT(*)
----------
0
08:26:38 sec@ora10g> select index_name from user_indexes where table_name = 'T1';
INDEX_NAME
------------------------------
INX_TEST2
10.小结
使用flashback table可以将delete方式删除的表闪回到之前某个时间点。
flashback table功能不能够将被drop掉的索引恢复出来,因为drop索引的过程属于DDL操作,不记录undo信息。
flashback table功能不能够将被truncate的表内容恢复出来,原因也是truncate操作过程是不记录undo信息。
Good luck.
secooler
11.05.07
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2993859/
,如需转载,请注明出处,否则将追究法律责任。