Oracle中recyclebin的保留策略


我们知道,Oracle 10g引入了recyclebin的概念,当我们删除一个表的时候,若不指定purge,系统只是将这个表重命名为BIN$开头的名称,并在数据字典中修改相关的数据。

Administrator's Guide中是这么描述recyclebin的:recycle bin实际上是一个包含了删除的对象的相关信息的数据字典表。被删除的表以及相关的对象(比如索引、约束、嵌套表等等)并没有被移除,并且依然占用着空间。它们会继续使用用户的空间配额,直到明确将它们从回收站中清除,或者是另一种很少见的情况:由于表空间的空间限制,数据库必须将它们清除。

由此我们可以知道,在Oracle 10g以后,若启用了recyclebin功能,当你drop一个表的时候,它会仍然占用着原来的空间。

我们可以使用user_recyclebindba_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.bkjia.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
  • 下一页

相关内容