Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中recyclebin的保留策略

我们知道,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的容量
  1. SQL> create tablespace test1 datafile size 20m;  
  2.   
  3.   
  4. Tablespace created.  
然后我们在这个表空间上创建一个测试表a
  1. SQL> create table w1.a tablespace test1 as select * from dba_objects;  
  2.   
  3. Table created.  
  4.   
  5. SQL> select owner,segment_name,round(bytes/1024/1024,2)||" MB" m from dba_segments where tablespace_name="TEST1";  
  6.   
  7. OWNER SEGMENT_NAME M  
  8. ------------ ---------------------------------------------------------------------------------------   
  9. W1 A 6 MB  
  10.   
  11. SQL>  
一张表占用6M空间,我们再创建2张一样的测试表
  1. SQL> create table w1.b tablespace test1 as select * from dba_objects;  
  2.   
  3. Table created.  
  4.   
  5. SQL> create table w1.c tablespace test1 as select * from dba_objects;  
  6.   
  7. Table created.  
  8.   
  9. SQL> select round(sum(bytes)/1024/1024,2)||" MB" from dba_segments where tablespace_name="TEST1";  
  10.   
  11. ROUND(SUM(BYTES)/1024/1024,2)||"MB"  
  12. -------------------------------------------   
  13. 18 MB  
此时表空间已经使用了18M。这时我们www.linuxidc.com把这三张表都删除
  1. SQL> drop table w1.a;  
  2.   
  3. Table dropped.  
  4.   
  5. SQL> drop table w1.b;  
  6.   
  7. Table dropped.  
  8.   
  9. SQL> drop table w1.c;  
  10.   
  11. Table dropped.  
  12.   
  13. SQL> select owner,object_name,original_name from dba_recyclebin where ts_name="TEST1";  
  14.   
  15. OWNER OBJECT_NAME  
  16. ------------------------------ ------------------------------   
  17. ORIGINAL_NAME  
  18. --------------------------------   
  19. W1 BIN$r6HZooW/xpzgQKjAb01Spw==$0  
  20. B  
  21.   
  22. W1 BIN$r6HZooW+xpzgQKjAb01Spw==$0  
  23. A  
  24.   
  25. W1 BIN$r6HZooXAxpzgQKjAb01Spw==$0  
  26. C  
  27.   
  28. SQL> col owner format a4  
  29. SQL> col segment_name format a35  
  30. SQL> col m format a10  
  31. SQL> select owner,segment_name,round(bytes/1024/1024,2)||" MB" m from dba_segments where tablespace_name="TEST1";  
  32.   
  33. OWNE SEGMENT_NAME M  
  34. ---- ----------------------------------- ----------   
  35. W1 BIN$r6HZooXAxpzgQKjAb01Spw==$0 6 MB  
  36. W1 BIN$r6HZooW+xpzgQKjAb01Spw==$0 6 MB  
  37. W1 BIN$r6HZooW/xpzgQKjAb01Spw==$0 6 MB  
  38.   
  39. SQL>  
  • 1
  • 2
  • 下一页
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)
表情: 姓名: 字数