精华内容
下载资源
问答
  • ORACLE定时执行Job任务

    万次阅读 2018-07-23 12:09:44
    因为是统计周月数据,便想到了数据库定时Job任务创建。 在百度上,找到了一篇好文章,跟大家分享:http://langgufu.iteye.com/blog/1179235 另一篇文章是关于ORACLE时间间隔书写:...

    今天改完了全部的bug,就想整个项目哪里有地方可以优化,哪里还存在需要补坑。

    因为是统计周月数据,便想到了数据库定时Job任务创建。

    在百度上,找到了一篇好文章,跟大家分享:http://langgufu.iteye.com/blog/1179235

    另一篇文章是关于ORACLE时间间隔书写:https://blog.csdn.net/wangjiajiachengcheng/article/details/51335871

    当然,过程中遇到了几个点,需要注意下:

    1、我需要处理查询一个表的数据更新到另一张表数据,具体方法如下:https://blog.csdn.net/cyxinda/article/details/78254110

    2、一般我们都调用存储过程,这里job声明时,显得代码简洁好看

    一个简单例子: 

    该例子来源第一篇文章,亲自在数据库操作的,发现有点小错误,改正后贴在这里:
    1、创建测试表 
          create table a(a date); 


    2、创建一个自定义存储过程 
          create or replace procedure test as 
          begin 
          insert into a values(sysdate); 
          end; 

    3、创建JOB 
          declare  job1  number; 
          begin 
          dbms_job.submit(job1,'test;',sysdate,'sysdate+1/1440');----这里直接调用创建好的test存储过程
          commit; ----避免在plsql中点击提交按钮
          end;  

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

          先查询定时任务job的id,sql语句:SELECT * FROM USER_JOBS或SELECT * FROM DBA_JOBS;

          

          根据ID,运行定时job任务
          begin 
          dbms_job.run(jobId); 

          commit;
          end; 

    5、停止已启动的定时任务

          begin

                   dbms_job.broken(25,  true,  sysdate);

          commit;

          end;

    5、删除指定job

          -----查询任务id,删除定时任务,
          begin
                   dbms_job.remove(jobId);

                   commit;
          end;

    6、修改Job执行参数

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

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

         修改间隔时间:dbms_job.interval(job,  interval);   

         停止Job:dbms.broken(job,  broken,  nextdate);   

         启动Job:dbms_job.run(jobno); 

    注意点:复制粘贴代码在编译器内经常会不通过,所以建议遇到该类情况时,手写代码。

    7、定制执行插入数据

    7.1、每周五零点插入数据
             declare
             job_test  number:=6;
             begin
                      dbms_job.submit(job_test,  'insert into test(a,  b,  c)

                      values 

                      (1,  1,  1,  trunc(sysdate,'day')+5,  trunc(sysdate, 'day')+11, ''a'', ''a'');',  sysdate,  'trunc(next_day(sysdate, 6))+2/24');
             commit;
             end;


    7.2、每天中午十二点查询上周五到本周四的数据并更新到表test
             declare 
             job_test  number:=10; 
             begin 
             dbms_job.submit(job_test,  'update test  set  total=(
             select  A  from(
             select  (sum(a) + to_number(to_char(systimestamp, ''mi'')))  as  A 
             from  table1
             where 
             date  between 
             trunc(sysdate, ''day'') - 2  and  trunc(sysdate, ''day'') + 4));',  sysdate,  'TRUNC(sysdate)+1+12/(24)'); 
             commit; 
             end; 

    展开全文
  • oracle 定时任务

    万次阅读 2018-09-29 09:52:24
    Oracle创建定时任务,下面以创建一个每天凌晨3点钟执行定时任务为实例。 1、创建定时任务 begin  sys.dbms_job.submit(job => 23,  what => 'PRO_JOB;',  next_date => to_date('10-10-...

    Oracle创建定时任务,下面以创建一个每天凌晨3点钟执行的定时任务为实例。

    1、创建定时任务

    begin
      sys.dbms_job.submit(job => 23,
                          what => 'PRO_JOB;',
                          next_date => to_date('10-10-2018 09:36:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'TRUNC(sysdate,''mi'') + 1/ (24*60)');
      commit;
    end;

    PRO_JOB是你要执行的存储过程名称,多个存储过程已分号分割,注意最后面也有一个分号。

    2、查询定时任务

    当前用户定时任务

    select count(*) from user_jobs;

    有权限访问的定时任务

    select count(*) from all_jobs;

    整个数据库所有定时任务

    select count(*) from dba_jobs;

     

     

    3、手动执行定时任务

    BEGIN

    DBMS_JOB.RUN(643); --643为任务的ID

    END;

     

    4、任务重复运行间隔设计

    4.1 在特定时间间隔后,重复运行该任务

    SYSDATE+n’,n泛指一个以天为单位的时间间隔.eg:

    描述                                Interval参数值
    每天运行一次             ‘SYSDATE+1′
    每小时运行一次         ‘SYSDATE+1/24′
    10分钟运行一次        ‘SYSDATE+10/(60*24)’
    每30秒运行一次        ‘SYSDATE+30/(60*24*60)’
    每星期运行一次         ‘SYSDATE+7′
    注:此任务表达式不能保证任务的下一次运行时间在特定的日期或者时间,只能够指定一个任务两次运行之间的时间间隔。

    4.2 在特定的日期和时间运行任务

    定时到特定日期或时间的任务,eg:

     

    描述Lnterval参数值
    每天午夜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)’
    展开全文
  • 1、首先创建一张表 该表用来执行插入数据。 create table getSysDate(test date); 2、创建存储过程以插入数据。 create or replace procedure insertSysDate as begin insert into getSysDate values (sysdate); ...

    1、首先创建一张表 该表用来执行插入数据。

    create table getSysDate(test date);

    2、创建存储过程以插入数据。

    create or replace procedure insertSysDate as 
    begin 
    insert into getSysDate values (sysdate);
    end ;

    3、创建job设置定时

    declare
    job1 number;
    begin
    dbms_job.submit(job1,'insertSysdate;',TO_DATE('2019-07-09 15:55:00','YYYY-MM-DD HH24:MI:SS'),'sysdate+1/1440');
    commit;
    end;

    以上为所创建的job,job1为job名称 ,insertSysdate为存储过程名称,TO_DATE('2019-07-09 15:55:00','YYYY-MM-DD HH24:MI:SS')这段为存储过程下次执行时间,'sysdate+1/1440' 这段为存储过程执行时间间隔。

    当我把以上所有的步骤都走完之后,发现表中并没有新的数据,然后我又通过"SELECT * FROM DBA_JOBS"该语句查看新建的job,发现job是已经创建成功了的,不过上次执行时间为空。

    4、而后我又通过以下语句执行job,看是否有问题。

    begin
    dbms_job.run(9);
    end;

    执行过后发现表中有数据,那就是job没什么问题,但是系统中可能有些地方没设置正确。

    5、然后我又通过以下语句修改job下次执行时间,改完当前时间后的几分钟,几分钟后,发现还是没有执行成功。

    begin
    dbms_job.next_date(9, TO_DATE('2019-07-09 16:30:00','YYYY-MM-DD HH24:MI:SS'));
    end;

    6、最后在网上查找原因,发现了一个哥们的博客,真的是救命。

    select value from v$parameter where name like '%job_queue_processes%' 

    该语句可以查看你的当前用户下执行job的临界值,当我查看之后发现为0,也就是说我的job一个都不能执行。

    于是我果断用以下语句将临界值修改为100。

    alter system set job_queue_processes =100;

    然后发现我的job已经开始自动执行了,应该是这个临界值默认就是0,而后需要自己修改,真的是个大坑,浪费了我一下午的时间。

    最近又出现了一个大坑  就是 我手动执行job的时候 会出现以下的错误

    而后,我在SYS下面创建job,在SYS下面执行job,发现执行是成功的,这时候发现可能是权限的问题,于是又给我当前用户赋予执行job的权限。

    grant create job to orace_user1;

    grant manage scheduler to orace_user1;

    GRANT EXECUTE ON DBMS_JOB TO USER;

    最主要的是下面的那个 给用户赋予当前用户可以执行存储过程的权限。

     

    展开全文
  • 一、创建存储过程 CREATE OR REPLACE PROCEDURE test_proc IS --test_proc... --需要执行的sql语句 COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); ...

    一、创建存储过程
     

    CREATE OR REPLACE PROCEDURE test_proc  IS    --test_proc存储过程名称
     BEGIN
       delete from xxx t where rownum < 100;    --需要执行的sql语句
       COMMIT;
     EXCEPTION
       WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');
         ROLLBACK;
    END;

    二、定制定时执行任务(在PL/SQL中使用“命令窗口”,每5分钟执行一次),"切记要提交事务""切记要提交事务""切记要提交事务"

    var job_num number;
    begin
       dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+5/24/60');
    end;
    /

    三、查看任务状态
     

    select * from DBA_JOBS

     


    不自动执行定时任务的解决办法

    SHOW PARAMETER JOB;		--如果为0的话,肯定不执行
    ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 1000;	--设置JOB_QUEUE_PROCESSES的值必须大于所执行任务的id
    exec dbms_ijob.set_enabled(true);		--最后一招,未验证过。

    执行以上命令后,观察"NEXT_DATE"字段值,如有变化则说明已开始自动执行任务。


     

    展开全文
  • ORACLE定时任务不能自动执行的检查修复步聚。 oracle定时任务有时不能自动执行,据网上说可能是某个版本的BUG,一般通过这些步骤就能恢复了。 这是本人结合网络上的知识,解决实际问题时记录的。
  • oracle-存储过程定时执行任务

    万次阅读 2019-03-26 14:55:13
    平时工作多数业务的数据,需要有时间截点截止当天24点,定时执行计划还是用的比较多的。...通过 oracle 中 dbms_job 完成存储过程的定时调用 2.在存储过程中完成相应的逻辑操作 实现步骤: 1.创建一个测试表 cre...
  • NULL 博文链接:https://xiaosheng12345.iteye.com/blog/1984408
  • 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录...
  • 定时任务   数据库   oracle 分类: 02-数据分析工具 (文/@数据化分析)   在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表、每天从数据库中提取...
  • oracle定时任务失效

    2019-10-17 15:15:06
    发现系统数据没有更新,查看oracle定时任务,估计没有执行。 发现next_date变成了4000/1/1 ,broken被选中。 select * from user_jobs发现该任务失败次数达16次。 查得如下原因: 当任务运行失败时,SNP过程在1分钟...
  • Oracle JOB定时任务用法

    2020-04-02 15:08:38
    Oracle JOB定时任务用法 创建一个JOB declare job number; BEGIN DBMS_JOB.SUBMIT( JOB => job, --自动生成JOBID WHAT => 'p_clean_pre;', --需要执行的存储过程名称或SQL语句,注意;号不能少 NEXT_...
  • Oracle创建定时任务

    万次阅读 2017-02-20 15:44:16
    Oracle创建定时任务,下面以创建一个每天凌晨3点钟执行定时任务为实例。 1、创建定时任务 DECLARE JOB_ID PLS_INTEGER; BEGIN SYS.DBMS_JOB.SUBMIT(JOB => JOB_ID, WHAT => 'PRO_JOB;', INTERVAL =>
  • job 1 概述 基础数据:记录定时任务执行结果 1.1 思维导图 dbms_scheduler 包头中有全部的过程和方法及说明: 2 语法 2.1 核心三要素 2.1.1 program 程序 创建程序:create_program 删除程序:drop_program 2.1.2 ...
  • 问题描述:在开发存过的时候,PL/SQL块里有动态SQL语句,正常可以执行。 但是放到存储过程里会报ORA-01031:insufficient privileges错误。 经查询原因是块里具有动态SQL语句( execute immediate SQL), 而且...
  • oracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 。下面是一个小案例,定时每15分钟向一张表插入一条数据 一 1.创建一张测试表 -- Create table create table A8 ( a1 VARCHAR2...
  • Oracle 定时执行计划任务

    万次阅读 2015-09-23 15:18:02
    Oracle 定时执行计划任务 Oracle 在10g 版本以前,计划任务用的是DBMS_JOB 包,10g 版本引入DBMS_SCHEDULER 来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB 提供了更强大的功能和更灵活的机制 管理,但DBMS_JOB ...
  • 写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T...5.创建无参存储过程将游标的这部分操作作为存储过程主体执行 ...
  • -- 查询该存储过程的定时任务 select job, next_date, next_sec, failures,what, broken from dba_jobs where what like '%PRO_BD_MO_DEG_EVAL%'; var job number; begin sys.dbms_job.submit(job => :job, ...
  • Oracle 创建、暂停、更改、删除 定时任务job

    万次阅读 多人点赞 2017-12-27 15:30:38
    Oracle 定时任务 job
  • oracle定时任务用法

    2018-11-08 17:03:58
    常用场景:需要定时执行某条sql,或者存储过程。 1.创建  ① PLSQL创建; ②sql创建; ①如图 ②手工sql创建: declare de181_job number;/*分配一个job任务号*/ begin   dbms_job.submit(  JOB&...
  • Oracle定时任务(JOB)

    2019-05-08 14:57:55
    oralce提供了一个很简便的创建定时任务的方法,即创建job,这是数据库级别的定时任务,运行时间全部由数据库控制,因此省去了开发人员的很多烦恼。 一.创建定时任务 创建的方式有两种: 1.直接创建job 可以使用以下...
  • Oracle Job的使用(定时执行)

    千次阅读 2018-06-14 11:37:19
    转载自:https://www.cnblogs.com/Chestnuts/articles/7066333.htmloracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 。下面是一个小案例,定时每15分钟向一张表插入一条数据一 1....
  • 2、手动执行定时任务 BEGIN DBMS_JOB.RUN(643); --643为任务的ID END; 3、停止定时任务 declare begin dbms_job.broken(24,true,sysdate);/*停止一个job,jobId, job的ID,里面参数true也可是false,next_date(某一...
  • oracle rman自动备份的计划任务CROND不执行的几种情况及解决
  • Oracle定时执行计划任务 在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表、每天从数据库中提取符合条件的数据、每天将客户关系管理系统中的数据分配给员工做...
  • 写了四张表的存储过程,并要分别建四个定时任务执行这四个过程,其中三个存储过程创建,然后创建定时任务,没问题,维有一个始终报错,报的错也看不懂是啥。 于是就在网上查找相关问题码,最后找到一篇文章说是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,376
精华内容 2,150
关键字:

oracle手动执行定时任务