`

Oracle job问题解决汇总

阅读更多

 

一、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),'SUNDAY')

每天6点:trunc(sysdate+1)+6/24

半个小时:sysdate+30/1440

3.每个小时的第15分钟运行,比如:8:15,9:15,10:15...:trunc(sysdate,'hh')+75/1440。原先我设置的是trunc(sysdate,'hh')+15/1440,发现居然不行。

 

oracle JOB常见的执行时间
1、每分钟执行
TRUNC(sysdate,'mi')+1/(24*60)
  www.2cto.com  
2、每天定时执行
例如:
每天凌晨0点执行
TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24
每天早上8点30分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
 
3、每周定时执行
例如:
每周一凌晨2点执行
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
每周二中午12点执行
TRUNC(next_day(sysdate,2))+12/24
TRUNC(next_day(sysdate,'星期二'))+12/24
 
4、每月定时执行
例如:
每月1日凌晨0点执行
TRUNC(LAST_DAY(SYSDATE)+1)
每月1日凌晨1点执行
TRUNC(LAST_DAY(SYSDATE)+1)+1/24
 
5、每季度定时执行
每季度的第一天凌晨0点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')
每季度的第一天凌晨2点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24
每季度的最后一天的晚上11点执行
TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24
 
6、每半年定时执行
例如:
每年7月1日和1月1日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24
 
7、每年定时执行
例如:
每年1月1日凌晨2点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24

 

 

二、JOB为什么不运行?

1.先来了解一下JOB的参数说明:与job相关的参数一个是job_queue_processes,这个是运行JOB时候所起的进程数,当然系统里面JOB大于这个数值后,就会有排队等候的,最小值是0,表示不运行JOB,最大值是36,在OS上对应的进程时SNPn,9i以后OS上管理JOB的进程叫CJQn。可以使用下面这个SQL确定目前有几个SNP/CJQ在运行。

select * from v$bgprocess,这个paddr不为空的snp/cjq进程就是目前空闲的进程,有的表示正在工作的进程。

另外一个是job_queue_interval,范围在1--3600之间,单位是秒,这个是唤醒JOB的process,因为每次snp运行完他就休息了,需要定期唤醒他,这个值不能太小,太小会影响数据库的性能。

2.诊断:先确定上面这两个参数设置是否正确,特别是第一个参数,设置为0了,所有JOB就不会跑,确认无误后,我们继续向下。

3.使用下面的SQL察看JOB的的broken,last_date和next_date,last_date是指最近一次job运行成功的结束时间,next_date是根据设置的频率计算的下次执行时间,根据这个信息就可以判断JOB上次是否正常,还可以判断下次的时间对不对,SQL如下:

select * from dba_jobs

有时候我们发现他的next_date是4000年1月1日,说明job要不就是在running,要不就是状态是break(broken=Y),如果发现JOB的broken值为Y,找用户了解一下,确定该JOB是否可以broken,如果不能broken,那就把broken值修改成N,修改再使用上面的SQL察看就发现他的last_date已经变了,JOB即可正常运行,修改broken状态的SQL如下:

declare

BEGIN

DBMS_JOB.BROKEN(<JOB_ID>,FALSE);

END;

4.使用下面的SQL查询是否JOB还在Running

select * from dba_jobs_running

如果发现JOB已经Run了很久了还没有结束,就要查原因了。一般的JOB running时会锁定相关的相关的资源,可以查看一下v$access和v$locked_object这两个view,如果发现其他进程锁定了与JOB相关的Object,包括PKG/Function/Procedure/Table等资源,那么就要把其他进程删除,有必要的话,把JOB的进程也删除,再重新跑看看结果。

5.如果上面都正常,但是JOB还不run,怎么办?那我们要考虑把JOB进程重启一次,防止是SNP进程死了造成JOB不跑,指令如下:

alter system set job_queue_processes=0 --关闭job进程,等待5--10秒钟

alter system set job_quene_processes=5 --恢复原来的值

6.Oracle的BUG

Oracle9i里面有一个BUG,当计数器到497天时,刚好达到它的最大值,再计数就会变成-1,继续计数就变成0了,然后计数器将不再跑了。如果碰到这种情况就得重启数据库,我们这边有一个生产型的数据库版本是9205,就发生过这样一次问题,后来和用户约时间重启后就没问题了。但是其他的Oracle7345和Oracle8i的数据库没有发现这个问题。

7.数据库上的检查基本上就这多,如果JOB运行还有问题,那需要配合用户察看一下是否是程序本身的问题,比如处理的资料量大,或者网络速度慢等造成运行时过长,那就需要具体情况具体分析了。我们可以通过下面的SQL手工执行一下JOB看看:

declare

begin

dbms_job.run(<job>_ID)

end;

如果发现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_queue_process的值(这里改为10,job_queue_process的值该设为多少是另外的问题),不过这种修改是动态的,当oracle重新启动后job_queue_process的值将仍然从\%ORACLE_HOME%\admin\mydb\pfile\init.ora文件中读取。

 

查询job的情况。

show paramter background_dump_dest.

看alter.log 和trace 

 

请问我如何停止一个JOB

SQL> exec dbms_job.broken(1,true)

PL/SQL 过程已成功完成。

SQL>commit //必须提交否则无效

启动作业

SQL> exec dbms_job.broken(1,false)

PL/SQL 过程已成功完成。

停其他用户的job

SQL>exec sys.dbms_ijob.broken(98,true);

SQL>commit;

分享到:
评论

相关推荐

    Oracle BIEE常见问题解决办法汇总

    Oracle BIEE 常见问题解决办法汇总 问题1:提示组合 * 添加筛选器选择对应的列 * 在筛选器属性页面,运算符中选择提示 知识点: 在 Oracle BIEE 中,添加筛选器可以根据需要选择对应的列,并在筛选器属性页面中...

    oracle迁移达梦常见问题汇总

    本文主要结合之前一次oracle迁移达梦的项目,将碰到的问题以及一系列踩过的坑列举出来供大家参考,数据库版本是达梦7。(本文中涉及到的部分对象名已用sch1,tab1等方式替换) 1、整体情况 迁移过程中失败任务数低于5%...

    ORACLE常见问题整理

    ### ORACLE常见问题整理 #### Oracle数据库备份与还原操作 **一、数据库备份** Oracle数据库备份是维护数据库安全稳定运行的重要环节,主要包括两种常见的备份方式: 1. **使用`exp`命令进行备份**:这种方式...

    oracle知识点大汇总

    根据给定的文件信息,以下是对Oracle知识点的详细汇总与解释: ### Oracle用户与权限 在Oracle数据库系统中,存在两个预定义的用户——`sys`和`system`,它们在数据库安装过程中自动生成。 - **sys用户**:作为...

    Oracle定时器

    * 定时汇总数据:使用 Oracle 定时器可以根据指定的时间间隔汇总数据,例如每小时汇总当前小时的 sales 数据。 * 定时执行存储过程:使用 Oracle 定时器可以根据指定的时间间隔执行存储过程,例如每天凌晨执行清洁...

    数据库实例汇总_oracle_

    6. 作业调度器(DBMS_JOB):执行计划的任务,如自动备份。 7. 归档进程(ARCn):在归档模式下,将旧的重做日志文件复制到归档位置。 了解了数据库实例的基本结构后,我们还需要知道如何启动和关闭数据库实例。...

    spotlight on oracle性能监控教程

    - **报错日志读取器**: 快速读取Oracle数据库中的信息和错误时序表,快速识别需要修复的问题区域。 - **跨平台诊断**: 支持在Unix、Linux和Windows操作系统中查看数据流的实时图形显示,以获取这些服务器操作系统的...

    Oracle行转列之pivot

    在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...

    Oracle EBS Form开发小技巧汇总

    ### Oracle EBS Form 开发小技巧汇总 #### 1. Form中提交并发请求 在Oracle EBS Form开发中,提交并发请求是一项常见的需求。当用户希望执行后台处理时,可以通过这种方式来实现。以下是一个示例代码片段,展示了...

    ORACLE SQL :经典查询练手系列文章汇总.pdf

    根据给定的文件信息,我们可以总结出一系列关于Oracle SQL的经典查询练习知识点,这些知识点主要围绕着Oracle数据库中的SQL查询技巧,特别聚焦于“经典查询练手系列”文章中提到的练习题,旨在帮助读者加深对Oracle ...

    oracle定时执行存储过程.pdf

    在Oracle数据库中,定时执行存储过程是一项非常实用的功能,尤其适用于需要定期执行的任务,比如数据备份、数据清理、统计汇总等场景。通过设置定时任务,可以有效减轻管理员的工作负担,并确保关键业务流程的自动化...

    51job上的职位需求汇总

    2. **Java**:Java是一种跨平台的、面向对象的编程语言,由Sun Microsystems(现为Oracle公司)开发。Java的设计目标是“一次编写,到处运行”,这得益于其Java虚拟机(JVM)。Java被广泛应用在企业级应用开发、...

    \Oracle 外部表

    - 需要定期处理的批量数据文件,如财务报告或销售数据汇总。 总之,Oracle外部表为用户提供了一种高效且灵活的方式来处理文件系统中的数据,减少了数据传输和转换的时间成本,提高了数据处理效率。

    Oracle数据库面试题及答案

    知识点:The Job Queue Processes 是 Oracle 数据库中的一种后台进程,用于刷新 materialized view。 11. 如何判断哪个 session 正在连接以及他们等待的资源? 答案:V$SESSION /V$SESSION_WAIT 知识点:V$SESSION ...

    oracle自带的人力资源数据库设计

    2. **表结构**:HR模式包含多个表,例如`employees`(员工信息)、`departments`(部门信息)、`jobs`(职位信息)、`job_history`(工作历史)、`locations`(地点信息)等。每个表都有其特定的字段,用于存储相关...

    kettle使用问题处理汇总整理.rar

    《Kettle使用问题处理汇总整理》 Kettle,又称Pentaho Data Integration(PDI),是一款强大的ETL(Extract, Transform, Load)工具,广泛应用于数据仓库和大数据处理项目中。它提供了图形化的界面,使得数据抽取、...

    Oracle查询操作的学习笔记

    ### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 ...以上是关于Oracle查询操作的学习笔记中的核心知识点汇总,希望能够帮助初学者更好地理解和掌握Oracle数据库的基础知识。

    计划作业监控Oracle数据库.pdf

    相较之下,Oracle提供了更为专业和安全的解决方案来管理数据库作业。 从文档中我们可以看出,Oracle数据库作业的运行不依赖于外部系统的启动,具备了数据库内部机制来请求和执行后台进程。即使数据库在计划作业执行...

Global site tag (gtag.js) - Google Analytics