10g 新特性 Recyclebin 空间的自动清理
测试OS:windows2003
版 本:
SQL> select version from v$instance;
VERSION
-----------------
10.2.0.1.0
Oracle 10g中引入了Recyclebin的概念,删除的表或其他对象会像Windows中删除文件一样放入回收站(Recyclebin)中。你可以再从该回 收站中flashback 回被drop 的表. 可以从recyclebin ,user_recyclebin ,dba_recyclebin 中获得他们的相关信息。
一般情况下,我们使用 purge 命令来清理一些不再需要的表。
SQL> purge recyclebin; --清理当前用户下所有的回收站对象
SQL> purge table "BIN$VPoTvxPtQZuDABiSoxR8Mg==$0" ; --清理指定的表
前几天看到一篇文章上有一段说: "回收站中的对象其实也是一般的对象,只是它的信息要在recyclebin ,user_recyclebin ,dba_recyclebin 中去检索,它的生命周期也是一般对象一样的,oracle 不会自己去清理掉所谓ide回收站;"
这是不对的。Recyclebin中的表是不安全的!
放入Recyclebin中的表并不是永久存在的,当表空间被回收站数据完全占满,以至于必须扩展数据文件来容纳更多数据时,对象以先进先出的方式从回收站中自动清除。在删除表之前,相关对象(如索引)被删除。
(注意: 如果表空间 autoextent,会先自动清除,再扩展。你可以自己做个实验)
同样,空间压力可能由特定表空间定义的用户限额而引起。表空间可能有足够的空余空间,但用户可能将其在该表空间中所分配的部分用完了。在这种情况下,Oracle 自动清除该表空间中属于该用户的对象。
我们来做一个实验:
一、创建一个表空间和一个用户。
SQL> create tablespace testts datafile 'D:ORACLEPRODUCT10.2.0ORADATAMINGTESTTS.DBF' size 1M;
表空间已创建。
SQL> create user test identified by test default tablespace testts temporary tablespace temp;
用户已创建。
SQL> grant connect to test;
授权成功。
SQL> grant resource to test;
授权成功。
SQL> grant dba to test;
授权成功。
二、在表空间中创建表:
SQL> create table sysobj as select * from dba_tables;
表已创建。
SQL> select bytes from dba_segments where segment_name='SYSOBJ';
BYTES
----------
458752
SQL> create table sysobj2 as select * from dba_tables;
表已创建。
SQL> create table sysobj3 as select * from dba_tables;
create table sysobj3 as select * from dba_tables
*
第 1 行出现错误:
ORA-01652: 无法通过 8 (在表空间 TESTTS 中) 扩展 temp 段
三、因为这里空间只有1M,这时空间不够了,我们先删除一个表。
SQL> drop table sysobj2;
表已删除。
SQL> select * from recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------ -------------------------------- ---------
TYPE TS_NAME CREATETIME
------------------------- ------------------------------ -------------------
DROPTIME DROPSCN PARTITION_NAME CAN CAN
------------------- ---------- -------------------------------- --- ---
RELATED BASE_OBJECT PURGE_OBJECT SPACE
---------- ----------- ------------ ----------
BIN$PJ6U2b0JRVWgmdmQ7+5vXg==$0 SYSOBJ2 DROP
TABLE TESTTS 2008-07-13:23:43:50
2008-07-13:23:44:46 753663 YES YES
52838 52838 52838 56
四、再来创建表:
SQL> create table sysobj3 as select * from dba_tables;
表已创建。
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
SYSOBJ TABLE
SYSOBJ3 TABLE
五、这时我们可以看到,recyclebin中的表不见了,空间回收了!
SQL> select * from recyclebin;
未选定行
六、删除测试用户和表空间
(略)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/283894/viewspace-401174/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/283894/viewspace-401174/