• oracle job SYSDATE


    hr

    BEGIN 
      SYS.DBMS_JOB.REMOVE(410);
    COMMIT;
    END;
    /
    
    DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'NC633.DBA_SEND_MAILINFO_TEST1;'
       ,next_date => to_date('09/05/2017 10:00:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'TRUNC(SYSDATE)+1+10/(24)'
       ,no_parse  => FALSE
      );
      SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    COMMIT;
    END;
    /

      

    select SYSDATE  --2016-04-14 16:57:09 当前时间
    ,SYSDATE+1   --2016-04-15 16:57:09  第二天的当前时间
    ,TRUNC(SYSDATE) --2016-04-14   当前日期
    ,TRUNC(SYSDATE)+1  --2016-04-15  第二天
    ,trunc(sysdate)+23/24 --2016-04-14 23:00:00 今天晚上23点
    ,trunc(next_day(sysdate,'星期六'))+23/24   --2016-04-16 23:00:00   未来周六
    ,trunc(next_day(sysdate,'星期二'))+23/24   --2016-04-19 23:00:00   未来周二
    from dual;

    Oracle JOB的建立,定时执行任务

    --建立job格式
    declare  jobnum number
    begin
        sys.dbms_job.submit(job => :jobnum, --jobnum系统自动产生编号。
                               what => 'sp_DropTempTable;'--存储过程名 
                               next_date => trunc(sysdate)+23/24--设置下次执行时间。这里是今天晚上23:00
                               interval => 'trunc(next_day(sysdate,''星期五''))+23/24');--设置时间间隔,多久执行一次。这里是每周的星期五晚上23:00
    end

    函数next_day返回日期中包含指定字符的日期,trunc 函数去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:
    1/24    一小时;
    1/1440  一分;
    1/3600  一秒;

    --创建存储过程
    CREATE OR REPLACE procedure sp_DropTempTable   as
    begin
           execute immediate 'drop table test_job1';
           execute immediate 'drop table test_job2';
           execute immediate 'drop table test_job3';
           
    end sp_DropTempTable;


    --建立job
    declare  jobnum number;  
    begin
        sys.dbms_job.submit(job => jobnum, --jobnum系统自动产生编号。
                               what => 'sp_DropTempTable;',
                               next_date => trunc(sysdate)+22/24--从今天晚上22点开始执行
                               interval => 'trunc(sysdate)+1+22/(24)'); --每天晚上22点自动执行
    end

      

    DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'DBA_SEND_MAILINFO_test;'
       ,next_date => to_date('14/12/2016 11:42:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'trunc(sysdate)+1+11.70/(24)'
       ,no_parse  => FALSE
      );
    
    COMMIT;
    END;
    --1.plsql中学习job   
    --
    学习job  
    --
    建表  
    create table test_job(para_date date);  
    commit;  
      
    insert into test_job values(sysdate);  
    commit
     
    select * from test_job;
    truncate table test_job


    --建立存贮过程   
    create or replace procedure test_jobproce   as  
    begin  
    insert into test_job values(sysdate);  
    end test_jobproce; 
      
    --建立job  
    --
    建立job后默认是执行的  
     
    declare  test_job_really number;  
    begin  
    dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440');  
    commit;  
    end;  
      
    ---停止job  25是建立的job test_job_really  
    begin  
    dbms_job.broken(366,true);  
    commit;  
    end;  

    --人工执行job  
    begin  
    dbms_job.run(366);  
    commit;  
    end;  
     
    --删除job  
    begin   
    dbms_job.remove(366);  
    commit;  
    end;  
     
    --查看执行结果  
    select  * from test_job order by test_job.para_date desc;   

    --查看job  
    select * from sys.user_jobs   
      
    --使用下面的SQL查询是否JOB还在Running,前提是需要job执行时间不能过短  
      
    select * from dba_jobs_running  

    --除了submit参数外,其余的几个参数有:  
    --
    运行job 
    dbms_job.run(v_job);  
          
    --停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。  
    dbms_job.broke(v_job,true,next_date); 
           
    --删除某个job  
    dbms_job.remove(v_job);  
    dbms_job.what(v_job,'sp_fact_charge_code;'); 
          
    --修改某个job名 修改下一次运行时间  
     dbms_job.next_date(v_job,sysdate);       

    关于job运行时间
    1:每分钟执行
    Interval => TRUNC(sysdate,'mi') + 1/(24*60)
    2:每天定时执行
    例如:每天的凌晨1点执行
    Interval => TRUNC(sysdate) + 1 +1/(24)
    3:每周定时执行
    例如:每周一凌晨1点执行
    Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
    4:每月定时执行
    例如:每月1日凌晨1点执行
    Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
    5:每季度定时执行
    例如每季度的第一天凌晨1点执行
    Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
    6:每半年定时执行
    例如:每年7月1日和1月1日凌晨1点
    Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
    7:每年定时执行
    例如:每年1月1日凌晨1点执行
    Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24

    job的运行频率设置
    1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
    2.Toad中提供的:
    每天:trunc(sysdate+1)
    每周:trunc(sysdate+7)
    每月:trunc(sysdate+30)
    每个星期日:next_day(trunc(sysdate),'星期日')
    每天6点:trunc(sysdate+1)+6/24
    半个小时:sysdate+30/(24*60)
    3.每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。

    --同时最大的作业数
    show parameter JOB_QUEUE_PROCESSES
    ALTER SYSTEM set job_queue_processes=20;
    show parameter JOB_QUEUE_PROCESSES

    --以老大sys留作业
    --
    提交作业,作业不能调用作业,作业描述中的单引要用双单引
    VARIABLE jobno NUMBER
    BEGIN
    DBMS_JOB.SUBMIT(:jobno,
    'update scott.emp set sal=sal+1;',
    SYSDATE , 'SYSDATE + 1/24/60');
    COMMIT;
    END;
    /

    --验证作业
    PRINT jobno
    SELECT * from dba_jobs;
    select JOB,WHAT,LAST_DATE,NEXT_DATE from dba_jobs;
    select job,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC,INTERVAL, BROKEN,FAILURES from dba_jobs;

    --作业号由SYS.JOBSEQ序列产生
    select * from dba_sequences where SEQUENCE_NAME='JOBSEQ';

    --查看作业进程
    select * from v$process where PROGRAM like 'ORACLE.EXE (J%';

    select * from DBA_JOBS_RUNNING;

    --修改作业
    --
    -----------------------------------------------------------------------------------------
    --
    调度时间
    select JOB,WHAT from dba_jobs;
    select job,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC,INTERVAL,FAILURES from dba_jobs;
    BEGIN
    DBMS_JOB.CHANGE(24NULLNULL'SYSDATE+3');
    END;
    /
    --修改下次启用时间
    BEGIN
    DBMS_JOB.NEXT_DATE(24, SYSDATE + 1/24/60);
    END;
    /
    --作业运行后不再启用
    BEGIN
    DBMS_JOB.INTERVAL(24'NULL');
    END;
    /
    --作业的内容
    BEGIN
    DBMS_JOB.WHAT(24,'update scott.emp set sal=sal+1;update scott.emp set sal=sal+5;');
    end;
    /
    -------------------------------------------------------------------------------------------
    --
    中断作业
    BEGIN
    DBMS_JOB.BROKEN(27, TRUE);
    END;
    /
    select job,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC,INTERVAL, BROKEN,FAILURES from dba_jobs;

    --启用作业
    BEGIN
    DBMS_JOB.BROKEN(24, FALSE, NEXT_DAY(SYSDATE, 'MONDAY'));
    END;
    /
    --------------------------------------------------------------------------------------------
    select job,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC,INTERVAL, BROKEN,FAILURES from dba_jobs;
    --运行作业
    BEGIN
    DBMS_JOB.RUN(28);
    END;
    /

    --取消作业
    select JOB,WHAT from dba_jobs;
    execute dbms_job.remove(27);

    --------------------------------------------------------------------------------------------
    --
    错误信息写在bdump,cdump下
    show parameter dump

    JOB执行情况

    select  log_id,OWNER,job_name,status,to_char(log_date,'YYYY-MM-DD HH:MI:SS') log_date ,STATUS,actual_start_date,RUN_DURATION
     from dba_scheduler_job_run_details  ORDER BY actual_start_date DESC
     
     
     select  PROGRAM_ACTION from dba_scheduler_programs where PROGRAM_NAME = 'RLM$SCHDNEGACTION';

    BEGIN
      SYS.DBMS_JOB.REMOVE(124);
    COMMIT;
    END;
    /

    DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X
       ,what      => 'DBA_SEND_MAILINFO;'
       ,next_date => to_date('01/01/4000 00:00:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'TRUNC(SYSDATE+1)+9/24'
       ,no_parse  => FALSE
      );
      SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
      SYS.DBMS_JOB.BROKEN
       (job    => X,
        broken => TRUE);
    COMMIT;
    END;
    /

  • 相关阅读:
    282. Expression Add Operators
    281. Zigzag Iterator
    280. Wiggle Sort
    How Not to Crash #2: Mutation Exceptions 可变异常
    Moving Swiftly
    How to Use updateConstraints
    Don’t Put View Code Into Your View Controller别把View创建的代码放在VC中
    Where-To-Put-The-Auto-Layout-Code
    iOS five years[转]
    ResponderChain note
  • 原文地址:https://www.cnblogs.com/Snowfun/p/5391640.html
Copyright © 2020-2023  润新知