ITPub博客

首页 > 数据库 > Oracle > oracle job问题处理

oracle job问题处理

原创 Oracle 作者:oracle11111 时间:2025-01-14 09:50:12 0 删除 编辑

客户反馈数据库的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#;


判断相关进程是否可以杀掉,可以的话杀掉进程解决问题。


 

 

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3064906/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-19

  • 博文量
    81
  • 访问量
    90379