为什么无论删除或者上传之后并且已经COMMIT,表空间的大小还没有变呢?
跟ORACLE的回收机制有关系吗?

解决方案 »

  1.   

    你想表达什么意思呢?如果不对表空间进行扩展或增加数据文件,其大小是不会改因为插入入数据或delete数据而改变的.
    dba_free_space查看空闲空间.
      

  2.   

    BLOB在数据库中单独存放于一个segment中,其segment_name可以从表user_lobs中对应表名和列名得到select segment_name from user_lobs where table_name = yourtable and column_name = blobname;删除blob不会使段收缩,所以segment不会有变化,但是插入数据会使segment增大,具体的segment大小可以从视图
    user_segments中得到SELECT bytes/1024/1024 FROM USER_SEGMENTS WHERE segment_name=blobsegmentname;表空间包含了一个个的segment,如果其中所有的segment大小之和达到了表空间的大小,表空间没有多余的空间容纳数据了,这时就到扩大表空间,
    可以增加数据文件,也可以扩大文件的大小。另外表空间也可以认为自动扩展的,在有空间需要时它会自动扩展,不用手工修改。
      

  3.   

    一楼和三楼的兄弟说的东西,我都明白.
    BLOB的表空间已经分配好了.假如说是2G.
    每次上传BLOB文件,ORACLE都会分配SEGMENT存储文件.这个时候2G空间的实际使用量变化了.但是你删除了这个BLOB文件,分配的空间不会被回收!使用的空间还是那么大,下次上传文件只要没有超过已经分配的这个量,它老是不变。只有超过这个SEGMENT的最大值,表空间使用量才会跟着增加!那位达人能给我讲讲,这块的东西我了解的比较少!这个是和ORACLE的回收机制有关吗?