关于ORACLE11g的RECYCLE BIN测试
-
参考 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