Spesso può capitare di lanciare una procedura ed accorgersi solo dopo aver premuto il bottone di avere commesso gravi errori come ad esempio loop infiniti ed altre cose simili.
In questi casi spesso stoppare il processo non produce alcun risultato ed il client rimane appeso ad attendere che oracle gli restituisca il controllo.
Può essere utile in questo caso individuare le proprie sessioni per cercare di effettuare il il kill della sessione incriminata.
Io utilizzo la seguente query che permette di individuare le proprie sessioni (è chiaramente necessario modificare il valore dello username) e restituisce anche in output il comando per killare la sessione:
SELECT s.*,
p.spid,
s.username,
s.program,
'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''' IMMEDIATE;' as session_id
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND'
AND s.username = 'USERNAME';
A volta il comando nonè comunque sufficiente a far terminare il processo e la sessione assume lo stato di MARKED FOR KILL. Se non si può proprio attendere che termini da sola in questo caso l'unica soluzione è quella di andare a terminare tramite shell il processo direttamente dal sistema operativo.
Naturalmente non tutti gli utenti dispongono dei permessi per killare una sessione. Nel caso non disponiate delle autorizzazioni dovrete rivolgervi al DBA.