Oracle通过存储过程和定时任务备份日志表

写在前面

需求: 安全测试涉及安全审计, 备份日志表.

步骤

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;

 感谢

猜你喜欢

转载自www.cnblogs.com/yadongliang/p/11530724.html
今日推荐