• oracle创建定时任务


     一、dmbs_job

    dbms_job涉及到的知识点

    1、创建job:

    variable jobno number;
    dbms_job.submit(:jobno, —-job号
     'your_procedure;',—-执行的存储过程, ';'不能省略
     next_date, —-下次执行时间
     'interval' —-每次间隔时间,interval以天为单位
    );/
     
    在命令窗口执行。

    –系统会自动分配一个任务号jobno。
    2、删除job: dbms_job.remove(jobno); 

    3、修改要执行的操作: job:dbms_job.what(jobno, what);  

    4、修改下次执行时间:dbms_job.next_date(jobno, next_date);

    5、修改间隔时间:dbms_job.interval(jobno, interval); 

    6、启动job: dbms_job.run(jobno);

    7、停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean值

    例子:

    – ①②步在sql窗口执行即可 
    – ①创建一张表 
    CREATE TABLE a(a DATE); 
    – ②创建一个自定义过程 
    CREATE OR REPLACE PROCEDURE TEST AS 
    BEGIN 
    INSERT INTO a VALUES(SYSDATE); 
    END; 

    – ③创建JOB 设定1分钟执行一次该任务 
    VAR job1 NUMBER; 
    BEGIN 
    dbms_job.submit(:job1,’test;’,sysdate,’sysdate+1/1440’); 
    COMMIT; 
    END; 

    – ④运行JOB 
    BEGIN 
    dbms_job.run(:job1); 
    END; 

    --查询当前的job任务。

    select *  from user_jobs;

    二、jobs

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

         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;

    参数介绍:

    job_name:job名字

    job_type:job类型,支持三种类型:

           1)PLSQL_BLOCK——PL/SQL语句块;

      2)STORED_PROCEDURE——存储过程;

           3)EXECUTABLE——外部程序(外部程序可以是一个shell脚本,也可以是操作系统级别的指令)。

    job_action:根据job_type的不同,job_action有相对应的内容。

    number_of_arguments:参数个数。

    start_date:执行开始时间。

    repeat_interval:指定job执行频率(如每分钟执行一次、每天执行一次等)。

    end_date:执行结束时间。

    job_class:jobclass的名字。

    enabled:指定是否自动激活job,为true代表自动激活,false代表不激活。

    auto_drop:执行完是否自动drop

    comments:对于job的简单说明

         定时器执行,调用存储过程创建表成功了,不需要显示的授权grant create table to user,只需要存错过程定义为authid current_user即可。个人觉得dbms_job在调用authid current_user的存储过程的时候,未能调用到用户具有的角色的权限,这或许是dbms_job的一个bug。

         简单介绍下dbms_scheduler关于定时任务的一些常用过程:

         1) dbms_scheduler.run(jobName) 运行job

         2) dbms_scheduler.stop_job(jobName,force) 停止job,force默认为false,Oracle建议false停止失败情况下,使用true,且使用true需要有manage scheduler权限

         3) dbms_scheduler.drop_job(jobName) 删除job

         4) dbms_scheduler.enable(jobName) 打开job

         5) dbms_scheduler.disable(jobName,force) 禁用job,force参数用于dependencies,如果TRUE,即使其他对象依赖于它,操作也能成功

         相关视图

        1) user_scheduler_jobs 查看job信息

        2) User_Scheduler_Job_Log job job日志

        3) user_scheduler_job_run_details job运行日志

        4) user_scheduler_running_jobs 正在运行的job

        总结:

       oracle定时任务,dbms_job调用存储过程创建表,需要显示授权,存储过程定义为authid current_user也不行,而dbms_scheduler是不需要显示授权的,这点来说后者更方便使用。另外,dbms_scheduler提供了job运行日志记录视图,可以查看具体的运行日志,比较实用。而且,oracle10g以后也推荐使用dbms_scheduler。

  • 相关阅读:
    结算凭证中委托付款部分sql
    各公司年资金归集汇总sql
    通过开户银行账号查询客商名称 sql
    TRIGGER_15.8.3BACKUP
    备份触发器:ADDC3
    sql查询单个银行账号重复
    待研究:insert客商账户触发器增加条件提示为空
    sql:劳务统计各分公司管理费用明细合计(等同汇总报表)
    【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
    【ASP.NET程序员福利】打造一款人见人爱的ORM(一)
  • 原文地址:https://www.cnblogs.com/steel-chen/p/7193029.html
Copyright © 2020-2023  润新知