從Oracle10g開始,Oracle引入了flashback drop的新特性,這個新特性,允許你從當(dāng)前數(shù)據(jù)庫中恢復(fù)一個被drop了的對象。在執(zhí)行drop操作時,現(xiàn)在Oracle不是真正刪除它,而是將該對象自動將放入回收站。對于一個對象的刪除,其實(shí)僅僅就是簡單的重令名操作。
所謂的回收站,是一個虛擬的容器,用于存放所有被刪除的對象。在回收站中,被刪除的對象將占用創(chuàng)建時的同樣的空間,你甚至還可以對已經(jīng)刪除的表查詢,也可以利用flashback功能來恢復(fù)它, 這個就是flashback drop功能。
這個功能雖然可以極大的簡化誤drop導(dǎo)致的恢復(fù)操作,但是長時間的積累可能會導(dǎo)致大量的空間占用(雖然Oracle具有自己的清理機(jī)制),很多時候我們需要手工介入去清理回收站。本文主要介紹清理回收站的幾種方法.
1.大量累計的空間占用
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0
OWNER OBJECT_NAME CREATETIME DROPTIME 750 rows selected SQL> |
2.不同用戶在回收站的對象
SQL> select owner,count(*) from dba_recyclebin group by owner; OWNER COUNT(*) 6 rows selected. |
3.我們可以指定刪除某些特定對象
SQL> purge table common.T_SERVICE_CODE_INFO; Table purged. |
4.指定清除某個表空間的所有回收站對象
SQL> purge tablespace common; Tablespace purged. SQL> select owner,count(*) from dba_recyclebin group by owner; OWNER COUNT(*) |
5.以SYSDBA身份可以清除所有回收站對象
SQL> purge dba_recyclebin; DBA Recyclebin purged. SQL> select owner,count(*) from dba_recyclebin group by owner; no rows selected |
6.禁用recyclebin
如果我們不希望使用Oracle的recyclebin,可以通過參數(shù)禁用這個特性。
在Oracle10gR1中,通過修改一個隱含參數(shù):_recyclebin 為False可以禁用這個特性:
SQL> set linesize 132 NAME VALUE ISDEFAULT ISMOD ISADJ 1 row selected. |
在Oracle10gR2中,recyclebin變成了一個常規(guī)參數(shù),可以在session/system級動態(tài)修改:
[oracle@danaly ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 12 15:34:56 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> show parameter recyclebin NAME TYPE VALUE SQL> alter session set recyclebin=off; Session altered. SQL> alter session set recyclebin=on Session altered. SQL> alter system set recyclebin=off; System altered. SQL> alter system set recyclebin=on; System altered. |