Oracle回收站管理

原创 2013年12月03日 16:33:04

      当用户删除表时,数据库并不立即移出删除的表空间。数据库将表重命名,并将该表存储在回收站中,如果该表是意外被删除的,可以在以后将该表恢复为正常状态。这种功能叫做Flashback Drop.

      注意,Flashback Drop使用回收站中的数据,而不是undo数据来恢复。

一.什么是回收站

     回收站实际上是一个数据字典表,其中包括有关删除对象的信息。删除的表和任何相关的对象,例如索引、约束和嵌套表都不会移出,并继续占有空间。它们的空间继续计算在用户空间的配额中,直到从回收站中指定清楚它们。与删除的表关联的空间并不能立即使用,但是会在数据字典视图DBA_FREE_SPACE中显示出来。当表空间的容量不足时,回收站中的对象会按照先进先出的原则真正删除。

    已删除的表仍可从回收站直接访问。

    一个用户可以使用如下语句查看回收站中属于他的对象:

    select * from recyclebin;

 

    与此不同,删除表空间、用户等时,其包含的对象不会放到回收站中,并且回收站中与之相关的对象也会被清除。

 

   当一个被删除的表移到回收站中时,该表和它的相关对象被赋予了一个系统生产的名称。这是为了避免出现对象名称冲突的情况:

  a.用户删除了一个表,并使用相同的名称重建,然后再次删除。

  b.两个用户使用相同的名称创建表,并且这两个用户都删除了各自的表。

 

  重命名进行如下转换:

 BIN$unique_id$version

* Unique_id 是一个具有26个字符的全局唯一标识符。构成回收站的这个名称在所有数据库中都是唯一的。

* Version是被数据库分配的一个版本号。

 

二. 打开和关闭回收站

     可以使用初始化参数RECYCLEBIN来打开和关闭回收站。

     打开回收站时,删除的表和它们依赖的对象被放置在回收站中。当回收站被关闭时,删除的表和他们的依赖对象不会放置到回收站中,这时必须使用其他方法来恢复被删除的表(如从备份中恢复)。

     回收站在默认情况下是打开的。

     查看回收站的状态:

SQL> show parameter recyclebin

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
recyclebin                           string      on

 

     关闭回收站:

    alter session set RECYCLEBIN=OFF;

    alter system set RECYCLEBIN=OFF;

    关闭回收站时不清除或者覆盖已经存在于回收站中的对象。

    打开回收站:

    alter session set RECYCLEBIN=ON;

    alter system set RECYCLEBIN=ON;

 

    同样,可以在文本初始参数文件initSID.ORA文件中设置RECYCLEBIN参数值,例如:

    RECYCLEBIN=ON

 

三. 查看和查询回收站中的对象

     Oracle提供了两个视图用于获取回收站中有关对象的信息:

   * user_recyclebin,该视图用于查询用户自己存放在回收站中的删除对象。该视图一个叫做recyclebin的同义词,这样可以更方便地使用。

   * dba_recyclebin,所有回收站中所有被删除的对象。

    使用这些视图可以确定被删除对象在数据库中的原始对象名称。

SQL> select object_name,original_name from dba_recyclebin where owner='CLD';

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$wVuaB6pPTrmd7e9AW41kcA==$0 TEST123
BIN$gZMy+ZOzROWBZFdTSY/mew==$0 TEST_LOAD
BIN$Vy0Km18eRySXhPlItJEeog==$0 TEST_LOAD
BIN$apn8tRlzTum3cU1o2s/slg==$0 WMR_GV641_ALL_TEMP
BIN$P7vwyQuQQjqsg4B/Hakpnw==$0 WMR_GV641_ALL

 

   还可以使用show recyclebin的sqlplus命令查看回收站的内容。

   可以查看回收站中的对象内容,但是,必须指定回收站中的对象名:

SQL> select * from  "BIN$gZMy+ZOzROWBZFdTSY/mew==$0";

        ID UNAME                PHONE
---------- -------------------- --------------------
         1 Amy                  0571-1234567
         2 Tom                  0571-7654311

 

四. 清除回收站中的对象

     如果用户决定永远不再恢复回收站中的对象,可以使用purge语句将回收站中的对象删除,并且释放这些对象所占用的空间。如果要删除这些项目,需要一些权限。

     使用purge语句去清除一个表时,可以使用回收站中的对象名称或该表原始的名称。例如:

     purge table BIN$gZMy+ZOzROWBZFdTSY/mew==$0;

     使用下面的语句可以完成相同的功能:

     purge table TEST_LOAD;

 

     还可以使用purge语句去清除存储在一个指定表空间中的、存储在回收站中所有的对象,或者清除只属于一个指定用户的对象。例如:

     purge tablespace example;

     purge tablespace example user oe;

 

     通过运行下面语句,用户可以清除回收站中属于他自己的对象,并释放对象的空间:

    purge recyclebin;

     如果用户具有sysdba权限,那么可以通过指定dba_recyclebin来清除整个回收站:

    purge dba_recyclebin;

 

  

   

整理自《Oracle数据库管理与优化宝典》

oracle 11g 回收站(recyclebin)的使用

Flashback是以undo segment中的内容为基础的,因此受限于undo_retenton参数,要使用flashback的特征,必须启动自动撤销表空间。               在or...
  • Dream19881003
  • Dream19881003
  • 2011年08月18日 23:46
  • 10151

清空Oracle回收站

oracle删除表结构及清空回收站 --查询回收站 SELECT t.object_name,t.type ,t.original_name FROM user_rec...
  • xiegh2014
  • xiegh2014
  • 2015年02月26日 17:27
  • 2453

Oracle清除回收站

Oracle清除回收站   2011-09-08 12:23:56|  分类: Oracle数据库 |字号 订阅 drop table tableName后,并不能完全清除空间,可以采用以...
  • czc411
  • czc411
  • 2013年02月20日 11:03
  • 2568

oracle11G 清空回收站方法

oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表。 1.查看回收站 select * from user_recycleb...
  • make_zhf
  • make_zhf
  • 2017年06月15日 14:03
  • 973

oracle操作之清空回收站

查看那些对象被删除至回收站:       select * from user_recyclebin; 清空回收站中的某个表:      purge table orgin_table_name;  ...
  • fycghy0803
  • fycghy0803
  • 2013年10月24日 21:46
  • 706

Oracle回收站操作

查看回收站是否开启: show parameter recyclebin; 系统级别开启/关闭回收站: ALTER  SYSTEM SET RECYCLEBIN=ON/OFF SCOPE=SPF...
  • ghostliming
  • ghostliming
  • 2016年03月12日 09:06
  • 1400

Oracle表的修改和删除以及回收站操作

一:表操作 create user learn_object identified by test; --给予权限 grant dba to learn_object; --创建表 crea...
  • t0404
  • t0404
  • 2016年07月01日 23:39
  • 505

Oracle回收站功能开启与关闭

转载地址:http://www.cnblogs.com/david-zhang-index/archive/2012/04/19/2457912.html Oracle10g以后增加了回收站...
  • GoodStudy2009
  • GoodStudy2009
  • 2015年02月02日 14:42
  • 908

oracle删除table不进回收站,清除当前用户的回收站

Oracle 回收站功能,彻底删除表 Oracle 10g 中出现表名:BIN$2cMp4FjwQ2Cw3Lj+BxLYTw==$0最近发现Oracle中出现了这些奇怪的表名,上网查找后发现是ora...
  • mikean
  • mikean
  • 2013年10月20日 12:06
  • 2108

通过Oracle的回收站恢复被删除的表

如果误drop了表,可以使用select * from user_recyclebinflashback [tablename] to before drop;但是,如果普通用户没有执行flashba...
  • fbysss
  • fbysss
  • 2010年09月09日 09:46
  • 2703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle回收站管理
举报原因:
原因补充:

(最多只允许输入30个字)