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.

Il parametro è specificato da INST_ID e puoi trovarlo quando interroghi la vista GV $ SESSION.

 

Comando per terminare la sessione con l’opzione INST_ID:

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:

  1. Termina  le sessioni del DB

SQL> ALTER SYSTEM KILL SESSION ‘198,50795 IMMEDIATE ;

  1. Termina le sessioni sul server, come detto non ha sotto processi

  1. La compilazione nel pacchetto non solleva alcun blocco !!


Scopri l’errore che ottieni. Applica la soluzione per risolverlo, quindi continua a giocare 🙂
——————————————————————————————————-

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *