ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle10g的recyclebin

Oracle10g的recyclebin

原创 Linux操作系统 作者:oracle_ace 时间:2007-12-29 19:23:39 0 删除 编辑

做了个实验,发现建立在system上的对象是无法真正入recyclebin的。所以一般来讲sysdba的用户所drop的table是无法用flashback table t to before drop命令恢复的。

下面是实验:
首先以sysdba建立两个用户并赋予相应的权限
C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 12月 29 19:26:45 2007

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

SQL> conn / as sysdba;
已连接。
SQL> create user hujinpei identified by passw0rd default tablespace users;

用户已创建。

SQL> create user alan identified by passw0rd default tablespace system;

用户已创建。

SQL> grant connect,resource,dba to hujinpei;

授权成功。

SQL> grant connect,resource,dba to alan;

授权成功。

以hujinpei用户登陆另外一个session

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 12月 29 19:29:55 2007

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

SQL> conn hujinpei/passw0rd@irmdb
已连接。
SQL> create table t ( id int);

表已创建。

SQL> select object_name,original_name from recyclebin;

未选定行

SQL> drop table t;

表已删除。

SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$Phso2StdTrq+wh642whvUA==$0 T

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$Phso2StdTrq+wh642whvUA==$0 TABLE        2007-12-29:19:30:24
SQL> desc t;
ERROR:
ORA-04043: 对象 t 不存在


SQL> flashback table t to before drop;

闪回完成。

SQL> desc t;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

我们可以看到表在drop的时候进入了recyclebin,并且可以恢复了。

那如果我再以alan用户登陆新的session做同样的试验。
C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 12月 29 19:34:07 2007

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

SQL> conn alan/passw0rd@irmdb
已连接。
SQL> create table t ( id int );

表已创建。

SQL> select object_name,original_name from recyclebin;

未选定行

SQL> drop table t;

表已删除。

SQL> select object_name,original_name from recyclebin;

未选定行

SQL> flashback table t to before drop;
flashback table t to before drop
*
第 1 行出现错误:
ORA-38305: 对象不在回收站中

原因是alan用户创建的对象都在system表空间中。因此无法回收。

针对recyclebin的维护
比如
purge table table_name
purge recyclebin
等等有很多。

另外通过查询
SQL> select object_name,object_type from dba_objects
  2  where object_name='RECYCLEBIN';

OBJECT_NAME
----------------------------------------------------------
OBJECT_TYPE
-------------------
RECYCLEBIN
SYNONYM

知道recyclebin是个同意词,那么他的源是什么呢?继续查询
SQL> select synonym_name,table_name from dba_synonyms where synonym_name='RECYCLEBIN';

SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------
RECYCLEBIN                     USER_RECYCLEBIN

这回我们就知道了,user_recyclebin就是recyclebin公用同意词的源。

后面的信息只是留用观察,供参考:
SQL> select synonym_name,table_name from dba_synonyms where synonym_name='USER_RECYCLEBIN';

SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------
USER_RECYCLEBIN                USER_RECYCLEBIN

SQL> select synonym_name,table_name from dba_synonyms where synonym_name='USER_TABLES';

SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------
USER_TABLES                    USER_TABLES

SQL> select synonym_name,table_name from dba_synonyms where synonym_name='V$SESSION';

SYNONYM_NAME                   TABLE_NAME
------------------------------ ------------------------------
V$SESSION                      V_$SESSION

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12361284/viewspace-61766/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    284
  • 访问量
    788868