Oracle dbms_scheduler用法和Job不自动执行原因

25 篇文章 2 订阅

本文旨在简介dbms_scheduler的用法,包括创建带参数的任务、任务状态查看、日志查看等,看完掌握日常用法,更深入的研究建议看官方文档。

1、前提:job_queue_processes参数

根据官档的描述,该参数用来:设定每个实例、用来执行job的最大子进程数,该限制对dbms_job和dbms_scheduler的共享。
1. 为0时,job不自动执行;但可以手动执行。
2. job数>参数时,后续的job会排队等待。
3. 实际执行job的子进程数由多个因素确定:
- 1.这个参数确定并发的最大子进程数
- 2.系统可用资源
- 3.resource manager的设定
- 4.当前正在执行的job

ps:这就是job创建提交后,不自动执行的原因。
job排队的例子见《Oracle Job排队执行实验》。

2、dbms_scheduler用法

2.1 创建带参数的job

   begin
      dbms_scheduler.create_job(job_name            =>'MONITER',
                                job_type            =>'STORED_PROCEDURE',
                                job_action          =>'sp_insert',
                                number_of_arguments =>2,
                                start_date          =>to_date('20180821151800','yyyymmddhh24miss'),
                                repeat_interval     =>'FREQ=minutely; INTERVAL=2',
                                comments            =>'scheduler test');
      dbms_scheduler.SET_JOB_ARGUMENT_VALUE(
                                                    JOB_NAME          => 'moniter',
                                                    ARGUMENT_POSITION => 1,
                                                    ARGUMENT_VALUE    => 'scheduler1');
  dbms_scheduler.SET_JOB_ARGUMENT_VALUE(
                                                    JOB_NAME          => 'moniter',
                                                    ARGUMENT_POSITION => 2,
                                                    ARGUMENT_VALUE    => '10');
  dbms_scheduler.enable('MONITER');
    end;

说明

1参数create_job(number_of_arguments=>)

dbms_scheduler不能直接传参数,必须先在创建job时定义参数的个数。否则,后续传递参数时报错ora-27465。

2参数传递方式不同:

如执行过程sp_insert(‘scheduler1’,10);为例
与dbms_job不同,dbms_job里可以直接传递参数,用转义字符串即可。

dbms_job.submit(jobid,
                        what      => 'sp_insert(''key1'',10);',
                        next_date => to_date('20180821150500', 'yyyymmddhh24miss'));

scheduler通过函数SET_JOB_ARGUMENT_VALUE传参。

3函数enable:必须使能才有效。

4其他dbms_scheduler.drop_job(job_name)

2.2 查看当前job

    select sysdate,
           t.job_name,
           t.JOB_ACTION, /*job执行的sp*/
           t.STATE,      /*job状态,应为enable*/
           t.start_date,
           t.REPEAT_INTERVAL,
           t.*
      from user_scheduler_jobs t;

2.3 查看job执行日志

    select *
  from all_scheduler_job_log t
 where owner = 'HF'
   and t.job_name = 'MONITER'
 order by t.LOG_DATE desc;

select *
  from all_scheduler_job_run_details t
 where owner = 'HF'
   and t.job_name = 'MONITER'
 order by t.LOG_DATE desc;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBMS_SCHEDULEROracle数据库中的一个内置程序包,用于管理和调度作业、程序和链。它是Oracle Scheduler的主要接口,可以通过它来创建、修改和删除作业、程序和链,以及控制它们的执行时间和执行方式。 下面是一些DBMS_SCHEDULER的常见用法: 1. 创建作业 使用DBMS_SCHEDULER.CREATE_JOB过程可以创建作业。在创建作业时,需要指定作业名称、作业类型、作业所属的程序等信息。 2. 修改作业 使用DBMS_SCHEDULER.SET_ATTRIBUTE过程可以修改作业的属性,如作业的状态、开始时间、结束时间等。 3. 删除作业 使用DBMS_SCHEDULER.DROP_JOB过程可以删除作业。 4. 运行作业 使用DBMS_SCHEDULER.RUN_JOB过程可以手动运行作业。 5. 暂停作业 使用DBMS_SCHEDULER.DISABLE过程可以暂停作业的执行。 6. 恢复作业 使用DBMS_SCHEDULER.ENABLE过程可以恢复暂停的作业。 7. 创建程序 使用DBMS_SCHEDULER.CREATE_PROGRAM过程可以创建程序。在创建程序时,需要指定程序名称、程序类型、程序所属的语言等信息。 8. 修改程序 使用DBMS_SCHEDULER.SET_PROGRAM_ARGUMENT_VALUE过程可以修改程序的参数值。 9. 删除程序 使用DBMS_SCHEDULER.DROP_PROGRAM过程可以删除程序。 10. 创建链 使用DBMS_SCHEDULER.CREATE_CHAIN过程可以创建链。在创建链时,需要指定链名称、链包含的步骤等信息。 11. 修改链 使用DBMS_SCHEDULER.SET_CHAIN_STEP_ATTRIBUTE过程可以修改链的步骤属性,如步骤名称、步骤类型、步骤所属的程序等。 12. 删除链 使用DBMS_SCHEDULER.DROP_CHAIN过程可以删除链。 以上是一些DBMS_SCHEDULER的常见用法,具体使用方法可参考Oracle官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值