技术开发 频道

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
相关文章