Sess users by cursors

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Voir aussi Sess users by CPU · Sess users by io · Sess users by memory · Sess users by transactions

Sess users by cursors liste les sessions connectées triées par nombre de curseurs actuellement ouverts, avec le pourcentage correspondant par rapport à la limite open_cursors — utile pour repérer une application qui « fuit » des curseurs (ouverts et jamais fermés) avant qu'elle ne heurte ORA-01000: maximum open cursors exceeded.

Même famille de scripts que Sess users by CPU (détail du schéma de requête sur cette page) ; seule la statistique opened cursors current change ici.

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 open_cursors     FORMAT 99,999            HEADING 'Curseurs ouverts'
COLUMN open_pct         FORMAT 999               HEADING 'Ouvert %'

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
  , sstat.value                       open_cursors
  , ROUND((sstat.value/u.value)*100)  open_pct
FROM
    v$process  p
  , v$session  s
  , v$sesstat  sstat
  , v$statname statname
  , (SELECT name, value FROM v$parameter) u
WHERE
      p.addr (+)          = s.paddr
  AND s.sid               = sstat.sid
  AND statname.statistic# = sstat.statistic#
  AND statname.name       = 'opened cursors current'
  AND u.name              = 'open_cursors'
ORDER BY open_cursors DESC;

(à vérifier) : la sous-requête sur v$parameter retourne le paramètre open_cursors de la session qui exécute le script, pas nécessairement celui de chaque session listée — rare en pratique, mais possible si open_cursors a été modifié via ALTER SESSION sur une session particulière. À traiter le pourcentage comme un ordre de grandeur plutôt qu'une valeur garantie exacte pour chaque ligne.

Voir aussi