写一个存储过程,加入job,让其定时执行

解决方案 »

  1.   

    我现在是在程序中上自动删除的数据,删除的时候程序基本上没有响应。就像在sql*plus中删除大量数据一样,sql*plus也一样没反应。我想问的是:用job是否也会这样呢?
      

  2.   

    也是一样的,没办法,除非你删除数据时使用 truncate table 这样会快的多
      

  3.   

    在job中删除了数据,是否就会腾出硬盘空间呢?我在一般情况下,好像不行,用了归档日志,不断的占用硬盘空间,硬盘空间还越来越少了。怎么办呢?我想把回退段的空间摄制的最小,不用归档日志(用归档日志好像还有占用更多的硬盘空间阿?)该怎么做呢?
      

  4.   

    1、在一个有数千万条数据的表中删除满足条件的一条纪录和一万条纪录是否耗时一样呢?
    2、如果在job中删除数据,不知会不会影响到我的程序的运行呢?
      

  5.   

    如果trancate table的话,就删除了表中的全部数据. 而且不可以回滚.
    删除部分数据用delete .当然,删除一条数据和删除一万条数据的耗时是不一样的.
    用job删除数据,你把job删除数据的运行时间设置在夜里没人使用系统的时候来执行.这样不会对你的程序有影响了.
      

  6.   

    如果数据量相当大,类似于电信或移动的大型数据库,可以采用一天一个表的方式存储数据.表可以用基本名加日期字符来命名.如histable_0717等.建立366个表,循环使用.一般大型数据库中有每个表都有几千万的数据.
    如果要清空N个月前的数据,则清空N个月前的所有表.一般可在使用频率最低的时候自动执行JOB来TRUNCATE无用的表.TRUNCATE命令可以在极短的时间内完成清空工作,并且自动释放空间.
      

  7.   

    同意 atao245993(阿涛) 的意见,truncate清数据不会产生redo日志,所以不会增加归档日志
      

  8.   

    写存储过程,删除数据,然后做个JOB来定期执行过程.
      

  9.   

    atao245993(阿涛) 和dinya2003(OK) 的方法都可以,看你了。
     关键:要想自动,一定得用job。至于是否慢,是否影响他人工作,是否节约硬盘空间,那是另外一回事,你还可以采用其它不同的方法。但是job一定是要用的。
      

  10.   

    曾听说电信是用表来管每个月数据,正如楼上一位兄弟所说,当时与他们技术经理谈论此问题.
    也可以试用分区表办法,以日期为分区,一个月一个分区,用job把前n个月清空分区.