0 voti
2.7k visite
quesito posto in DBA da (1.9k punti)

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.

Fai il log in oppure registrati per rispondere al quesito.

Domande correlate

0 voti
0 risposte 11.3k visite
quesito posto 7 Dicembre 2013 in DBA da carlo10 (1.9k punti)
0 voti
0 risposte 4.2k visite
+2 voti
0 risposte 459 visite
quesito posto 24 Ottobre 2014 in DBA da stefanogoria (140 punti)
0 voti
0 risposte 1.7k visite
0 voti
0 risposte 63 visite
quesito posto 23 Febbraio 2014 in SQL e PLSQL da carlo10 (1.9k punti)
...