我今天做了一个测试,利用存储过程把用户A下的所有表数据都清空了
(其中使用“truncate table 表名  DROP STORAGE”语句),
但是用户A所属的表空间大小没有任何变化?
什么原因?如何减小表空间大小呢?
请各位指点一二!小弟在此谢过!

解决方案 »

  1.   

    你把这个表空间所属的数据文件大小改一下就可以了。
    比如 TEMPSPACE这个表空间有TEMPFILE这个数据文件的话ALTER DATABASE DATAFILE TEMPFILE RESIZE 200M;
      

  2.   

    表空间大小跟表里面有没有数据无关。你要比对的是tablespace的used空间
      

  3.   

    修改大小:
    alter tablespace 表空间名 resize 大小
      

  4.   

    表空间大小肯定不变了,你truncate table后,free的表空间变大了
      

  5.   

    本帖最后由 inthirties 于 2010-10-22 09:52:52 编辑
      

  6.   

    --查看表空间利用率
    select a.tablespace_name, round(a.total_size) "total_size(MB)", 
    round(a.total_size)-round(b.free_size,3) "used_size(MB)", 
    round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate 
    from ( select tablespace_name, sum(bytes)/1024/1024 total_size 
           from dba_data_files 
           group by tablespace_name ) a, 
           ( select tablespace_name, sum(bytes)/1024/1024 free_size 
             from dba_free_space 
             group by tablespace_name ) b 
           where a.tablespace_name = b.tablespace_name(+); 
      

  7.   


    alter table tbname move 也可以实现 
      

  8.   

    oracle中,当我们建立一个表空间
    create tablespace tablespace_name 
    add datafile '....'的时候会指定一个大小,这个大小会跟随数据量的增长和表空间设为自动扩展而变大。一旦创建后不管里面有数据没大小都是不会变的,如果数据量增长了,表空间也会增长。