• oracle数据库中job和dbms_job比较


    oracle中job和dbms_job比较

    一、概述

    Oralce中的任务有2种:Job和Dbms_job,两者的区别有:
    ①、Job是通过调用dbms_scheduler.create_job包创建的,Dbms_job则是通过调用dbms_job.submit包创建的。
    ②、两种任务的查询视图都分为dba和普通用户的,Job对应的查询视图是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs对应的查询视图为dba_jobs和user_jobs。
    ③、在plsql developer中job位于jobs菜单、dbms_job位于dbms_jobs菜单。
    在oracle10g以后就推荐采用dbms_scheduler包来取代dbms_job来创建定时任务。

    二、使用例子

    1、dbms_job的使用
    • 1、语法:
    BEGIN
    DBMS_JOB.SUBMIT(
       JOB OUT BINARY_INTERGER,--输出变量,是此任务在任务队列中的编号,也可以自定义,一般不传
       WHAT IN VARCHAR2,--执行的任务的名称及其输入参数
       NEXT_DATE IN DATE DEFAULT SYSDATE,--任务执行的时间
       INTERVAL IN VARCHAR2 DEFAULT NULL,--任务执行的时间间隔
       NO_PARSE IN BOOLEAN DEFAULT FALSE,--用于指定是否需要解析与作业相关的过程
       INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--用于指定哪个例程可以运行作业
       FORCE IN BOOLEAN DEFAULT FALSE--用于指定是否强制运行与作业相关的例程
    );
    END
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    例子:

    CREATE OR REPLACE PROCEDURE PROC_ADD_TEST AS
    BEGIN
      INSERT INTO A8 VALUES (TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI'));/*向测试表插入数据*/
      COMMIT;
    END;
    ---------------------------------------------------------------------
    declare
      job number;
    BEGIN
      DBMS_JOB.SUBMIT(  
            JOB => job,  /*自动生成JOB_ID*/  
            WHAT => 'proc_add_test;',  /*需要执行的存储过程名称或SQL语句*/  
            NEXT_DATE => sysdate+3/(24*60),  /*初次执行时间-下一个3分钟*/  
            INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分钟执行一次*/
          ); 
      commit;
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 2、删除job:
      dbms_job.remove(jobno); – jobno任务号

    • 3、修改要执行的操作:
      job:dbms_job.what(jobno, what); --指定任务号以及存储过程

    • 4、修改下次执行时间:
      dbms_job.next_date(jobno, next_date); --指定任务号的时间

    • 5、修改间隔时间:
      dbms_job.interval(jobno, interval); --指定任务号的间隔时间

    • 6、改变与作业相关的所有信息,包括作业操作,作业运行日期以及运行时间间隔等.

    dbms_job.change(
      job in binary_integer,
      what in varchar2,
      next_date in date,
      interval in varchar2,
      instance in binary_integer default null,
      force in boolean default false
    );
    --例子
    dbms_job.change(2,null,null,'sysdate+2');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 7、启动job:
      dbms_job.run(jobno); --指定任务号启动

    • 8、停止job:
      dbms.broken(jobno, broken, nextdate); –broken为boolean值 N代表启动,Y代表没启动(STOP)

    2、job的使用

    使用dbms_scheduler创建job需要具有create job权限,对定时任务一些操作需要具有MANAGE SCHEDULER权限,如:dbms_scheduler.stop_job(‘my_job_test’,true)。

    --1.创建表
    create table bak_job_test(date_time date,mark varchar2(200));
    --2.创建一个存储过程,用于创建表
    create or replace procedure my_test authid current_user is
           v_count number := 0;
           v_mess varchar2(200) := '';
         begin
          select count(1) into v_count from user_tables t where t.TABLE_NAME = 'BAK_JOB_TABLES';
           if  v_count > 0 then
              execute immediate 'drop table bak_job_tables purge';
           end if;
          execute immediate 'create table bak_job_tables as select * from user_tables where 1=2';
          insert into bak_job_test(date_time,mark) values(sysdate,'success');
    exception
    when others then
    v_mess := substr(SQLERRM,0,200);
    insert into bak_job_test(date_time,mark) values(sysdate,v_mess);
          end;
    --3.创建存储过程
    BEGIN
         dbms_scheduler.create_job(job_name        => 'my_job_test',
                                 job_type        => 'STORED_PROCEDURE',
                                 job_action      => 'my_test',
                                  start_date      => sysdate,
                                 repeat_interval => 'sysdate + 1/1440',
                                 enabled         => TRUE,
                                 comments        => 'test');
    END;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    NX二次开发-ug表达式函数ug_find_file读取当前prt所在路径
    硅基流动完成近亿元融资:加速生成式AI技术普惠进程
    vue请求代理查看真实地址
    [nlp] 自然语言理解基准 ATIS Snips
    计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
    微服务实践k8s与dapr开发部署实验(2)状态管理
    oracle框架
    墨者学院 Ruby On Rails漏洞复现第一题(CVE-2018-3760)
    Python基础入门篇【27】--python基础入门练习卷C
    语言基础篇15——Python中的面向对象编程
  • 原文地址:https://blog.csdn.net/KaiKaiWaWa/article/details/134459091