如何定时清理历史数据。

热学沸腾56 2010-12-07 10:44:15
Windows Server 2003+Oracle 10g
有一个表,每个月大概有一万行数据。
我现在需要每月定时备份和清理一年之前的历史数据。
各位高手请指教!一点不熟悉Oracle...
用的C#开发
...全文
244 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxyzxq2008 2010-12-08
  • 打赏
  • 举报
回复
楼主正解,写个job来定时,用过程调下就OK
job定时:
貓哥是個傳說 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bubblekitty 的回复:]

嗯,procedure+job

2樓強
[/Quote]
呵呵,糾正下,是1樓沙發上的同學強,連代碼都有~
貓哥是個傳說 2010-12-08
  • 打赏
  • 举报
回复
嗯,procedure+job

2樓強
djvfe 2010-12-08
  • 打赏
  • 举报
回复
procedure+job
  • 打赏
  • 举报
回复
先写个删除数据的过程,然后通过job来定时调用过程
job详解
碧水幽幽泉 2010-12-07
  • 打赏
  • 举报
回复
创建个存储过程,然后使用job定时器定时删除!
胖虎gogogo 2010-12-07
  • 打赏
  • 举报
回复
1.写个清理历史数据的存储过程(最好不局限于单表,形成数据清理机制。第一次清理如果数据量过大,delete数据的时候可能有回滚段不足而清理不成功的问题。建议通过循环分批提交)
2.定个JOB定制执行该存储过程
Dave 2010-12-07
  • 打赏
  • 举报
回复

写个存储过程, 然后用该存储过程制定JOB。 定期执行就可以了。

具体存储过程和JOB语法,google 有很多。

tangren 2010-12-07
  • 打赏
  • 举报
回复
--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;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧