Flashback Table!

来源:互联网 发布:网络英雄传2暗黑之门 编辑:程序博客网 时间:2024/05/24 04:27

闪回表

SQL> conn u1/u1已连接。SQL> select * from tab;        --现在有一张表TNAME                          TABTYPE  CLUSTERID------------------------------ ------- ----------T                              TABLESQL> 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                              TB1SQL> 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                     TB1BIN$r4kDwrE5wLHgQAB/AQAJ0A==$0 T                                DROP      TABLE                     TB1SQL> 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                              TABLESQL> 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                              TB1SQL> 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                           TABLESQL> 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                           TB1SQL> 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 cSQL> conn /as sysdba已连接。SQL> select current_scn from v$database;CURRENT_SCN-----------     480981SQL> 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--------DISABLEDSQL> 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 userUSER 为 "U1"SQL> select * from recyclebin;      --查看回收站,每个用户都有一个回收站未选定行SQL> conn /as sysdba已连接。SQL> show parameter recyclebin         --是否启用回收站由这个参数决定NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------recyclebin                           string      onSQL> 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;

原创粉丝点击