Sess users active sql
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Voir aussi | Sess users active · Session plus consommatrices |
Sess users active sql liste les sessions actives et, pour chacune, le texte de la
requête SQL en cours d'exécution (les 1024 premiers caractères) — utile pour répondre
rapidement à « qui fait quoi en ce moment sur l'instance ». Contrairement à
Sess users active, ce script interroge les vues v$* d'une seule instance
(pas gv$*) : à exécuter sur chaque nœud en environnement RAC, ou à adapter en
gv$ si besoin.
La clause s.audsid <> userenv('SESSIONID') exclut délibérément la session qui
exécute le script elle-même du résultat — sans elle, SQL*Plus se listerait lui-même en train
d'exécuter... ce script.
La jointure vers v$sqlarea se fait via sql_address/
sql_hash_value, la méthode historique pour retrouver le SQL courant d'une
session. Depuis Oracle 10g, v$session expose aussi directement une colonne
sql_id qui simplifie cette jointure (v$sql/v$sqlarea
sur sql_id) — (à vérifier selon version), l'ancienne méthode reste
fonctionnelle pour compatibilité.
Script
SET LINESIZE 180
SET PAGESIZE 50000
SET FEEDBACK 6
SET VERIFY OFF
COLUMN sid FORMAT 999999 HEADING 'SID'
COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID'
COLUMN session_status FORMAT a9 HEADING 'Statut'
COLUMN oracle_username FORMAT a18 HEADING 'Utilisateur Oracle'
COLUMN os_username FORMAT a18 HEADING 'Utilisateur OS'
COLUMN os_pid FORMAT a8 HEADING 'PID OS'
COLUMN session_machine FORMAT a30 TRUNC HEADING 'Machine'
COLUMN session_program FORMAT a40 TRUNC HEADING 'Programme'
COLUMN current_sql FORMAT a85 FOLD_AFTER WRAP HEADING 'SQL en cours'
SELECT
s.sid sid
, s.serial# serial_id
, s.status session_status
, s.username oracle_username
, s.osuser os_username
, p.spid os_pid
, s.machine session_machine
, s.program session_program
, SUBSTR(sa.sql_text, 1, 1024) current_sql
FROM
v$process p
, v$session s
, v$sqlarea sa
WHERE
p.addr (+) = s.paddr
AND s.sql_address = sa.address(+)
AND s.sql_hash_value = sa.hash_value(+)
AND s.audsid <> userenv('SESSIONID')
AND s.username IS NOT NULL
AND s.status = 'ACTIVE'
ORDER BY sid;
Voir aussi
- Sess users active — mêmes sessions actives, sans le SQL en cours, mais RAC-aware
- Session plus consommatrices — approche complémentaire (par requête plutôt que par session)