关于ORACLE11g的RECYCLE BIN测试

来源:这里教程网 时间:2026-03-03 11:46:10 作者:

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

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

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

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

    TEST@ r7>select table_name from user_tables where table_name =upper('zrd');
    TABLE_NAME
    ------------------------------
    ZRD

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

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

    删除表ZRD
    SQL>DROP TALBE ZRD;

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

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

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

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

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

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


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

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


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

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

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

    二、回收站功能详解
    Oracle10中增加的回收站的功能:
    1.查看所有与回收站有关的数据对象:
    TEST@ r7>SELECT T.OWNER,T.OBJECT_NAME,T.OBJECT_TYPE FROM ALL_OBJECTS T WHERE T.OBJECT_NAME LIKE '%RECYCLE%';
    OWNER OBJECT_NAME OBJECT_TYPE
    ------------------------------ ------------------------------ -------------------
    SYS RECYCLEBIN$ TABLE
    SYS RECYCLEBIN$_OBJ INDEX
    SYS RECYCLEBIN$_TS INDEX
    SYS RECYCLEBIN$_OWNER INDEX
    SYS USER_RECYCLEBIN VIEW
    PUBLIC USER_RECYCLEBIN SYNONYM
    PUBLIC RECYCLEBIN SYNONYM
    SYS DBA_RECYCLEBIN VIEW
    PUBLIC DBA_RECYCLEBIN SYNONYM
    9 rows selected.

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

    3.查看recycle视图的定义
    TEST@ r7>desc recyclebin;
     Name Null? Type
     ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
     OBJECT_NAME NOT NULL VARCHAR2(30)
     ORIGINAL_NAME VARCHAR2(32)
     OPERATION VARCHAR2(9)
     TYPE VARCHAR2(25)
     TS_NAME VARCHAR2(30)
     CREATETIME VARCHAR2(19)
     DROPTIME VARCHAR2(19)
     DROPSCN NUMBER
     PARTITION_NAME VARCHAR2(32)
     CAN_UNDROP VARCHAR2(3)
     CAN_PURGE VARCHAR2(3)
     RELATED NOT NULL NUMBER
     BASE_OBJECT NOT NULL NUMBER
     PURGE_OBJECT NOT NULL NUMBER
     SPACE NUMBER

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

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

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

    OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
    ------------------------------ -------------------------------- ------------------------- ------------------- -------------------

    6.恢复一个表:

    TEST@ r7>drop table a;
    Table dropped.

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


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

    TEST@ r7>select * from tab where tname='A';
    TNAME TABTYPE CLUSTERID
    ------------------------------ ------- ----------
    A TABLE

    7.不启用回收站:

    SQL> ALTER SESSION SET RECYCLEBIN=OFF;
    Session altered

    SQL> PURGE RECYCLEBIN;
    Done

    SQL> DROP TABLE A;
    Table dropped

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

    OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME CREATETIME
    ------------------------------ -------------------------------- ------------------------- ------------------- -------------------


    8.设置启用或关闭回收站
    SQL> ALTER SYSTEM SET RECYCLEBIN=OFF;
    System altered
    SQL> ALTER SYSTEM SET RECYCLEBIN=ON;
    System altered
    SQL> ALTER SESSION SET RECYCLEBIN=ON;
    Session altered

相关推荐