Rollback users

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic (Rollback segments)
Voir aussi Rollback segments · Sess current user transactions

Rollback users identifie les sessions actuellement liées à un segment d'annulation manuel (rollback segment) actif, via un verrou de type TX en mode exclusif (lmode = 6) sur v$lock. Comme Rollback segments, ce script s'adresse aux instances encore en gestion manuelle de l'annulation (UNDO_MANAGEMENT=MANUAL) — sur une instance en Automatic Undo Management, préférer Sess current user transactions ou Sess uncommited transactions.

Script

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Rollback Users                                              |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+

SET LINESIZE 180
SET PAGESIZE 50000
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN rollback_name    FORMAT a25      HEADING 'Rollback 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
    r.name    rollback_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
    v$lock     l
  , v$rollname r
  , v$session  s
WHERE
      s.sid = l.sid
  AND TRUNC(l.id1(+) / 65536) = r.usn
  AND l.type(+) = 'TX'
  AND l.lmode(+) = 6
ORDER BY
    s.sid
/

Le calcul TRUNC(l.id1 / 65536) extrait le numéro de segment d'annulation (usn) encodé dans le premier identifiant du verrou TX — une astuce classique de diagnostic Oracle antérieure à l'existence de colonnes dédiées plus lisibles.

Voir aussi