Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Techniques informatiques

Oracle - Lister et fermer les verrous posés sur une base de données (locks)

21/04/2022

Voici une requête listant les verrous (locks) posés sur les tables d'une base de données Oracle.

Cette requête croise les tables contenant les requêtes exécutées et les sessions en cours afin de déterminer quelle requête de quelle session provoque un blocage.

WITH liste_requetes AS
   (
   SELECT s.sql_text, s.address, s.hash_value, s.piece
   FROM v$sqltext s
   ORDER BY s.piece
   )

SELECT
prev_exec_start, c.owner, c.object_type, c.object_name,
 b.status, b.machine, b.osuser, b.program,
 b.SID ||','|| b.SERIAL# ||',@'|| b.INST_ID AS ident_session,
(SELECT LISTAGG(sql_text, ', ') WITHIN GROUP (ORDER BY piece) FROM
liste_requetes r WHERE r.address = b.sql_address AND r.hash_value =
b.sql_hash_value ) AS SQL

FROM v$locked_object a
INNER JOIN gv$session b ON b.sid = a.session_id
INNER JOIN dba_objects c ON a.object_id = c.object_id
WHERE b.STATUS = 'ACTIVE'
ORDER BY logon_time

Si besoin, en utilisant le champ concaténant SID, SERIAL et INST_I (nommé ident_session), il est possible de fermer la session bloquante :

ALTER system DISCONNECT SESSION '<ident_session>' IMMEDIATE

La requête suivante permet de générer les lignes pour fermer les sessions ouvertes depuis plus de 5 minutes (300 secondes) :

SELECT 'ALTER system DISCONNECT SESSION ''' || SID ||','|| SERIAL# ||',@'|| INST_ID || ''' IMMEDIATE;'
FROM gv$session
WHERE (SYSDATE - LOGON_TIME)*86400 > 300
Dernière modification le 21/04/2022 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations