过着简单,真实的生活,喜欢收藏变形金刚(TFE,G1,SL系列),研究金融股市,KOF98,篮球,学习研究Oracle技术,我并不是一个全职的Oracle DBA,但是对于Oracle技术的热爱和研究,是一个不争的事实,愿意结交广大Oracle技术爱好者!MSN:oracle_kof_tf@hotmail.com

Oracle10g的recyclebin

上一篇 / 下一篇  2007-12-29 19:23:39 / 个人分类:Oracle数据库技术-数据库管理

做了个实验,发现建立在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> connhujinpei/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> connalan/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


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar