客户反馈数据库的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#;
判断相关进程是否可以杀掉,可以的话杀掉进程解决问题。




