zoukankan      html  css  js  c++  java
  • ORACLE Recyclebin管理及flashback recyclebin中的对象

    Flashback用于恢复用户误删除的对象(包括表,索引等), 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。
    故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。
    初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。

    SQL> show parameter recyclebin;
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    recyclebin string on

    禁用该功能:
    SQL> alter system set recyclebin=off;
    SQL> alter system set recyclebin=on;
    SQL> alter session set recyclebin=off;
    SQL> alter session set recyclebin=on;
    禁用后删除的对象将直接删除,不会写到Recycle中,当然在删除时,指定purge 参数,表也将直接删除,不会写到recyclebin中。
    SQL> drop table name purge; 

    表空间的Recycle Bin 区域只是一个逻辑区域,而不是从表空间上物理的划出一块区域固定用于回收站,因此Recycle Bin是和普通对象共用表空间的存储区域,或者说
    是Recycle Bin的对象要和普通对象抢夺存储空间。当发生空间不够时,Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。也可以手动的删除Recycle Bin占用的
    空间。
    1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin
    2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象
    3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象
    4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限
    5). Drop table table_name purge: 删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。
    6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引
    是可以重建的。
    7).PURGE TABLE TABLE_NAME; --删除回收站中指定对象
    或者使用其回收站中的名称:
    PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";

    ==============
    1、回收站不支持sys和system表空间下的对象

    SQL> show user;
    USER 为 "SYS"
    SQL> create table test as select * from scott.emp;
    
    表已创建。
    
    SQL> commit;
    
    提交完成。
    
    SQL> select * from test;
    
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
    1111 rusky dba 7839 2000 0 10
    7369 SMITH CLERK 7902 17-12月-80 800 20
    7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
    7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
    ……
    SQL> show parameter recyclebin;
    
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    recyclebin string on
    SQL> drop table test;
    
    表已删除。
    
    SQL> show recyclebin;
    SQL> select * from recyclebin; --sys用户删除的表不会进回收站
    
    未选定行

    2、普通用户使用flashback从回收站中还原删除的表

    SQL> show user;
    USER 为 "LXJ"
    SQL> create table test as select * from scott.emp;
    
    表已创建。
    
    SQL> commit;
    
    提交完成。
    
    SQL> drop table test;
    
    表已删除。
    
    SQL> show recyclebin;
    ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    TEST1 BIN$Pv0yCIwaS9W2iDnPvOM3bQ==$0 TABLE 2015-02-13:14:42:48
    SQL>

    --RECYCLEBIN NAME的命名规则为BIN$GUID$Version 其中GUID为GlobalUID,是一个全局唯一、24个字符长的标识对象,它是ORACLE内部使用的标识。 其中$version是ORACLE数据库分配的版本号。

    --还原回收站对象
    还原回收站被删除的表、索引等对象, 是通过Flashback Drop实现的。如下所示。

    SQL> flashback table test to before drop;
    
    闪回完成。

    --如果两个相同名字的表TEST被删除了,此时闪回被DROP的表TEST,实质是闪回最后一个被删除的表(后进先出原则),如果此时继续闪回操作就会报ORA-38312错误。
    SQL> flashback table test to before drop;
    flashback table test to before drop
    *
    ERROR at line 1:
    ORA-38312: original name is used by an existing object。

    此时可以在闪回过程中对表名进行重命名解决问题

    SQL> flashback table test to before drop rename to test2; --闪回到新的名字
    
    闪回完成。

    --如果回收站有两个被DROP掉的表TEST, 如果想闪回第一个被删除的表,直接指定RECYCLEBIN NAME进行闪回即可。

    SQL> show recyclebin;
    ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    TEST BIN$lTMSl/ObRsKNPJ4yanuhyQ==$0 TABLE 2015-02-13:15:24:34
    TEST BIN$5DYhICpRT9mWVJGsAumSaw==$0 TABLE 2015-02-13:14:49:42
    
    SQL> flashback table "BIN$lTMSl/ObRsKNPJ4yanuhyQ==$0" to before drop;

    Flashback Drop注意事项
    1:只能用于非系统表空间和本地管理的表空间。
    在系统表空间中,表对象删除后就真的从系统中删除了,而不是存放在回收站中。
    2:对象的参考约束不会被恢复,指向该对象的外键约束需要重建。
    3:对象能否恢复成功,取决于对象空间是否被覆盖重用。
    4:当删除表时,依赖于该表的物化视图也会同时删除,但是由于物化视图并不会放入recycle binzhong,因此当你执行flashback drop时,并不能恢复依赖其的物化视图。需要DBA手工重建。
    5:对于回收站(Recycle Bin)中的对象,只支持查询。不支持任何其他DML、DDL等操作。

  • 相关阅读:
    互联网产品跨部门沟通的10个原则(转)
    Axure 全局辅助线(转)
    2015最新移动App设计尺寸视觉规范【图文版】(转)
    iOS和Android的app界面设计规范(转)
    安卓app设计规范整理和Android APP设计篇(转)
    19条ANDROID平台设计规范(转)
    Objective-C编码规范:26个方面解决iOS开发问题(转)
    AxureRP7.0各类交互效果汇总帖(转)
    Windows Server 2016与旧版本系统比较
    application Initialization设置导致处理程序ExtensionlessUrlHandler-Integrated-4.0在其模块列表中有一个错误模块问题的解决
  • 原文地址:https://www.cnblogs.com/rusking/p/4290395.html
Copyright © 2011-2022 走看看