Windows Server 2003+Oracle 10g 
有一个表,每个月大概有一万行数据。
我现在需要每月定时备份和清理一年之前的历史数据。
各位高手请指教!一点不熟悉Oracle...
用的C#开发

解决方案 »

  1.   

    --1 、建立一个存储过程,转历史并删除,假设表名名:test,历史表:test_his(两表结构一样):如
    CREATE OR REPLACE PROCEDURE delhisdata AS
    BEGIN
      INSERT INTO test_his
        SELECT * FROM test WHERE ins_date < trunc(add_months(SYSDATE, -12));
      DELETE FROM test t WHERE ins_date < trunc(add_months(SYSDATE, -12));
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        ROLLBACK;
    END;
    /
    --1、数据库中建立一个JOB对存储过程进行调用,并且每月执行一次,
    DECLARE
      jobno NUMBER;
    BEGIN
      DBMS_JOB.SUBMIT(JOB       => jobno, /*自动生成JOB_ID*/
                      WHAT      => 'delhisdata;', /*需要执行的过程或SQL语句*/
                      NEXT_DATE => TRUNC(SYSDATE + 1) + 2 / 24, /*初次执行时间*/
                      INTERVAL  => 'TRUNC(add_months(SYSDATE,1))+2/24'); /*执行周期*/
      COMMIT;
    END;
    /
      

  2.   


    写个存储过程, 然后用该存储过程制定JOB。 定期执行就可以了。 具体存储过程和JOB语法,google 有很多。 
      

  3.   

    1.写个清理历史数据的存储过程(最好不局限于单表,形成数据清理机制。第一次清理如果数据量过大,delete数据的时候可能有回滚段不足而清理不成功的问题。建议通过循环分批提交)
    2.定个JOB定制执行该存储过程
      

  4.   

    创建个存储过程,然后使用job定时器定时删除!
      

  5.   

    先写个删除数据的过程,然后通过job来定时调用过程
    job详解
      

  6.   

    楼主正解,写个job来定时,用过程调下就OK
    job定时: