写在前面
需求: 安全测试涉及安全审计, 备份日志表.
步骤
1.创建存储过程
CREATE OR REPLACE PROCEDURE P_DAYCLEAR IS V_TABLE_COUNT int; V_TABLE_NAME VARCHAR2(100); V_YEAR_MONTH VARCHAR2(100); v_sql VARCHAR2(300); c_sql VARCHAR2(300); BEGIN select to_char(sysdate - interval '7' day, 'yyyyMM') into V_YEAR_MONTH from dual; V_TABLE_NAME := 'DSM_COM_INDEX_HIS_VALUE' || V_YEAR_MONTH; select count(*) into V_TABLE_COUNT from user_tables where table_name = V_TABLE_NAME; --判断表是否已经存在了 IF V_TABLE_COUNT = 0 THEN --建表 c_sql :='create table '||V_TABLE_NAME||' as select * from DSM_COM_INDEX_HIS_VALUE where 1=2 '; execute immediate c_sql ; commit; END IF; select to_char(sysdate - interval '6' day, 'yyyy-MM-dd') into V_YEAR_MONTH from dual; V_SQL := 'insert into '||V_TABLE_NAME||' select * from DSM_COM_INDEX_HIS_VALUE where update_time < to_date(:1, ''yyyy-MM-dd'')'; --插数据 execute immediate V_SQL USING V_YEAR_MONTH ; COMMIT; --删除数据 V_SQL := ' delete from DSM_COM_INDEX_HIS_VALUE where update_time < to_date(:1, ''yyyy-MM-dd'') '; execute immediate V_SQL USING V_YEAR_MONTH ; COMMIT; END P_DAYCLEAR;
2.创建定时任务, 每晚执行
declare job_id pls_integer; begin sys.dbms_job.submit(job => job_id, what => 'P_DAYCLEAR();', next_date => to_date('10-03-2018 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), interval => 'TRUNC(sysdate+86400)'); commit; end;