Oracle 10G 中的"回收站"
当一个表被删除并移动到"回收站"中,它的名字要进行一些转换.这样的目的显而易见是为了避免同类对象名称的重复.(Windows上,经过了特殊的处理,回收站里的操作系统文件可以重名.)
转换后的名字格式如下:
RB$$objn$object_type$version
其中的RB,代表Recycle Bin. objn为表的目录对象号. object_type表示对象类型. version表示版本号.由数据库指定。foo表被删除后,在数据库回收站里变成了RB$$41888$TABLE$0 。从名字可以看出,这个对象的类型是Table,Version是0.
SQL>; CREATE TABLE foo AS SELECT * FROM DUAL;
![]()
表已创建。
![]()
SQL>; SELECT table_name FROM user_tables;
![]()
TABLE_NAME
------------------------------
FOO
RB$$41888$TABLE$0
![]()
SQL>; DROP TABLE foo;
![]()
表已丢弃。
![]()
SQL>; SELECT object_name, original_name FROM user_recyclebin;
![]()
OBJECT_NAME ORIGINAL_NAME
-------------------- --------------------
RB$$41889$TABLE$0 FOO
RB$$41888$TABLE$0 FOO
能看出来,虽然源表名字相同,在回收站里的对象名字是不同的。
已经放到回收站里的表是不能用drop 命令删除的:
SQL>; drop table RB$$41888$TABLE$0;
drop table RB$$41888$TABLE$0
*
ERROR 位于第 1 行:
ORA-38301: can not perform DDL/DML over objects in Recycle Bin
![]()
如果要清掉改对象,使用purge命令:
![]()
SQL>; PURGE table RB$$41888$TABLE$0;
![]()
Table purged.
![]()
SQL>; SELECT object_name, original_name FROM user_recyclebin;
![]()
OBJECT_NAME ORIGINAL_NAME
-------------------- --------------------
RB$$41889$TABLE$0 FOO
![]()
对象已经清掉.
![]()
恢复表,使用Undrop命令.
![]()
SQL>; undrop table RB$$41889$TABLE$0;
![]()
Table undropped.
![]()
SQL>; SELECT object_name, original_name FROM user_recyclebin;
![]()
未选定行
![]()
SQL>; SELECT table_name FROM user_tables;
![]()
TABLE_NAME
------------------------------
RB$$41889$TABLE$0
![]()
SQL>; desc foo;
ERROR:
ORA-04043: 对象 foo 不存在
0
相关文章
