我将一个表的的100多万条记录删除后,发现表空间的利用率并没有因此而减少.查了一些资料后了解到Oracle只是将这些行标记成了UNUSED.
现在想请教一下各位:
在我下次对该表进行INSERT操作时,Oracle是否会覆盖这些已被标记为UNUSED的空间?
谢谢!!!

解决方案 »

  1.   

    不会,delete不会回收空间,truncate可以回收空间
      

  2.   

    Oracle有一个最高水位标记,这个标记就是当前表最大扩展段,形象点说就像一个水桶的固定容量,所不同的是表是由多个extents组成,每增加或扩展一个extent,这个水位标记往上移动一个高位,其以下的空间就是数据空间容量.当delete操作时,只是把数据删除了,但不能使这个水位标记下降,但truncate表后,这些空间都会得到释放.也就是会让水位标记降到初始extent位.
    需要注意的是truncata是删除全表数据,而不能限制条件删除几条数据.以上只是一个形象的解释以助于理解oracle表数据的存储机制,详细了解需要参考相关文档。
      

  3.   

    楼主看一下truncate和delete的区别就明白了。