如何定时清理历史数据。

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

10 个解决方案

#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


procedure+job

#7


嗯,procedure+job

2樓強 如何定时清理历史数据。

#8


引用 7 楼 bubblekitty 的回复:
嗯,procedure+job

2樓強

呵呵,糾正下,是1樓沙發上的同學強,連代碼都有~

#9


楼主正解,写个job来定时,用过程调下就OK
job定时:
如何定时清理历史数据。

#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


procedure+job

#7


嗯,procedure+job

2樓強 如何定时清理历史数据。

#8


引用 7 楼 bubblekitty 的回复:
嗯,procedure+job

2樓強

呵呵,糾正下,是1樓沙發上的同學強,連代碼都有~

#9


楼主正解,写个job来定时,用过程调下就OK
job定时:
如何定时清理历史数据。