`
ghost_fly
  • 浏览: 111012 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle JOB样例

阅读更多

每天1点执行的oracle JOB样例

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X,
what => 'ETL_RUN_D_Date;',
next_date => to_date('2009-08-26 01:00:00','yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(sysdate)+1+1/24',
no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
以 上是明确指定每天的1点执行此job,如果指定是每天中午12点执行interval需要指定为'trunc(sysdate)+1+12/24',如果 仅仅指定interval为一天,这样当你手工用dbms_job.run(job)去运行一次时,job每天的执行时间是会改变的,如果你想job每天 在固定时间执行,可以参考上面的例子.

初始化相关参数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位

job_queue_process 表示oracle 能够并发的job的数量,可以通过语句  

show parameter job_queue_process;

来查看oracle中job_queue_process的值。当job_queue_process值为0时表示全部停止oracle的job,可以通过语句

ALTER SYSTEM SET job_queue_processes = 10;

来调整启动oracle的job。

相关视图:
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息

-------------------------

提交job语法:

begin
sys.dbms_job.submit(job => :job,
what => 'P_CLEAR_PACKBAL;',
next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+ 1/360');
commit;
end;
/

-------------------------
创建JOB
variable jobno number;
begin
dbms_job.submit(:jobno, 'P_CRED_PLAN;',SYSDATE,'SYSDATE+1/2880',TRUE);
commit;

运行JOB
SQL> begin
dbms_job.run(:job1);
end;
/

删除JOB
SQL> begin
dbms_job.remove(:job1);
end;
/

DBA_JOBS
===========================================
字段(列) 类型 描述
JOB NUMBER 任务的唯一标示号
LOG_USER VARCHAR2(30) 提交任务的用户
PRIV_USER VARCHAR2(30) 赋予任务权限的用户
SCHEMA_USER VARCHAR2(30) 对任务作语法分析的用户模式
LAST_DATE DATE 最后一次成功运行任务的时间
LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒
THIS_DATE DATE 正在运行任务的开始时间,如果没有运行任务则为null
THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒
NEXT_DATE DATE 下一次定时运行任务的时间
NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒
TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒
BROKEN VARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行
INTERVAL VARCHAR2(200) 用于计算下一运行时间的表达式
FAILURES NUMBER 任务运行连续没有成功的次数
WHAT VARCHAR2(2000) 执行任务的PL/SQL块
CURRENT_SESSION_LABEL RAW MLSLABEL 该任务的信任Oracle会话符
CLEARANCE_HI RAW MLSLABEL 该任务可信任的Oracle最大间隙
CLEARANCE_LO RAW MLSLABEL 该任务可信任的Oracle最小间隙
NLS_ENV VARCHAR2(2000) 任务运行的NLS会话设置
MISC_ENV RAW(32) 任务运行的其他一些会话参数

--------------------------
描述 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)'

--------------------------

1:每分钟执行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

Interval => sysdate+1/1440

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不运行的检查步骤

 

ORACLE 有一种定时调度机制,用 dbms_job 包来管理。

  设置的 JOB 就是不运行,搞得的郁闷,

  最好执行了这个才搞定 exec dbms_ijob.set_enabled(true);

  下面提供一个 checklist 用于检查 job 异常的原因:

   1) Instance in RESTRICTED SESSIONS mode?

   Check if the instance is in restricted sessions mode:

   select instance_name,logins from v$instance;

   If logins=RESTRICTED, then:

   alter system disable restricted session;

   ^ Checked!

   2) JOB_QUEUE_PROCESSES=0

   Make sure that job_queue_processes is > 0

   show parameter job_queue_processes

   ^ Checked!

   3) _SYSTEM_TRIG_ENABLED=FALSE

   Check if _system_enabled_trigger=false

  col parameter format a25

   col value format a15

   select a.ksppinm parameter,b.ksppstvl value from x$ksppi a,x$ksppcv b

   where a.indx=b.indx and ksppinm= _system_trig_enabled ;

   If _system_trig_enabled=false, then

   alter system set _system_trig_enabled =TRUE scope=both;

   ^ Checked!

   4) Is the job BROKEN?

   select job,broken from dba_jobs where job=<job_number>;

   If broken, then check the alert log and trace files to diagnose the issue.

   ^ Checked! The job is not broken.

   5) Is the job COMMITted?

   Make sure a commit is issued after submitting the job:

BEGIN

   SYS.DBMS_JOB.SUBMIT

   (

   job => X

   ,what => dbms_utility.analyze_schema

   ( SCOTT , COMPUTE ,NULL,NULL,NULL);

   ,next_date => to_date( 08/06/2005 09:35:00 , dd/mm/yyyy hh24:mi:ss )

   ,no_parse => FALSE

   );

   COMMIT;

   END;

   /

   If the job executes fine if forced (i.e., exec dbms_jobs.run(<job_no>);), then likely a commit

   is missing.

   ^ Checked! The job is committed after submission.

   6) UPTIME > 497 days

   Check if the server (machine) has been up for more than 497 days:

   For SUN, use uptime OS command.

   If uptime>497 and the jobs do not execute automatically, then you are hitting unpublished bug 3427424

   (Jobs may stop running after 497 days uptime) which is fixed in 9206 and A102

   ^ Checked! The server in this case has been up 126 days only

   7) DBA_JOBS_RUNNING

   Check dba_jobs_running to see if the job is still running:

   select * from dba_jobs_running;

   ^ Checked! The job is not running.

   LAST_DATE and NEXT_DATE

   Check if the last_date and next_date for the job are proper:

   select Job,Next_date,Last_date from dba_jobs where job=<job_number>;

^ NEXT_DATE is porper, however LAST_DATE is null since the job never executes automatically.

9) NEXT_DATE and INTERVAL

   Check if the Next_date is changing properly as per the interval set in dba_jobs:

   select Job,Interval,Next_date,Last_date from dba_jobs where job=<job_number>;

   ^ This is not possible since the job never gets executed automatically.

   10) Toggle value for JOB_QUEUE_PROCESSES

   Stop and restart CJQ process(es)

   alter system set job_queue_processes=0 ;

  – <Wait for some time to ensure CJQ process stopped>

   alter system set job_queue_processes=4 ;

   Ref: Bug 2649244 (fixed by: 9015, 9203, 10201)

   ^ Done but did not help

   11) DBMS_IJOB(Non-documented):

   Last ditch effort.

   Either restart the database or try the following:

   exec dbms_ijob.set_enabled(true);

   Ref: Bug 3505718 (Closed, Not a Bug)

   Done but did not help

   These are the most common causes for this behavior.

   Solution

   The solution ended up to be the server (machine) uptime.

   Even though it was up for only 126 days, after the server was rebooted all jobs were able to execute automatically.

   To implement the solution, please execute the following steps:

   1. Shutdown all applications, including databases.

   2. Shutdown the server (machine)

   3. Restart all applications, including databases.

   4. Check that jobs are executing automatically.

   from metalink docs 313102.1

分享到:
评论

相关推荐

    样例数据库,oracle和mysql均适用

    标题中的“样例数据库,oracle和mysql均适用”意味着这个压缩包包含的资源适用于两种主流的关系型数据库管理系统:Oracle和MySQL。这样的数据库通常用于教学、测试或者演示目的,因为它们提供了一个预先构建的数据...

    Oracle Job的用法

    Oracle Job是Oracle数据库中的一个强大特性,主要用于在特定时间或间隔执行数据库操作,例如数据备份、维护任务或者定期的数据处理。以下是对Oracle Job使用方法和技巧的详细说明: 一、创建Oracle Job Oracle Job...

    oracle JOB常见的执行时间定义

    oracle JOB常见的执行时间, 在初学者定义JOB时,对于执行时间往往不知道如何设置. 该文档列举了常见的定义方式.可以由此进行扩展.

    oracle job使用详解

    Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行 PL/SQL 块或存储过程。Oracle Job 的使用对于实现定时任务、批处理操作和维护工作至关重要。以下是对 Oracle Job 使用的详细解释: 1. *...

    ORACLE如何停止一个JOB

    ### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...

    Oracle Job定时任务

    Oracle Job 定时任务 Oracle Job 定时任务是 Oracle 数据库中的一种定时执行任务的机制,它允许用户在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的 Job 可以通过以下视图查询系统中的 Job: *...

    导出ORACLE - JOB

    从oracle库中导出自定义的job脚本。

    oracleJob创建脚本

    ### Oracle Job 创建脚本详解 #### 一、Oracle Job 概述 在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包...

    oraclejob例子

    Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等。Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler...

    jmeter连接oracle数据库的样例

    jmeter连接oracle数据库的样例

    oracle job实例 测试通过

    从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...

    Oracle JOB 用法小结

    Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...

    oracle job

    Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间执行一系列数据库操作,如PL/SQL块、存储过程、包或操作系统命令。Oracle Job是Oracle的DBMS_SCHEDULER或之前版本中的DBMS_JOB包的一部分,它允许数据库...

    oracle job 创建

    Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行数据库任务,例如运行存储过程、PL/SQL 块或者 SQL 查询。对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **...

    ORACLE 快照样例

    实体化视图-快照 自己调试的样例 供大家参考

    Oracle JOB 定时任务

    Oracle JOB 定时任务 定时执行存储过程

    ORACLE创建JOB脚本

    在Oracle数据库系统中,"JOB"是用于调度和自动化任务执行的一种功能,它允许你在预定义的时间点运行存储过程、PL/SQL块或其他数据库操作。本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时...

    Oracle案例详细分析:Job任务停止执行

    Oracle案例详细分析:Job任务停止执行 本文通过一次Oracle Job任务异常案例诊断,分析其原因及解决过程,从内部揭示Oracle Job任务调度及内部计时机制。以下是关于Oracle Job任务的知识点: 1. Oracle Job任务的...

    oracle JOB的使用

    关于oracle 数据库中job任务如何创建、查询和修改、如何启用job和停止job,可以帮助新手了解job的使用,包括任务运行时间的设置,具体的代码很实用,希望对你有帮助

Global site tag (gtag.js) - Google Analytics