Undo users
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