每天凌晨0:00:00备份一个表,且以当天时间为准,过去7天每天备份一次。
思路:

  1. 创建一个存储过程
  2. 利用定时任务每天凌晨0:00:00执行一次

1、创建一个存储过程

create or replace procedure prc_ams_asset as
  v_date       varchar2(8); --定义日期变量
  v_dated      varchar2(8); --定义7天前日期
  v_sql        varchar2(2000); --定义动态sql
  v_sqld       varchar2(2000); --定义动态sql
  v_tablename  varchar2(30); --定义动态表名
  v_tablenamed varchar2(30); --定义动态表名
begin
  select to_char(sysdate, 'yyyymmdd') into v_date from dual; --取日期变量
  select to_char(sysdate - 7, 'yyyymmdd') into v_dated from dual; --取日期变量
  v_tablename  := 'ams_asset_info_prc' || v_date; --为动态表命名
  v_tablenamed := 'ams_asset_info_prc' || v_dated; --为动态表命名
  v_sql        := 'create table ' || v_tablename ||
                  ' as select * from ams_asset_info';
  v_sqld        := 'drop table ' || v_tablenamed;
  dbms_output.put_line(v_sql); --打印sql语句
  execute immediate v_sql; --执行动态sql
  execute immediate v_sqld; --执行动态sql
exception
  when others then
    null;
end prc_ams_asset;

创建好之后,call prc_ams_asset(); 会立即运行第一次,或者用定时任务也会立即运行第一次

2、利用定时任务每天执行一次

当前用户定时任务
select count() from user_jobs;
有权限访问的定时任务
select count(
) from all_jobs;
整个数据库所有定时任务
select count(*) from dba_jobs;

1、查出原来定时任务的JOBID

SELECT t.* FROM  dba_jobs t where what = 'PRC_AMS_ASSET;'

2、删除该定时任务

begin
  dbms_job.remove(第一步查询出的JOBID);  /*删除自动执行的job,参数是 job的id*/
  commit;
end;

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  
        WHAT => 'PRC_AMS_ASSET;',  
 next_date => to_date('22-05-2019 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),
        INTERVAL => 'TRUNC(sysdate) + 1+ (0/24)' /*每天凌晨0点*/
      );  
  commit;
end;

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐