Sess uncommited transactions

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

Sess uncommited transactions liste toutes les sessions autres que la session courante possédant une transaction encore ouverte (ni COMMIT ni ROLLBACK), avec le volume d'annulation (undo) déjà consommé — utile avant un arrêt planifié d'instance ou pour repérer une transaction oubliée qui retient des verrous.

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   : Uncommited Transactions                                     |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+

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

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 os_pid                 FORMAT a8                HEADING 'O/S PID'
COLUMN session_program        FORMAT a30               HEADING 'Session Program' TRUNC
COLUMN session_machine        FORMAT a30               HEADING 'Machine'         TRUNC
COLUMN number_of_undo_records FORMAT 999,999,999,999  HEADING '# Undo Records'
COLUMN used_undo_size         FORMAT     999,999,999  HEADING 'Used Undo (MB)'

SELECT
    s.sid                                    sid
  , s.status                                 session_status
  , s.username                               oracle_username
  , s.osuser                                 os_username
  , p.spid                                   os_pid
  , b.used_urec                              number_of_undo_records
  , (b.used_ublk * d.value) / 1024 / 1024    used_undo_size
  , s.program                                session_program
  , s.machine                                session_machine
FROM
    v$process     p
  , v$session     s
  , v$transaction b
  , v$parameter   d
WHERE
      b.ses_addr = s.saddr
  AND p.addr(+)  = s.paddr
  AND s.audsid  <> SYS_CONTEXT('USERENV', 'SESSIONID')
  AND d.name     = 'db_block_size'
/

Le filtre s.audsid <> SYS_CONTEXT('USERENV', 'SESSIONID') exclut la session SQL*Plus qui exécute le script elle-même (forme moderne recommandée, la fonction USERENV('SESSIONID') de la version d'origine reste supportée mais est dépréciée au profit de SYS_CONTEXT).

Voir aussi