1.清除数据使用truncate table
2.重新分析此表更新数据字典,或者直接删掉此表重建。

解决方案 »

  1.   

    The high_water  was not reset.
      

  2.   

    DELETE纪录不会自动清空表空间中的存储信息,比如HIGH WATERMARK之类会对将来的操作带来副作用。频繁的添加、删除大量的纪录可能会导致表空间存储参数的变化从而影响性能。如果表中的数据是每天完全清空的话,用TRUNCATE TABLE代替DELETE,性能会好很多,因为TRUNCATE不使用回滚段。另外定期地做表空间的SHRINK也有助于保持表空间中连续的存储空间。
      

  3.   

    每天晚上12点清除该表的记录是通过事务自动执行delete完成的,不适合每天都重建,另外为了加快添加速度,该表没有建立索引。我怀疑是表空间碎片的问题引起的,但又不知如何整理oracle的表空间碎片。
      

  4.   

    我觉得这个多数是由于High_water引起的。至于碎片的整理,最有效的是把表exp,删除,然后imp。
    也可以把各个表空间的pctincrease设置成非零,让oracle自动收集碎片。
      

  5.   

    在外部执行 truncate table 后,访问速度较快,
    在存储过程当中不可执行 truncate table 语句 ,如何解决?
      

  6.   

    to icesummit(icesummit)  
    说具体点。
      

  7.   

    v_sql:='truncate table tname;'
    execute immediate;
      

  8.   

    下面是我的程序:    -- After successfully insert the data into T_A_ tables, the temporary T_U_ tables should be truncated.
        v_cur := DBMS_SQL.OPEN_CURSOR;    FOR V_TABLE IN C_TU_TABLE LOOP
        sql_stmt := 'TRUNCATE TABLE ' || V_TABLE.TABLE_NAME;
        DBMS_SQL.PARSE(v_cur,sql_stmt,DBMS_SQL.NATIVE);
        v_int := DBMS_SQL.EXECUTE(v_cur);
        COMMIT;
        END LOOP;
     
        DBMS_SQL.CLOSE_CURSOR(v_cur);
      

  9.   

    execute immediate 要oracle 8i以上才支持,我的是Oracle8.0.6
      

  10.   

    纠正一下:v_sql:='truncate table tname' ;   
    execute immediate v_sql ;搞定,多谢各位!
      

  11.   

    为什么一定要写成过程、一定要放在Oracle内部执行呢?
    我们系统中有大量的批处理过程,都是脚本文件,用操作系统任务来调度(比如UNIX下的CRON),用SQLPLUS USER/PASSWORD @MYJOB的方式定时执行各种各样的脚本。那样建表、建索引等DDL操作都可以放在PL/SQL之外运行。
    说实话,只要业务逻辑合理,没有什么是不能完成的。