ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Flashback】Flashback Table功能实践

【Flashback】Flashback Table功能实践

原创 Linux操作系统 作者:secooler 时间:2011-05-07 21:36:14 0 删除 编辑
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博客 ” ,链接:http://blog.itpub.net/519536/viewspace-588847/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8011353