Undo users

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic (Undo)
Voir aussi Undo segments · Undo contention

Undo users liste les sessions détenant actuellement une transaction active (verrou TX en mode exclusif, lmode = 6) et retrouve le segment d'annulation associé à partir de l'identifiant encodé dans V$LOCK.ID1 (TRUNC(id1/65536) correspond au numéro de segment UNDO, XIDUSN). Compatible RAC (vues GV$).

Pratique pour identifier rapidement quelle session est à l'origine d'une transaction longue qui retient de l'UNDO (et peut donc provoquer des ORA-01555 pour les lecteurs cohérents).

Script

-- Sessions avec transaction active et segment UNDO associé (RAC-compatible)
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF

COLUMN instance_name      FORMAT a8         HEADING 'Instance'
COLUMN undo_name          FORMAT a25        HEADING 'Undo Name'
COLUMN sid                FORMAT 999999     HEADING 'SID'
COLUMN serial_id          FORMAT 99999999   HEADING 'Serial ID'
COLUMN session_status     FORMAT a9         HEADING 'Status'
COLUMN oracle_username    FORMAT a18        HEADING 'Oracle User'
COLUMN os_username        FORMAT a18        HEADING 'O/S User'
COLUMN session_machine    FORMAT a30        HEADING 'Machine'         TRUNC
COLUMN session_program    FORMAT a40        HEADING 'Session Program' TRUNC

SELECT
    i.instance_name     instance_name
  , r.name               undo_name
  , s.sid                sid
  , s.serial#            serial_id
  , s.status              session_status
  , s.username             oracle_username
  , s.osuser               os_username
  , s.machine               session_machine
  , s.program                session_program
FROM
                     gv$session  s
    INNER JOIN       gv$instance i ON (s.inst_id = i.inst_id)
    INNER JOIN       gv$lock     l ON (s.sid = l.sid AND i.inst_id = l.inst_id)
    LEFT OUTER JOIN  sys.undo$   r ON (TRUNC(l.id1 / 65536) = r.us#)
WHERE
      l.type  = 'TX'
  AND l.lmode = 6
ORDER BY
    i.instance_name
  , s.sid;

Voir aussi

  • Undo segments — détail (taille, wraps, shrinks) du segment associé
  • Undo contention — mesurer la contention globale sur l'UNDO tablespace