Lors du cycle d’utilisation normal d’une base de données, il se peut que certaines sessions utilisateurs entrent en conflits entre-elles, consomment trop de ressources, ou gardent des transactions actives depuis trop de temps (de nombreux autres cas peuvent se présenter à nous…).
Dans ce genre de cas, l’administrateur peut être amené à arrêter la session de l’utilisateur. Cette opération peut être réalisée via la série d’opérations suivante :
Il faut dans un premier temps récupérer le SID de la session depuis la vue v$session, en utilisant la requête :
1 |
SQL> SELECT sid, serial# FROM v$session; |
1 2 3 4 5 6 7 |
SID SERIAL# ---------- ---------- 1 1 14 129 136 21 137 7 140 499 |
Remarque : On peut utiliser la clause WHERE pour rechercher une session particulière comme par exemple, une session qui est active depuis « n » minutes, ou qui bloque d’autres sessions…
Il est ensuite possible d’arrêter la session en utilisant la requête SQL suivante :
1 |
SQL> ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE; |
Remarque : Avec sid & serial# les valeurs retournées par la requête précédente.
Si notre base de données, est sur un environnement de type Unix, il est possible d’arrêter le processus au niveau système. Pour se faire, nous devons d’abord récupérer le pid de la session en cours :
1 2 3 |
SQL> SELECT s.sid, s.serial#, p.spid, s.username, s.program FROM v$session s JOIN v$process p ON p.addr = s.paddr WHERE s.type != 'BACKGROUND'; |
1 2 3 |
SID SERIAL# SPID USERNAME PROGRAM ---- -------- ------ --------- ------------------------- 140 507 21376 SYS sqlplus@basmut (TNS V1-V3) |
Vérification du PID sur le serveur :
1 2 |
oracle@basmut:/home/oracle $ ps -ef | grep 21376 | grep -v grep oracle 21376 21373 0 15:16 ? 00:00:00 oracleTEST (DESCRIPTION=...(PROTOCOL=beq))) |
Il ne reste plus qu’a supprimer la connexion via l’instruction suivante :
1 |
oracle@basmut:/home/oracle $ kill 21376 |