Come risolvere ORA-04021: timeout occurred while waiting to lock object
La compilazione di un oggetto può dare il seguente errore
select
s.sid, s.serial#, p.spid,
s.username,
s.osuser,
s.program,
s.terminal,
s.module, s.action
, p.tracefile
, s.type
, s.logon_time
, s.state
, s.wait_time, s.seconds_in_wait, s.service_name
from
v$session s,
v$process p
where s.paddr = p.addr ;
Quire the process to find the session that still running
select
a.object,
a.type,
b.sid,b.serial#,s.inst_id,
b.username,
b.osuser,
b.program,
s.status, s.sql_exec_start
from v$access a, v$session b, gv$session s
where a.sid = b.sid
and a.owner = DECODE(UPPER(‘&1’), ‘ALL’, a.object, upper(‘&1’))
and a.object = DECODE(UPPER(‘&2’), ‘ALL’, a.object, upper(‘&2’))
and b.sid = s.sid
and b.serial# = s.serial#
AND s.status = ‘ACTIVE’
order by a.object , sql_exec_start nulls last ;
trova il processo sid (psid) : ps –ef | grep psid
trova ogni sotto processo :
in questo caso non ci sono sotto processi.
Areesta la sessione sul db
SQL> ALTER SYSTEM KILL SESSION ‘sid,serial#’;
se si lavora in un ambiente RAC, è possibile specificare il nodo RAC.
SQL> ALTER SYSTEM KILL SESSION ‘sid,serial#,INST_ID’;
Utilizzando il comando base è possibile esplicitare la clausola IMMEDIATA, in questo caso il padre non ha figlio quindi posso:
- Termina le sessioni del DB
SQL> ALTER SYSTEM KILL SESSION ‘198,50795 IMMEDIATE ;
-
Termina le sessioni sul server, come detto non ha sotto processi
-
La compilazione nel pacchetto non solleva alcun blocco !!
Scopri l’errore che ottieni. Applica la soluzione per risolverlo, quindi continua a giocare 🙂
——————————————————————————————————-