Oracle定时任务dbms_scheduler

1. 简介

Oracle 10g之前,我们通过DBMS_JOB来管理定时任务;
10g之后,则推荐使用DBMS_SCHEDULER来管理定时任务,因为它提供了更强大的功能和灵活的机制。

2. 需要的权限

  CREATE JOB          -- (必须, 要执行DBMS_SCHEDULER, 需要有create job权限)
  CREATE EXTERNAL JOB -- (可选, 创建执行操作系统命令的job时需要)  
  # 查询用户所拥有的角色以及角色所包含的权限
  select * from role_sys_privs where role in (
    select granted_role from dba_role_privs where grantee='SCOTT'
  ) order by role;
  # 查询直接授予用户的权限
  select * from dba_sys_privs where grantee='SCOTT'; 

3. 一个简单的Demo

3.1 创建JOB

create table test_t1(id int, create_date date);
create or replace procedure test_p1
is
  v_maxId test_t1.id%type := 1;
begin
  select nvl(max(id), 0) into v_maxId from test_t1;
  insert into test_t1 values(v_maxId + 1, sysdate);
  commit;
end test_p1;
/
declare
  v_count int := 0;
begin
  select count(*) into v_count from user_scheduler_jobs where job_name='TEST_JOB1';
  if v_count > 0 then
    dbms_scheduler.drop_job('TEST_JOB1');
  end if;
  dbms_scheduler.create_job (
    job_name        => 'test_job1',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'TEST_P1',
    start_date      => sysdate,
    repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
    enabled         => true
  );
end;
/

参数说明

job_name        : 必选, 任务名称
job_type        : 必选, 任务类型(
                    PLSQL_BLOCK,      -- 执行一个PL/SQL匿名快
                    STORED_PROCEDURE, -- 执行一个存储过程
                    EXECUTABLE,       -- 执行一个外部程序
                    CHAIN             -- 执行一个CHAIN
                  )
job_action      : 必选, 任务内容, 与job_type配合使用
start_date      : 可选, 首次执行时间, 为空时表示立即执行
repeat_interval : 可选, 执行频率, 为空时表示只执行一次(
                    FREQ=MINUTELY; -- 表示间隔单位, 可选值有YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY
                    INTERVAL=1     -- 表示间隔周期
                  )
enabled         : 可选, 是否启用任务

详细参数可参考: http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72960

3.2 查看JOB执行情况

-- 查看已创建的JOB
select job_name, job_type, enabled, state from user_scheduler_jobs;
-- 查看JOB运行日志
select log_id, log_date, status from user_scheduler_job_run_details where job_name='TEST_JOB1';

3.3 删除JOB

exec dbms_scheduler.drop_job('TEST_JOB1');
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值