关于ORACLE11g的RECYCLE BIN测试


  1. 参考 https://www.cnblogs.com/chinhr/archive/2011/09/19/2181296.html 进行测试。

  2. 关于ORACLE11g的RECYCLE BIN使用
  3. ORACLE 11g中引入了RECYCLE BIN,好处就是当你删除了一张表或索引什么的后并不是完全删除,就像WINDOWS中的回收站一样,好处就是防止误删除,可以对误删除的表进行恢复,当然也可以清空RECYCLE BIN。

  4. 一、回收站功能测试
  5. RECYCLEBIN的基本概念
  6. 先建立一张表,名ZRD

  7. TEST@ r7>create table zrd(id int,name varchar(20));
  8. Table created.

  9. TEST@ r7>select table_name from user_tables where table_name =upper('zrd');
  10. TABLE_NAME
  11. ------------------------------
  12. ZRD

  13. 先清空回收站
  14. TEST@ r7>purge recyclebin;
  15. Recyclebin purged.

  16. TEST@ r7>select * from user_recyclebin;
  17. no rows selected

  18. 删除表ZRD
  19. SQL>DROP TALBE ZRD;

  20. 在回收站中查看生成的表
  21. TEST@ r7>select object_name from user_recyclebin;
  22. OBJECT_NAME
  23. ------------------------------
  24. BIN$Z2ptJ6PcRk6mJbM/0BmmAg==$0

  25. 发现有一个名为'BIN$Z2ptJ6PcRk6mJbM/0BmmAg==$0'的表,这个表就是ZRD表DROP掉以后在RECYCLE BIN内产生的表,RECYCLE BIN会以特殊的方法来保证每张被删除的表在RECYCLE BIN内的表名都不一样,即使在未被删除时表名是相同的。

  26. 如果想看被删除表的详细点的内容,可用
  27. TEST@ r7>show recyclebin;
  28. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
  29. ---------------- ------------------------------ ------------ -------------------
  30. ZRD BIN$V0GR7C9EG93gUwEAAH/a9Q==$0 TABLE 2017-08-21:07:28:00

  31. 或着
  32. TEST@ r7>SELECT ORIGINAL_NAME,OBJECT_NAME,TYPE,DROPTIME FROM USER_RECYCLEBIN;
  33. ORIGINAL_NAME OBJECT_NAME TYPE DROPTIME
  34. -------------------------------- ------------------------------ -------------------- -------------------
  35. ZRD BIN$V0GR7C9EG93gUwEAAH/a9Q==$0 TABLE 2017-08-21:07:28:00

  36. 也可以用
  37. TEST@ r7>DESC "BIN$V0GR7C9EG93gUwEAAH/a9Q==$0";
  38.  --来看被删除表的结构,注意要双引号!!这一句

  39. 现在对删除后表名的命名简单说一下:
  40. 当一个表被删除并移动到"回收站"中,它的名字要进行一些转换。这样的目的显而易见是为了避免同类对象名称的重复。(这一点和Windows操作系统的回收站不同,Windows中的回收站经过了特殊的处理,操作系统文件可以重名。)
  41. 转换后的名字格式如下:
  42. BIN$unique_id$version 其中BIN代表RecycleBin
  43. unique_id是数据库中该对象的唯一标志,26个字符长度
  44. version表示该对象的版本号


  45. 删除recyclebin中的对象
  46. 我们用PURGE,语句PURGE TABLE "TABLE_NAME";
  47. 注:双引不要忘记,对RECYCLEBIN中对象操作都要有""

  48. 如上例,则:
  49. TEST@ r7>purge table "BIN$V0GR7C9EG93gUwEAAH/a9Q==$0";
  50. TEST@ r7>purge recyclebin; --清空RECYCLEBIN;


  51. 恢复recyclebin中的对象
  52. 我们用FLASHBACK,中文名"闪回"
  53. 语句FLASHBACK TABLE [已删除TABLE名|"RECYCLEBIN中的名字"] TO BEFORE DROP;

  54. 如上例,则:
  55. TEST@ r7>flashback table zrd to before drop;
  56. Flashback complete.

  57. 但当你在RECYCLEBIN内有2张相同名字的表时候,只有通过"RECYCLEBIN中的名字"来闪回指定的表,用上面方法只闪回第一个被删除的同名表。

  58. 二、回收站功能详解
  59. Oracle10中增加的回收站的功能:
  60. 1.查看所有与回收站有关的数据对象:
  61. TEST@ r7>SELECT T.OWNER,T.OBJECT_NAME,T.OBJECT_TYPE FROM ALL_OBJECTS T WHERE T.OBJECT_NAME LIKE '%RECYCLE%';
  62. OWNER OBJECT_NAME OBJECT_TYPE
  63. ------------------------------ ------------------------------ -------------------
  64. SYS RECYCLEBIN$ TABLE
  65. SYS RECYCLEBIN$_OBJ INDEX
  66. SYS RECYCLEBIN$_TS INDEX
  67. SYS RECYCLEBIN$_OWNER INDEX
  68. SYS USER_RECYCLEBIN VIEW
  69. PUBLIC USER_RECYCLEBIN SYNONYM
  70. PUBLIC RECYCLEBIN SYNONYM
  71. SYS DBA_RECYCLEBIN VIEW
  72. PUBLIC DBA_RECYCLEBIN SYNONYM
  73. 9 rows selected.

  74. 2.查看回收站的东西: --仅仅列出OBJECT_NAME,ORIGINAL_NAME,TYPE,DROPTIME四列。
  75. TEST@ r7>show recyclebin;
  76. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
  77. ---------------- ------------------------------ ------------ -------------------
  78. ZRD BIN$V0GR7C9FG93gUwEAAH/a9Q==$0 TABLE 2017-08-21:07:39:27

  79. 3.查看recycle视图的定义
  80. TEST@ r7>desc recyclebin;
  81.  Name Null? Type
  82.  ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
  83.  OBJECT_NAME NOT NULL VARCHAR2(30)
  84.  ORIGINAL_NAME VARCHAR2(32)
  85.  OPERATION VARCHAR2(9)
  86.  TYPE VARCHAR2(25)
  87.  TS_NAME VARCHAR2(30)
  88.  CREATETIME VARCHAR2(19)
  89.  DROPTIME VARCHAR2(19)
  90.  DROPSCN NUMBER
  91.  PARTITION_NAME VARCHAR2(32)
  92.  CAN_UNDROP VARCHAR2(3)
  93.  CAN_PURGE VARCHAR2(3)
  94.  RELATED NOT NULL NUMBER
  95.  BASE_OBJECT NOT NULL NUMBER
  96.  PURGE_OBJECT NOT NULL NUMBER
  97.  SPACE NUMBER

  98. 4.详细查看具体的
  99. TEST@ r7>SELECT T.OBJECT_NAME,T.ORIGINAL_NAME,T.TYPE,T.DROPTIME,T.CREATETIME FROM RECYCLEBIN T;
  100. OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
  101. ------------------------------ -------------------------------- -------------------- ------------------- -------------------
  102. BIN$V0GR7C9FG93gUwEAAH/a9Q==$0 ZRD TABLE 2017-08-21:07:39:27 2017-08-21:07:24:50

  103. 5.清除一个表:
  104. TEST@ r7> PURGE TABLE "BIN$V0GR7C9FG93gUwEAAH/a9Q==$0==$0";
  105. Done

  106. 6.清除回收站:
  107. TEST@ r7> PURGE RECYCLEBIN;
  108. Done
  109. TEST@ r7> SELECT T.OBJECT_NAME,T.ORIGINAL_NAME,T.TYPE,T.DROPTIME,T.CREATETIME FROM RECYCLEBIN T;

  110. OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
  111. ------------------------------ -------------------------------- ------------------------- ------------------- -------------------

  112. 6.恢复一个表:

  113. TEST@ r7>drop table a;
  114. Table dropped.

  115. TEST@ r7>SELECT T.OBJECT_NAME,T.ORIGINAL_NAME,T.TYPE,T.DROPTIME,T.CREATETIME FROM RECYCLEBIN T;
  116. OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
  117. ------------------------------ -------------------------------- -------------------- ------------------- -------------------
  118. BIN$V0GR7C9FG93gUwEAAH/a9Q==$0 ZRD TABLE 2017-08-21:07:39:27 2017-08-21:07:24:50
  119. BIN$V0GR7C9GG93gUwEAAH/a9Q==$0 A TABLE 2017-08-21:07:43:23 2017-08-20:12:58:36


  120. TEST@ r7>flashback table a to before drop;
  121. Flashback complete.

  122. TEST@ r7>select * from tab where tname='A';
  123. TNAME TABTYPE CLUSTERID
  124. ------------------------------ ------- ----------
  125. A TABLE

  126. 7.不启用回收站:

  127. SQL> ALTER SESSION SET RECYCLEBIN=OFF;
  128. Session altered

  129. SQL> PURGE RECYCLEBIN;
  130. Done

  131. SQL> DROP TABLE A;
  132. Table dropped

  133. SQL> SELECT T.OBJECT_NAME,T.ORIGINAL_NAME,T.TYPE,T.DROPTIME,T.CREATETIME FROM RECYCLEBIN T;

  134. OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
  135. ------------------------------ -------------------------------- ------------------------- ------------------- -------------------


  136. 8.设置启用或关闭回收站
  137. SQL> ALTER SYSTEM SET RECYCLEBIN=OFF;
  138. System altered
  139. SQL> ALTER SYSTEM SET RECYCLEBIN=ON;
  140. System altered
  141. SQL> ALTER SESSION SET RECYCLEBIN=ON;
  142. Session altered

请使用浏览器的分享功能分享到微信等