1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

JOB不自动运行的排查方法

JOB不自动运行的排查方法

我是本际云服务器推荐网的小编小本本。在使用12.1.0.1的库时,我们遇到了JOB不自动运行的问题。经过检查发现,作业队列调度进程CJQ0进程被阻塞,进而阻塞了JOB的调度。在SR方面,我们怀疑是“Bug27223075-WaitforPXDeq:JoinAckwhennoactiveQCbutPPA*slavesshowasbusy”,建议是升级数据库到19C或者定期重启。但是考虑到生产环境,我们不想随意折腾数据库。于是,我们尝试杀掉阻塞CJQ0进程,观察到数据库自动拉起了CJQ0进程,一段时间之后JOB恢复了正常调度。

JOB不自动运行的排查方法

常见排查方法

根据MOS上的文章“JobsNotExecutingAutomatically(DocID313102.1)”,对JOB不自动执行的情况,列举以下可能的原因及排查方法:

  • InstanceinRESTRICTEDSESSIONSmode:检查实例是否为受限模式:
  • select instance_name,logins from v$instance;

    如果logins= RESTRICTED,则执行:alter system disable restricted session;

  • JOB_QUEUE_PROCESSES=0:确认参数大于0:
  • show parameter job_queue_processes

  • _SYSTEM_TRIG_ENABLED=FALSE:确认参数“_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';

    如果_system_trig_enabled=false,则执行:alter system set "_system_trig_enabled"=TRUE scope=both;

  • IsthejobBROKEN:检查JOB是否为broken,确认原因:
  • select job, broken from dba_jobs where job=;

  • IsthejobCOMMITTED:确认提交JOB之后是否缺少commit:
  • 如果JOB通过强制执行可以正常运行,那么可能是缺少commit。例如:

    DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT(job=>X,what=>...

  • UPTIME>497days:确认服务器主机是否已运行超过497天:
  • 在oracle老版本9i和10g中,如果服务器启动时间大于497天,可能会命中bug-3427424(Jobsmaystoprunningafter497daysuptime),需要重启服务器解决,可执行命令:uptime

  • DBA_JOBS_RUNNING:查看视图dba_jobs_running视图查看JOB是否还在运行:
  • select * from dba_jobs_running;

    如果JOB状态是running,检查以下两个视图v$access、v$locked_object,找出JOB使用的资源被什么进程锁定了。

  • LAST_DATEandNEXT_DATE:确认JOB的last_date和next_date设置是否正确:
  • select job, next_date, last_date from dba_jobs where job=;

  • NEXT_DATEandINTERVAL:查看dba_jobs视图,检查next_date是否根据interval正确变更:
  • select job, interval, next_date, last_date from dba_jobs where job=;

  • TogglevalueforJOB_QUEUE_PROCESSES:设置job_queue_processes=0,等待一段时间后,重新设置回原来的值,此操作实际上就是重启CJQ0进程:
  • alter system set job_queue_processes=0;

    alter system set job_queue_processes=4;

  • DBMS_IJOB:尝试下面的操作:
  • exec dbms_ijob.set_enabled(true);

以上就是JOB不自动运行的排查方法,希望对大家有所帮助!

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6445.html