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中如何使用Flashback Drop以及管理回收站

在Oracle11G中,当你删除一张表的时候,Oracle并不会立马就把这个表从数据库中移除,而是将该表与其相关的对象,比如建立在该表上的索引等改一个名字然后一起放在回收站当中.这个特性叫做Flash...
  • ziwen00
  • ziwen00
  • 2013年09月13日 10:13
  • 2378

oracle回收站

  • 2015年04月17日 09:01
  • 4KB
  • 下载

oracle10g回收站研究

  • 2012年06月17日 15:05
  • 16KB
  • 下载

oracle 删除表结构 及清空回收站

oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表。 1.查看回收站 select * from user_...

【Oracle】回收站

☆回收站概念 oracle从10g开始,引入回收站(Recycle Bin)概念。回收站的全称叫:Tablespace Recycle Bin。回收站是一个逻辑区域,oracle并没有为它分配物理空...

Oracle回收站解决误删除表

不小心使用drop table 语句把表删除了,数据也没有备份。就是数据备份了恢复的时候还是会丢失数据的,这时候不必太慌张,或许oracle的回收站(recyclebin)可以解决问题。   【使...

Oracle删除clob类型字段(回收站)

创建带clob字段的表的时候,系统自动分配一个存储clob的段,但是我把表drop掉之后,这个段怎么删除,占用的空间怎么释放? 现在看table_name变成BIN$V85cE6ZASiemcTBz/...

Oracle PURGE子句清除回收站中的对象

使用PURGE语句从回收站中清除表,索引,已删除的表空间或者整个回收站,并释放与对象关联的所有空间.PURGE语句不能回滚,清除以后也不能恢复. 查询 USER_RECYCLEBIN数据字典查阅回收站...

ORACLE 11.2.0.4版本EXPDP不会导出回收站中数据

结论: 在ORACLE 11.2.0.4版本数据库中,清理回收站与否,不影响EXPDP导出文件的大小-即EXPDP不会导出回收站中数据。 1.正常导出 SQL> select segme...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle回收站管理
举报原因:
原因补充:

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