我有一张大数据量的表,如果我用delete删除所有数据,表空间没有释放标记为unused,但是我再insert的时候,新插入的数据会照样使用unused的空间,理论上这没什么问题,为什么要用truncate来释放表空间,有什么特别的深意吗,另外如果我这个表空间是自动扩展的,我的数据量超出了初始的表空间大小后自动扩展了300m那么我有trancate表后扩展的表空间时候也自动释放掉了,烦劳高手给指点一下,谢谢!!!

解决方案 »

  1.   

    参见http://community.csdn.net/Expert/topic/5324/5324261.xml?temp=.9401667
    跟你问的问题一样
      

  2.   

    我看过那个帖子了,我主要是不知道具体truncate命令有什么好处,释放了表空间和把表空间标记为unused 有什么区别
      

  3.   

    truncate主要用于清空表,降低表存储高水位标记,释放存储空间,当下次存储数据时,将重新分配存储扩展段。
      

  4.   

    如果我用delete 删除一个表中的数据后想把自动扩展的标空间释放,也就是达到truncate的效果需要怎么办,有这方面的命令吗,我用analyze命名没起作用,谢谢!!!
      

  5.   

    delete再怎么处理,也达不到truncate释放空间的功能吧...
    你能够使用delete还不错啦,我遇到的问题,似乎是高水标记在涨,但是我又必须保留记录,而且明显占用空间多一倍多,所以只能1、2个月就备份数据到别处,drop本地表,再还原备份...
      

  6.   

    一方面是执行效率高,truncate是删除表中的所有记录,并且这个操作不能撤销回滚,所以一旦执行,数据立即清除,且能释放表空间
      

  7.   

    bierbin(bierbin)  我其实也主要是关注这个问题,因为有些大表经常会有大批数据的变动,可能会使高水位不断上升,但是这些数据又不能删除需要一直保留着,所以想如果有什么命令可以释放一下表空间比较方便,另外如果不释放表空间有什么太大影响吗,如果我的表空间不自动扩展,而且100%都是unused状态这样在做一些操作时会抱错吗
      

  8.   

    我是遇到了表空间满了,异常,才开始被迫转移那部分数据。
    因为那块的数据,每晚要执行160万次以上的update,执行效率是通过绑定变量来优化的,但是无法解决高水标记的问题。
    幸运的是,我那部分数据,目前客户很少使用,所以我隔1个多月折腾一次的时间还有,要是实时应用,确实会很麻烦。
    你可以去查查high water  高水标记  相关的一些东西,看看有没有帮助,或者去itpub cnoug 等Oracle论坛请教一下高人们。