问题描述:
查看警报日志中,发现错误信息输出如下:
DBMS_STATS: GATHER_STATS_JOB encountered errors. Check the trace file.
Errors in file /u01/app/oracle/diag/rdbms/xxx/xxx/trace/xxx_j000_17362.trc:
ORA-04021: timeout occurred while waiting to lock object
解决方案:
1.根据提示查看审计日志/u01/app/oracle/diag/rdbms/xxx/xxx/trace/xxx_j000_17362.trc
$ cat /u01/app/oracle/diag/rdbms/xxx/xxx/trace/xxx_j000_17362.trc
*** 2019-07-14 06:15:12.595
*** SESSION ID:(760.12381) 2019-07-14 06:15:12.595
*** CLIENT ID:() 2019-07-14 06:15:12.595
*** SERVICE NAME:(SYS$USERS) 2019-07-14 06:15:12.595
*** MODULE NAME:(DBMS_SCHEDULER) 2019-07-14 06:15:12.595
*** ACTION NAME:(ORA$AT_OS_OPT_SY_5211) 2019-07-14 06:15:12.595
ORA-04021: timeout occurred while waiting to lock object
*** 2019-07-14 06:15:12.595
DBMS_STATS: GATHER_STATS_JOB: GATHER_TABLE_STATS('"SID"','"DOCDETAIL"','""', ...)
DBMS_STATS: ORA-04021: timeout occurred while waiting to lock object
发现锁和DOCDETAIL这张表有关系,使用SQL查询锁对应的会话信息
select b.SID,b.SERIAL#,c.SQL_TEXT
from v$locked_object a, v$session b, v$sqlarea c
where a.SESSION_ID = b.SID
and b.SQL_ADDRESS = c.ADDRESS
and lower(c.sql_text) like '%table_name%';
判断该会话是否可以kill,如果可以使用命令kill
alter system kill session 'sid,serial#'
预留:自己验证一下,.trc 的跟中文件中输出的:SESSION ID:(760.12381) 是否就是导致锁的会话sid,serial#