oracle回收站

SYS用户对象不能闪回

SYS用户是Oracle系统中的超级用户,肩负着执行数据库启动、关闭、备份管理职责。在对象控制上,SYS用户可以访问所有对象和数据。所以,一般都建议不要直接使用SYS进行实际日常DBA工作

在闪回这个问题上,SYS用户是受到限制的。下面我们使用SYS用户实验闪回特性。

SQL> conn / as sysdba;

已连接。

SQL> show user;

USER 为 "SYS"//确定是以sys用户登录的

SQL> create table t as select * from dba_objects;

表已创建。

SQL> select count(*) from t;

 COUNT(*)

----------

    50331

SQL> show parameter recyclebin;//当前开启的是闪回模式

 

NAME                     TYPE       VALUE

------------------------- ----------- -----------

recyclebin               string     on

SQL> drop table t;

表已删除。

SQL> show recyclebin;//没有闪回记录

SQL> select * from user_recyclebin;

未选定行

看来,当我们使用sys用户进行默认表空间(sys用户的默认表空间为system)数据表drop的时候,是不会被闪回的。Oracle内部也不支持这种操作。

那么,这种特点是针对SYS的呢?还是针对system表空间的呢?我们继续下面的实验,建立一张数据表在users表空间

-- Create table

create table t

(

 id number(10) not null

)

tablespace USERS

 storage

 (

   initial 64K

   minextents 1

   maxextents unlimited

 );

//准备数据

SQL> insert into t select object_id from dba_objects;

50331 rows inserted

SQL> commit;

Commit complete

//确认数据表所在的表空间

SQL> select table_name,tablespace_name from all_tables where owner='SYS' and table_name='T';

TABLE_NAME                    TABLESPACE_NAME

------------------------------ ------------------------------

T                             USERS

//删除数据表

SQL> drop table t;

表已删除。

//显示回收站

SQL> show recyclebin

ORIGINAL NAME   RECYCLEBIN NAME               OBJECT TYPE DROP TIME

--------------- ------------------------------ ------------ -------------------

T               BIN$kLlt43leRJGNWtQMB/yTaQ==$0 TABLE       2011-01-28:00:14:18

显然,闪回机制对system表空间数据表是不进行闪回的。

结论:使用sys用户的闪回要注意,当建立数据表是在system表空间下的时候,是不支持闪回特性的。

闪回表回收站——两个视图

使用方面,闪回特性还要关注两个回收站视图。all_recyclebin、dba_recyclebin。

all/user/dba三层结构,我们熟悉Oracle的朋友一定不会陌生。Oracle中大部分对象都提供了以这三个作为前缀的命名视图。三层的视图表示的都是一种类型对象,都是对元数据表的映射。

最低一个层次是user_视图,表示当前用户所属的schema下的对象。其次是all_视图是当前用户所能访问、具有访问权限的对象信息。对象的owner可能不是当前用户,但是因为具有访问权限,也是可能被访问到。最高的是dba_视图,通常只有DBA用户才能访问到该层面视图,常用来作为全局对象。

recyclebin系列视图也是类似的作用。视图中可以查询到回收站中的对象信息。

SQL> desc dba_recyclebin;

Name          Type        Nullable Default Comments                 

-------------- ------------ -------- ------- --------------------------------------------------------

OWNER         VARCHAR2(30)                 Name of the original owner of the object                

OBJECT_NAME   VARCHAR2(30)                 New name of the object   

ORIGINAL_NAME VARCHAR2(32) Y               Original name of the object  OPERATION     VARCHAR2(9) Y               Operation carried out on the object

TYPE          VARCHAR2(25) Y               Type of the object 

TS_NAME       VARCHAR2(30) Y       Tablespace Name to which object belongs

CREATETIME    VARCHAR2(19) Y           Timestamp for the creating of the object

DROPTIME      VARCHAR2(19) Y        Timestamp for the dropping of the object

DROPSCN       NUMBER      Y     SCN of the transaction which moved object to Recycle Bin

PARTITION_NAME VARCHAR2(32) Y               Partition Name which was dropped

CAN_UNDROP    VARCHAR2(3) Y               User can undrop this object     

CAN_PURGE     VARCHAR2(3) Y               User can purge this object     

RELATED       NUMBER                       Parent objects Obj#      

BASE_OBJECT   NUMBER                       Base objects Obj#        

PURGE_OBJECT  NUMBER                       Obj# for object which gets purged 

SPACE         NUMBER      Y               Number of blocks used by this object

注意其中几个字段:包括原对象名、现在对象名称、删除时间等。这些可以帮助我们了解到对象的回收机制。注意其中的canpurge和canundrop两个标志,表示当前这个回收站对象时候可以进行操作。

同时,我们注意到回收站视图中是没有all_视图的。这其实也比较好理解:回收站是属于对象所有者的回收站。建立回收站的目的是为了将删除的对象可以闪回,将对象闪回的权限,还是控制在对象原有所有者或者DBA用户手中比较好。

在回收站空间管理上,也要关注purge命令的使用。我们是可以直接对recyclebin使用purge命令的。相对于上面的命令格式,这种方式其实更加简单直接。

I    purge user_recyclebin;

II   purge dba_recyclebin;

SQL> select * from dba_recyclebin;

OBJECT_NAME                   ORIGINAL_NAME                   

----------------------------- ----------------

BIN$kLlt43leRJGNWtQMB/yTaQ==$0 T                              

(结果数据段有省略)

SQL> purge user_recyclebin;

Done

SQL> purge dba_recyclebin;

Done

SQL> select object_name, original_name from dba_recyclebin;

OBJECT_NAME    ORIGINAL_NAME

--------------- --------------------------------

//对象被清理

结论:使用dba_recyclebin和user_recyclebin可以比较容易的看到整个数据库和当前用户对象的回收站。

摘自:http://space.itpub.net/17203031/

 

1.在oracle中查看回收站内容

  SQL>show recyclebin

2.清空回收站内容

SQL>purge recyclebin

posted on 2013-08-19 16:32  newmanzhang  阅读(330)  评论(0编辑  收藏  举报

导航