Flashback Table(转)
闪回表
- SQL> conn u1/u1
- 已连接。
- SQL> select * from tab; --现在有一张表
- TNAME TABTYPE CLUSTERID
- ------------------------------ ------- ----------
- T TABLE
- SQL> create index t_i on t(id); --创建一个索引
- 索引已创建。
- SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes; --可以看见索引的名字等相关信息
- INDEX_NAME TABLE_OWNER TABLE_NAME TABLESPACE_NAME
- ------------------------------ ------------------------------ ------------------------------ ------------------------------
- T_I U1 T TB1
- SQL> select * from recyclebin; --回收站里面也没有记录
- 未选定行
- SQL> drop table t; --删除表
- 表已删除。
- SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,TS_NAME from recyclebin; --回收站里面记录了表和索引
- OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME
- ------------------------------ -------------------------------- --------- ------------------------- ------------------------------
- BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0 T_I DROP INDEX TB1
- BIN$r4kDwrE5wLHgQAB/AQAJ0A==$0 T DROP TABLE TB1
- SQL> flashback table t to before drop; --闪回表
- 闪回完成。
- SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,TS_NAME from recyclebin; --回收站里面没有记录了
- 未选定行
- SQL> select * from tab; --表的找回来了
- TNAME TABTYPE CLUSTERID
- ------------------------------ ------- ----------
- T TABLE
- SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes; --索引虽然找回来了,但名字不正确
- INDEX_NAME TABLE_OWNER TABLE_NAME TABLESPACE_NAME
- ------------------------------ ------------------------------ ------------------------------ ------------------------------
- BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0 U1 T TB1
- SQL> alter index "BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0" rename to t_i; --索引重命名
- 索引已更改。
- SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes; --现在名字对了
- INDEX_NAME TABLE_OWNER TABLE_NAME TABLESPACE_NAME
- ------------------------------ ------------------------------ ------------------------------ ------------------------------
- T_I U1 T TB1
重命名表名的闪回
- SQL> drop table t;
- 表已删除。
- SQL> flashback table t to before drop rename to test;
- 闪回完成。
- SQL> select * from tab;
- TNAME TABTYPE CLUSTERID
- ------------------------------ ------- ----------
- TEST TABLE
- SQL> select * from test;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- 3 c
- SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;
- INDEX_NAME TABLE_OWNER TABLE_NAME TABLESPACE_NAME
- ------------------------------ ------------------------------ ------------------------------ ------------------------------
- BIN$r4kDwrE6wLHgQAB/AQAJ0A==$0 U1 TEST TB1
- SQL> alter index "BIN$r4kDwrE6wLHgQAB/AQAJ0A==$0" rename to t_i;
- 索引已更改。
- SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;
- INDEX_NAME TABLE_OWNER TABLE_NAME TABLESPACE_NAME
- ------------------------------ ------------------------------ ------------------------------ ------------------------------
- T_I U1 TEST TB1
注意:对于同名的删除对象,如果使用FLASHBACK TABLE TBLNAMETO BEFORE DROP,则最先被删除的表最先被恢复。如果我们只想恢复最后删除的一张表,可以直接使用回收站里面的名字闪回
FLASHBACK TABLE "BIN$uA7I/R+VQUSPEBUyQk1xXQ==$0" TO BEFORE DROP;
从UNDO表空间中恢复
- SQL> select * from test;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- 3 c
- SQL> conn /as sysdba
- 已连接。
- SQL> select current_scn from v$database;
- CURRENT_SCN
- -----------
- 480981
- SQL> conn u1/u1
- 已连接。
- SQL> delete from test;
- 已删除3行。
- SQL> select * from test;
- 未选定行
- SQL> flashback table test to scn 480981; --没有启动行移动
- flashback table test to scn 480981
- *
- 第 1 行出现错误:
- ORA-08189: 因为未启用行移动功能, 不能闪回表
- SQL> select row_movement from user_tables where table_name = 'TEST';
- ROW_MOVE
- --------
- DISABLED
- SQL> alter table test enable row movement; --启动行移动
- 表已更改。
- SQL> flashback table test to scn 480981;
- 闪回完成。
- SQL> select * from test;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- 3 c
注意:禁用表的行移动:alter table test disable row movement;
认识和管理Recycle Bin
SQL> show user
- USER 为 "U1"
- SQL> select * from recyclebin; --查看回收站,每个用户都有一个回收站
- 未选定行
- SQL> conn /as sysdba
- 已连接。
- SQL> show parameter recyclebin --是否启用回收站由这个参数决定
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- recyclebin string on
- SQL> alter system set recyclebin = off; --关闭回收站
- 系统已更改。
- SQL> alter system set recyclebin = on; --启用回收站
- 系统已更改。
- SQL> conn u1/u1
- 已连接。
- SQL> drop table test purge; --删除表时不放入回收站
- 表已删除。
- SQL> purge recyclebin; --清空回收站
- 回收站已清空。
用purge指定表:purge table test;
用purge指定表空间:purge tablespace users;
posted on 2013-03-29 17:20 kangxuebin 阅读(178) 评论(0) 收藏 举报
浙公网安备 33010602011771号