oracle 每天备份指定表的数据到另外一张备份表中

因为有一张中转数据的表,数据量特别大不能保存太久,但是最近几天的有可能要使用。所以只保留7天的数据量,其他的数据按月重新建表分开保存,用以备份。

首先创建备份的存储过程

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;

然后创建定时任务 晚上执行

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;

猜你喜欢

转载自blog.csdn.net/wangzhi291/article/details/83539125