这样的工作我们通常称为house keeping,放在夜间批处理中执行是一种比较合适的方法。那样对delete操作的时间就不是很敏感,即使跑上半个小时也不会对系统有太大的影响。
至于数据块的碎片,应该在短期内影响不大,可以定期地执行重建表的工作以完全消除数据碎片,这也可以放在夜间批处理中执行,比如每个月执行一次。

解决方案 »

  1.   

    oracle中要完全清除到数据文件中的碎片,只能把表导出以后、删除到原表然后重建,通常是以表空间为单位执行的。如果表非常大,就比较麻烦:要保证服务器有足够的空间存储导出的数据。那样可能一个月执行一次重建表都显得太频繁了。
    至于重建表的操作过程,倒是非常简单:
    1、可以用exp/imp:exp整个表空间,drop掉表空间,重建生成表空间,然后imp
    2、用临时schema和表空间:建立一个临时用户和相应的表空间,把所有的表数据倒入临时schema中;删除掉原来的表,然后导回;最后清理到临时用户和临时表空间。这些工作挺繁复的,而且要非常小心,一定要dba的参与。
      

  2.   

    你那里都没有配备DBA吗?
    如果没有,那有没有这种需求?你看我可不可以当你们的DBA啊? :)
      

  3.   

    你那里都没有配备DBA吗?
    如果没有,那有没有这种需求?你看我可不可以当你们的DBA啊? :)
      

  4.   

    我们没有配备专门的DBA,管理一团糟:(
    我们这里缺Oracle高手,可惜我不是头,我要是的话,一定花重金礼聘弱水大哥过来,正好在高手的身边学习成长:)
    不过大哥你都要去瑞典了:(
      

  5.   

    我也这么作过,不过我的数据没有你的多,才10多G,也才保留半个月。
    呵呵,说的没有错,在半夜做,一般是没有问题的,
    你可以写成单独的过程,在job里调用它,关于碎片问题,也有合并碎片的命令,也可以写在过程中定期调用
    --------------
    你们真该要一个DBA,否则,你们的备份怎么办
      

  6.   

    对于一张大表,假设一个月有1亿条记录,那么一次性删除是很慢的。
    最好按某个条件分批删除,而这个条件(字段),最好建立了索引,那样
    删除的速度会比一次性删除快很多,这个我经历过的。至于由此产生的碎片,最好的方法是EXP/IMP,其次
    ALTER TABLESPACE也可以试试
      

  7.   

    ATCG(ATCG) 几天不见了!你好啊!
    我的最大的一张表,数据可能在6000万条左右,要删除的话,只删除一天,即200万条左右。但是,因为我有80个表,所以加起来,需要删除的数据还是很多:(
    我今天看了看Exp/Imp,上面说最大的导出文件大小为2G(我是Oracle8.0.6)。而且增量导出不是只导出修改部分的数据,而是导出整个表的定义和它的全部数据。因为我的所有表的数据每天都更新,所以我感觉增量导出和完全导出差不多:( 
      

  8.   

    删除数据量大那么回滚日志一定很大,我在Update时曾经出现过回滚段溢出的现象。是否有办法间删除数据的操作分作多个事务来执行呢?如在delete时xian 删除a-z的数据,然后再删除剩下的数据。注意,每个删除后边都需要commit or rollback!!!.
    还有就是,如果你的表中的数据不是很重要,就取消日志,但此方法不易轻易
    使用!!!
      

  9.   

    导出文件大小为2G???
    这不是oracle的规定,是操作系统的限制
      

  10.   

    penitent(只取一瓢) :你的数据库有10多G,你是怎么做备份的?
      

  11.   

    大量删除数据的办法:
    TRUNCATE TABLE
      

  12.   

    难题难题,我也说不好.
    也就是夜间删除,定时做数据库整理.
    alter table * deallocate unused,试试这个命令.释放表中未用空间.