想做个精简版本的数据库用于演示:
60G的表空间 删除了2亿多条业务记录(用的是DELETE删除记录表还在,因为直接dorp掉的话在导出时停在了“导出簇”这个地停了一宿没动),只留下了公共的记录。
导出后确实小了不少600M左右,但再次导入后(演示用机)发现还是需要很大的表空间。
是不是光DELETE没用?!还需要什么操作呢?!

解决方案 »

  1.   

    删除表的全部记录用 truncate table  table_name
      

  2.   

    delete 删除数据后,高水位线没有下降,也就是并没有真正释放空间
    使用truncate删除之后,再导出
      

  3.   

    另外,delete删除海量的数据,由于delete要写undo段,这样会很慢
    而truncate可以很快
      

  4.   

    truncate 可以在pl/sql 上用吗?~
      

  5.   

    truncate  很多表以后(原业务表,现记录为0)但之前如上所说的是用的delete,
    查看表空间使用率没有变化?
    不知是否已起作用?
      

  6.   

    肯这起作用的,你可以查看相应的表段所占用的空间,如,查看表table1
    SELECT t.BYTES / 1048576 "空间占用(M)" FROM user_segments t 
    WHERE t.segment_name = upper('table1');
      

  7.   

    1、删除表的全部记录用 
    truncate table 表名;
    2、如果使用delete table 需要commit;
      

  8.   

    应该用
    truncate table table_name
    command
      

  9.   

    to tangren
    查了下:正式用的库:
    SELECT t.BYTES / 1048576 "空间占用(M)" FROM user_segments t  
    WHERE t.segment_name = upper('AAA');
    3933
    测试的:
    3840
    .......(有业务记录差,忽略)我在测试库 执行了
    truncate table AAA;了....