Oracle回收站管理

      当用户删除表时,数据库并不立即移出删除的表空间。数据库将表重命名,并将该表存储在回收站中,如果该表是意外被删除的,可以在以后将该表恢复为正常状态。这种功能叫做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基础,回收站)