03-017 oracle定时任务

本文介绍了一个用于自动备份数据库表的存储过程,该过程每天凌晨0点执行,保留过去7天的数据。同时,文章详细描述了如何设置定时任务以确保存储过程的定期执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天凌晨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;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值