问:
oracle drop掉一个表它所占用的数据块是不会被回收的,那用RMAN备份的时候不是会白白让费资源来备份这些逻辑上已经删除的数据吗,有没有什么办法能回收drop掉表所占用的空间呢
Rhys 答:
1)在数据库版本10.2.0.3之后,即使是使用的数据块,但是为空块,那么rman也不会进行备份。
2)对于回收站的解释:
对于11g 和10g oracle默认是开启回收站的功能的:(9i没环境不确定)
SYS@orcl#show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
recyclebin string on
SYS@orcl#
我们可以再nomount或是open状态改变是否需要打开
alter system set recyclebin=off scope=spfile;
当我们使用drop删除一个表的时候,并不是把这个表真正删除,而是把它放入了回收站,回收站对表的保留时间需要依据
该用户的默认表空间大小进行动态维持。
下面我做一个使用purge的实验,希望对你有帮助:
创建用户:
SYS@orcl#create user rhys identified by root default tablespace test quota 2M on test;
用户已创建。
SYS@orcl#create user lily identified by root default tablespace test quota 2M on test;
用户已创建。
SYS@orcl#grant create session to rhys;
授权成功。
SYS@orcl#grant resource to rhys;
授权成功。
SYS@orcl#grant create session,resource to lily;
授权成功。
SYS@orcl#
####创建表
RHYS@orcl#create table t as select * from scott.emp;
表已创建。
RHYS@orcl#select count(*) from t;
COUNT(*)
----------
16
提交完成。
RHYS@orcl#
RHYS@orcl#show recycle
RHYS@orcl#drop table t;
表已删除。
RHYS@orcl#show recycle
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$37gMKgN4rWzgQKjABIlC2A==$0 TABLE 2013-06-22:12:59:42
RHYS@orcl#create table t1 as select * from scott.emp;
表已创建。
RHYS@orcl#drop table t1;
表已删除。
RHYS@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$37gMKgN4rWzgQKjABIlC2A==$0 TABLE 2013-06-22:12:59:42
T1 BIN$37gMKgN5rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:00:12
RHYS@orcl#select * from "BIN$37gMKgN4rWzgQKjABIlC2A==$0";
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO SEX
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- --------------------
7369 SMITH hhhhh 7902 17-12月-80 3020 20 WOMEN
7499 ALLEN SALESMAN 7698 20-2月 -81 4820 300 30 WOMEN
7521 WARD SALESMAN 7698 22-2月 -81 4470 500 30 WOMEN
7566 JONES MANAGER 7839 02-4月 -81 4195 20 WOMEN
7654 MARTIN SALESMAN 7698 28-9月 -81 4470 1400 30 WOMEN
7698 BLAKE MANAGER 7839 01-5月 -81 4070 30 WOMEN
7782 CLARK hello 7839 09-6月 -81 3670 10 WOMEN
7788 SCOTT h 7566 19-4月 -87 422 20 WOMEN
7839 KING PRESIDENT 17-11月-81 5220 10 WOMEN
7844 TURNER hello 7698 08-9月 -81 4720 0 30 WOMEN
7876 ADAMS hello 7788 23-5月 -87 3320 20 WOMEN
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO SEX
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- --------------------
7000 MILLER hello 2000 23-1月 -82 3220 10 WOMEN
2000 rhys DBA 2000 01-5月 -13 3001 200 30 MEN
1000 xiaohai 20000 MEN
2003 xiao 2002 10 MEN
1113 BLAKE 2000 50 MEN
已选择16行。
RHYS@orcl#
####################删除用户下的某个表释放空间######
RHYS@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$37gMKgN4rWzgQKjABIlC2A==$0 TABLE 2013-06-22:12:59:42
T1 BIN$37gMKgN5rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:00:12
RHYS@orcl#purge table t;
表已清除。
RHYS@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T1 BIN$37gMKgN5rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:00:12
RHYS@orcl#
##################删除用户下的所有表释放空间##########
RHYS@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$37gMKgN6rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:03:38
T1 BIN$37gMKgN5rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:00:12
RHYS@orcl#purge tablespace test user rhys;
表空间已清除。
RHYS@orcl#show recyclebin
RHYS@orcl#
#################在drop表的时候指定purge彻底删除表并回收空间#######
RHYS@orcl#drop table rhys_t purge;
表已删除。
RHYS@orcl#show recyclebin
RHYS@orcl#
#################删除表空间中所有用户的表释放空间########
RHYS@orcl#drop table rhys_t;
表已删除。
RHYS@orcl#drop table rhys_t1;
表已删除。
RHYS@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
RHYS_T BIN$37gMKgN8rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:07:46
RHYS_T1 BIN$37gMKgN9rWzgQKjABIlC2A==$0 TABLE 2013-06-22:13:07:51
RHYS@orcl#
LILY@orcl#show recycle
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
LILY_T BIN$37gxey9KrYjgQKjABIlDLA==$0 TABLE 2013-06-22:13:10:09
LILY_T1 BIN$37gxey9LrYjgQKjABIlDLA==$0 TABLE 2013-06-22:13:10:13
LILY@orcl#
LILY@orcl#conn sys/root as sysdba;
已连接。
SYS@orcl#show recycle
SYS@orcl#purge tablespace test;
表空间已清除。
SYS@orcl#conn lily/root
已连接。
LILY@orcl#show recycle
LILY@orcl#conn rhys/root
已连接。
RHYS@orcl#show recycle
RHYS@orcl#
###################删除当前用户下的recyclebin######
RHYS@orcl#conn lily/root
已连接。
LILY@orcl#create table lily_t as select * from scott.emp ;
表已创建。
LILY@orcl#create table lily_t1 as select * from scott.emp;
表已创建。
LILY@orcl#drop table lily_t;
表已删除。
LILY@orcl#drop table lily_t1;
表已删除。
LILY@orcl#show recycle
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
LILY_T BIN$37hOKoIydnrgQKjABIlDcw==$0 TABLE 2013-06-22:13:18:10
LILY_T1 BIN$37hOKoIzdnrgQKjABIlDcw==$0 TABLE 2013-06-22:13:18:16
LILY@orcl#purge recyclebin
2 ;
回收站已清空。
LILY@orcl#show recycle
LILY@orcl#
################################删除所有用户下的recycle,需要使用dba权限#####
LILY@orcl#show recycle
LILY@orcl#create table lily_t as select * from scott.emp ;
表已创建。
LILY@orcl#create table lily_t1 as select * from scott.emp;
表已创建。
LILY@orcl#drop table lily_t;
表已删除。
LILY@orcl#drop table lily_t1;
表已删除。
LILY@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
LILY_T BIN$37hOKoI0dnrgQKjABIlDcw==$0 TABLE 2013-06-22:13:21:45
LILY_T1 BIN$37hOKoI1dnrgQKjABIlDcw==$0 TABLE 2013-06-22:13:21:50
SCOTT@orcl#select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------------------------------------
USERS
SCOTT@orcl#conn lily/root
已连接。
LILY@orcl#select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------------------------------------
TEST
LILY@orcl#conn scott/root
SCOTT@orcl#show recycle
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
SCOTT_T BIN$37hikMvxSS3gQKjABIlDig==$0 TABLE 2013-06-22:13:23:52
SCOTT_T1 BIN$37hikMvySS3gQKjABIlDig==$0 TABLE 2013-06-22:13:23:57
LILY@orcl#conn sys/root as sysdba
已连接。
SYS@orcl#purge dba_recyclebin;
DBA 回收站已清空。
SYS@orcl#conn lily/root
已连接。
LILY@orcl#show recyclebin;
LILY@orcl#conn scott/root;
已连接。
SCOTT@orcl#show recyclebin
SCOTT@orcl#
########################删除某个表空间下的用户的所有recyclebin回收空间##########
RHYS@orcl#show recycle
RHYS@orcl#create table rhys_t as select * from scott.emp;
表已创建。
RHYS@orcl#create table rhys_t1 as select * from scott.emp;
表已创建。
RHYS@orcl#drop table rhys_t;
表已删除。
RHYS@orcl#drop table rhys_t1;
表已删除。
RHYS@orcl#show recycle
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
RHYS_T BIN$37h1A4fBz5HgQKjABIlDoA==$0 TABLE 2013-06-22:13:29:02
RHYS_T1 BIN$37h1A4fCz5HgQKjABIlDoA==$0 TABLE 2013-06-22:13:29:06
RHYS@orcl#conn lily/root
SYS@orcl#purge tablespace test user rhys;
表空间已清除。
SYS@orcl#conn rhys/root
已连接。
RHYS@orcl#show recyclebin
RHYS@orcl#
RHYS@orcl#conn lily/root
已连接。
LILY@orcl#show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
LILY_T BIN$37h5bvHPAg7gQKjABIlDpA==$0 TABLE 2013-06-22:13:30:16
LILY_T1 BIN$37h5bvHQAg7gQKjABIlDpA==$0 TABLE 2013-06-22:13:30:19