oracle job问题处理

来源:这里教程网 时间:2026-03-03 21:15:19 作者:

客户反馈数据库的job执行失败,未提供其他信息,我们检查数据库告警日志发现如下内容: Errors in file /oraapp/oracle/diag/rdbms/*******/*******/trace/*******_j001_31883.trc: ORA-12012: error on auto execute of job 201 ORA-02049: timeout: distributed transaction waiting for lock ORA-06512: at "***.***", line 204 ORA-06512: at line 2 Sat Jan 11 08:42:01 2025 然后我们查询job的相关情况,找到对应的job号 SELECT      JOB_NAME,--JOB名称     STATUS,--执行状态     ACTUAL_START_DATE,--实际开始执行的时间     RUN_DURATION,--运行的持续时间     ERROR#,--执行失败的错误代码     ADDITIONAL_INFO --错误信息将显示在此列中 FROM      DBA_SCHEDULER_JOB_RUN_DETAILS where status !='SUCCEEDED'     ORDER BY      ACTUAL_START_DATE DESC;      select * from dba_jobs where job=201 select * from DBA_JOBS_RUNNING 发现相关的job确实一直报错  未执行成功,根据报错信息来看应该是锁问题,但是我们没权限再次执行job因此需要分析job的执行过程,看看哪些对象被锁定了。 select * from dba_objects where object_name='FIXSLIP'   然后查询这个存储过程的定义,看下里面哪些表做了 insert update delete 之类的操作。 查询下被锁定的对象,看看哪个和上面对应的上。 SELECT l.session_id sid,          s.serial#,        spid,          l.locked_mode 锁模式,          l.oracle_username 登录用户,          l.os_user_name 登录机器用户名,          s.machine 机器名,          s.terminal 终端用户名,          o.object_name 被锁对象名,          s.logon_time 登录数据库时间   FROM v$locked_object l, all_objects o, v$session s,v$process p   WHERE l.object_id = o.object_id      AND l.session_id = s.sid      and s.paddr=p.addr ORDER BY sid, s.serial#; 判断相关进程是否可以杀掉,可以的话杀掉进程解决问题。      

相关推荐