Sess users active sql

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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