我们知道,Oracle 10g引入了recyclebin的概念,当我们删除一个表的时候,若不指定purge,系统只是将这个表重命名为BIN$开头的名称,并在数据字典中修改相关的数据。Administrator"s Guide中是这么描述recyclebin的:recycle bin实际上是一个包含了删除的对象的相关信息的数据字典表。被删除的表以及相关的对象(比如索引、约束、嵌套表等等)并没有被移除,并且依然占用着空间。它们会继续使用用户的空间配额,直到明确将它们从回收站中清除,或者是另一种很少见的情况:由于表空间的空间限制,数据库必须将它们清除。由此我们可以知道,在Oracle 10g以后,若启用了recyclebin功能,当你drop一个表的时候,它会仍然占用着原来的空间。我们可以使用user_recyclebin或dba_recyclebin来查看回收站中的对象信息,或者使用recyclebin,它是user_recyclebin的公共同义词。文档中提到了,除了手动purge,这些回收站中的对象只有在表空间出现空间不足情况时才会被清除。我们可以做个测试(测试环境为RAC10.2.0.1+ASM)
新建一个表空间,给它20m的容量
- SQL> create tablespace test1 datafile size 20m;
-
-
- Tablespace created.
然后我们在这个表空间上创建一个测试表a
- SQL> create table w1.a tablespace test1 as select * from dba_objects;
-
- Table created.
-
- SQL> select owner,segment_name,round(bytes/1024/1024,2)||" MB" m from dba_segments where tablespace_name="TEST1";
-
- OWNER SEGMENT_NAME M
- ------------ ---------------------------------------------------------------------------------------
- W1 A 6 MB
-
- SQL>
一张表占用6M空间,我们再创建2张一样的测试表
- SQL> create table w1.b tablespace test1 as select * from dba_objects;
-
- Table created.
-
- SQL> create table w1.c tablespace test1 as select * from dba_objects;
-
- Table created.
-
- SQL> select round(sum(bytes)/1024/1024,2)||" MB" from dba_segments where tablespace_name="TEST1";
-
- ROUND(SUM(BYTES)/1024/1024,2)||"MB"
- -------------------------------------------
- 18 MB
此时表空间已经使用了18M。这时我们www.linuxidc.com把这三张表都删除
- SQL> drop table w1.a;
-
- Table dropped.
-
- SQL> drop table w1.b;
-
- Table dropped.
-
- SQL> drop table w1.c;
-
- Table dropped.
-
- SQL> select owner,object_name,original_name from dba_recyclebin where ts_name="TEST1";
-
- OWNER OBJECT_NAME
- ------------------------------ ------------------------------
- ORIGINAL_NAME
- --------------------------------
- W1 BIN$r6HZooW/xpzgQKjAb01Spw==$0
- B
-
- W1 BIN$r6HZooW+xpzgQKjAb01Spw==$0
- A
-
- W1 BIN$r6HZooXAxpzgQKjAb01Spw==$0
- C
-
- SQL> col owner format a4
- SQL> col segment_name format a35
- SQL> col m format a10
- SQL> select owner,segment_name,round(bytes/1024/1024,2)||" MB" m from dba_segments where tablespace_name="TEST1";
-
- OWNE SEGMENT_NAME M
- ---- ----------------------------------- ----------
- W1 BIN$r6HZooXAxpzgQKjAb01Spw==$0 6 MB
- W1 BIN$r6HZooW+xpzgQKjAb01Spw==$0 6 MB
- W1 BIN$r6HZooW/xpzgQKjAb01Spw==$0 6 MB
-
- SQL>
Oracle 组件和体系结构Oracle单行函数和多行函数实例相关资讯 Oracle数据库 Oracle入门教程 oracle数据库教程
- Oracle数据库全球化 (03月01日)
- Oracle数据库日期过滤方法性能比较 (02/02/2015 13:20:26)
- Oracle数据库安装中端口被占用问题 (10/29/2014 07:42:24)
| - 在CentOS 6.6上搭建C++运行环境并 (10/10/2015 19:44:40)
- Oracle数据库无法使用localhost和 (11/14/2014 16:39:10)
- 使用SQLT来构建Oracle测试用例 (08/28/2014 06:17:41)
|
本文评论 查看全部评论 (0)