Flashback Table(转)

闪回表

  1. SQL> conn u1/u1  
  2. 已连接。  
  3. SQL> select * from tab;        --现在有一张表  
  4.   
  5. TNAME                          TABTYPE  CLUSTERID  
  6. ------------------------------ ------- ----------  
  7. T                              TABLE  
  8.   
  9. SQL> create index t_i on t(id);       --创建一个索引  
  10.   
  11. 索引已创建。  
  12.   
  13. SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;       --可以看见索引的名字等相关信息  
  14.   
  15. INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME  
  16. ------------------------------ ------------------------------ ------------------------------ ------------------------------  
  17. T_I                            U1                             T                              TB1  
  18.   
  19. SQL> select * from recyclebin;       --回收站里面也没有记录  
  20.   
  21. 未选定行  
  22.   
  23. SQL> drop table t;                --删除表  
  24.   
  25. 表已删除。  
  26.   
  27. SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,TS_NAME from recyclebin;         --回收站里面记录了表和索引  
  28.   
  29. OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME  
  30. ------------------------------ -------------------------------- --------- ------------------------- ------------------------------  
  31. BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0 T_I                              DROP      INDEX                     TB1  
  32. BIN$r4kDwrE5wLHgQAB/AQAJ0A==$0 T                                DROP      TABLE                     TB1  
  33.   
  34. SQL> flashback table t to before drop;     --闪回表  
  35.   
  36. 闪回完成。  
  37.   
  38. SQL> select OBJECT_NAME,ORIGINAL_NAME,OPERATION,TYPE,TS_NAME from recyclebin;        --回收站里面没有记录了  
  39.   
  40. 未选定行  
  41.   
  42. SQL> select * from tab;               --表的找回来了  
  43.   
  44. TNAME                          TABTYPE  CLUSTERID  
  45. ------------------------------ ------- ----------  
  46. T                              TABLE  
  47.   
  48. SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;        --索引虽然找回来了,但名字不正确  
  49.   
  50. INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME  
  51. ------------------------------ ------------------------------ ------------------------------ ------------------------------  
  52. BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0 U1                             T                              TB1  
  53.   
  54. SQL> alter index "BIN$r4kDwrE4wLHgQAB/AQAJ0A==$0" rename to t_i;      --索引重命名  
  55.   
  56. 索引已更改。  
  57.   
  58. SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;          --现在名字对了  
  59.   
  60. INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME  
  61. ------------------------------ ------------------------------ ------------------------------ ------------------------------  
  62. T_I                            U1                             T                              TB1  

 

 重命名表名的闪回

 
  1. SQL> drop table t;  
  2.   
  3. 表已删除。  
  4.   
  5. SQL> flashback table t to before drop rename to test;  
  6.   
  7. 闪回完成。  
  8.   
  9. SQL> select * from tab;  
  10.   
  11. TNAME                          TABTYPE  CLUSTERID  
  12. ------------------------------ ------- ----------  
  13. TEST                           TABLE  
  14.   
  15. SQL> select * from test;  
  16.   
  17.         ID VALUE  
  18. ---------- ----------  
  19.          1 a  
  20.          2 b  
  21.          3 c  
  1. SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;  
  2.   
  3. INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME  
  4. ------------------------------ ------------------------------ ------------------------------ ------------------------------  
  5. BIN$r4kDwrE6wLHgQAB/AQAJ0A==$0 U1                             TEST                           TB1  
  6.   
  7. SQL> alter index "BIN$r4kDwrE6wLHgQAB/AQAJ0A==$0" rename to t_i;  
  8.   
  9. 索引已更改。  
  10.   
  11. SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes;  
  12.   
  13. INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME  
  14. ------------------------------ ------------------------------ ------------------------------ ------------------------------  
  15. T_I                            U1                             TEST                           TB1  

注意:对于同名的删除对象,如果使用FLASHBACK TABLE TBLNAMETO BEFORE DROP,则最先被删除的表最先被恢复。如果我们只想恢复最后删除的一张表,可以直接使用回收站里面的名字闪回

 

FLASHBACK TABLE "BIN$uA7I/R+VQUSPEBUyQk1xXQ==$0" TO BEFORE DROP;

 


从UNDO表空间中恢复

 
  1. SQL> select * from test;  
  2.   
  3.         ID VALUE  
  4. ---------- ----------  
  5.          1 a  
  6.          2 b  
  7.          3 c  
  8.   
  9. SQL> conn /as sysdba  
  10. 已连接。  
  11. SQL> select current_scn from v$database;  
  12.   
  13. CURRENT_SCN  
  14. -----------  
  15.      480981  
  16.   
  17. SQL> conn u1/u1  
  18. 已连接。  
  19. SQL> delete from test;  
  20.   
  21. 已删除3行。  
  22.   
  23. SQL> select * from test;  
  24.   
  25. 未选定行  
  26.   
  27. SQL> flashback table test to scn 480981;       --没有启动行移动  
  28. flashback table test to scn 480981  
  29.                 *  
  30. 第 1 行出现错误:  
  31. ORA-08189: 因为未启用行移动功能, 不能闪回表  
  32.   
  33.   
  34. SQL> select row_movement from user_tables where table_name = 'TEST';  
  35.   
  36. ROW_MOVE  
  37. --------  
  38. DISABLED  
  39.   
  40. SQL> alter table test enable row movement;    --启动行移动  
  41.   
  42. 表已更改。  
  43.   
  44. SQL> flashback table test to scn 480981;  
  45.   
  46. 闪回完成。  
  47.   
  48. SQL> select  * from test;  
  49.   
  50.         ID VALUE  
  51. ---------- ----------  
  52.          1 a  
  53.          2 b  
  54.          3 c  

注意:禁用表的行移动:alter table test disable row movement;

 

 

认识和管理Recycle Bin

SQL> show user  

  1. USER 为 "U1"  
  2. SQL> select * from recyclebin;      --查看回收站,每个用户都有一个回收站  
  3.   
  4. 未选定行  
  5.   
  6. SQL> conn /as sysdba  
  7. 已连接。  
  8. SQL> show parameter recyclebin         --是否启用回收站由这个参数决定  
  9.   
  10. NAME                                 TYPE        VALUE  
  11. ------------------------------------ ----------- ------------------------------  
  12. recyclebin                           string      on  
  13.   
  14. SQL> alter system set recyclebin = off;    --关闭回收站  
  15.   
  16. 系统已更改。  
  17.   
  18. SQL> alter system set recyclebin = on;        --启用回收站  
  19.   
  20. 系统已更改。  
  21.   
  22. SQL> conn u1/u1  
  23. 已连接。  
  24. SQL> drop table test purge;           --删除表时不放入回收站  
  25.   
  26. 表已删除。  
  27.   
  28. SQL> purge recyclebin;       --清空回收站  
  29.   
  30. 回收站已清空。  

用purge指定表:purge table test;
用purge指定表空间:purge tablespace users;

posted on 2013-03-29 17:20  kangxuebin  阅读(178)  评论(0)    收藏  举报

导航