有一个表,每个月大概有一万行数据。
我现在需要每月定时备份和清理一年之前的历史数据。
各位高手请指教!一点不熟悉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定制执行该存储过程
2.定个JOB定制执行该存储过程
#4
创建个存储过程,然后使用job定时器定时删除!
#6
procedure+job
#7
嗯,procedure+job
2樓強
2樓強
#8
呵呵,糾正下,是1樓沙發上的同學強,連代碼都有~
#9
楼主正解,写个job来定时,用过程调下就OK
job定时:
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定制执行该存储过程
2.定个JOB定制执行该存储过程
#4
创建个存储过程,然后使用job定时器定时删除!
#5
先写个删除数据的过程,然后通过job来定时调用过程
job详解
job详解
#6
procedure+job
#7
嗯,procedure+job
2樓強
2樓強
#8
呵呵,糾正下,是1樓沙發上的同學強,連代碼都有~
#9
楼主正解,写个job来定时,用过程调下就OK
job定时:
job定时: