zoukankan      html  css  js  c++  java
  • oracle定时任务

    1.创建表

    CREATE TABLE TEST_A(TEST_ADD_DATA DATE); 

    2.创建一个自定义存储过程 

    CREATE OR REPLACE PROCEDURE TEST_PRO AS
    BEGIN
        INSERT INTO TEST_A VALUES (SYSDATE);
    END;

    3.创建JOB

    复制代码
    DECLARE
        jobno NUMBER;
    BEGIN
        dbms_job.submit(
                jobno, --定时器ID,系统自动获得
                'TEST_PRO;', --what执行的过程名
                SYSDATE, --next_date,定时器开始执行的时间,这样写表示立即执行
                'TRUNC(sysdate,''mi'') + 1/ (24*60)' --interval,设置定时器执行的频率,这样写每隔1分钟执行一次
            );
        COMMIT;
    END;
    复制代码

    说明:总共有4个参数依照顺序为:

    declare后面的jobno是一个名字,主要的用途是给定时器起一个名字,下面的job引用此jobno。

    • job:输出变量,是此任务在任务队列中的编号;
    • what:执行的任务的名称及其输入参数;
    • next_date:任务执行的时间;
    • interval:任务执行的时间间隔。

    4.运行JOB (步骤三成功后,job就已经开始执行了)

    SELECT * FROM TEST_A

    查询任务

    -- 查看调度任务
    select * from user_jobs;
    -- 查看正在执行的调度任务
    select * from dba_jobs_running;
    -- 查看执行完的调度任务
    select * from dba_jobs;

    job的id,此id不是随便填写的,而是执行select * from user_jobs;查询到定时任务名称对应的id

    手动执行定时任务

    BEGIN
        DBMS_JOB.RUN(25);
        COMMIT;
    END;

    停止已启动的定时任务

    BEGIN
        DBMS_JOB.BROKEN(25,  TRUE,  SYSDATE);
        COMMIT;
    END;

    删除指定job

    BEGIN
        DBMS_JOB.REMOVE(25);
        commit;
    END;

    常见的Interval 设置

    复制代码
    描述                        INTERVAL参数值 
    每天午夜12点                 TRUNC(SYSDATE + 1) 
    每天早上8点30分              TRUNC(SYSDATE + 1) + (8*60+30)/(24*60) 
    每星期二中午12点              NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24 
    每个月第一天的午夜12点         TRUNC(LAST_DAY(SYSDATE ) + 1) 
    每个季度最后一天的晚上11点      TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24 
    每星期六和日早上6点10分        TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)
     
    每秒钟执行次
     
    Interval => sysdate + 1/(24 * 60 * 60)
     
    如果改成sysdate + 10/(24 * 60 * 60)就是10秒钟执行次
     
    每分钟执行 
    Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
     
    如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分钟执行次
     
    每天定时执行 
    例如:每天的凌晨1点执行 
    Interval => TRUNC(sysdate) + 1 +1/ (24)
     
    每周定时执行 
    例如:每周一凌晨1点执行 
    Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
     
    每月定时执行 
    例如:每月1日凌晨1点执行 
    Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
     
    每季度定时执行 
    例如每季度的第一天凌晨1点执行 
    Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
     
    每半年定时执行 
    例如:每年7月1日和1月1日凌晨1点 
    Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
     
    每年定时执行 
    例如:每年1月1日凌晨1点执行 
    Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
    复制代码
  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/joyny/p/15190198.html
Copyright © 2011-2022 走看看