zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ACM2023
    Archlinux系统运维
    Apache2配置腾讯云SSL证书
    奇异值分解SVD
    剑指offer-不用加减乘除做加法
    负载均衡与缓存
    leetcode简单题6
    python 函数
    Mac-常用命令与快捷键
    GOM通区插件-支持GOM绝对路径-读取配置项-分割字符等功能。不定期更新
  • 原文地址:https://www.cnblogs.com/newmanzhang/p/3267915.html
Copyright © 2011-2022 走看看