Aktuelle Transaktionen mit Benutzer und SQL-Statements

Sie möchten ermitteln, welche Transaktionen aktuell in der Datenbank Undo-Records erzeugen und Undo-Blöcke allokieren? Zusätzlich wäre noch der Name des ausführenden Datenbankbenutzers sowie das zugehörige SQL-Statement für Sie interessant?

 

Oracle-Datebank: Aktuelle Transaktionen inkl. Benutzer / SQL
SELECT used_ublk, used_urec, 
       s.osuser, s.username, s.sid, 
       s.serial#, s.program, s.machine,
       a.sql_text, t.start_time
FROM   v$transaction t, 
       v$session     s,
       v$sqlarea     a
WHERE
     (
        (
         s.SQL_ADDRESS   = a.ADDRESS AND 
         s.sql_hash_value  = a.HASH_VALUE
         )
     OR
        (
         s.PREV_SQL_ADDR = a.ADDRESS AND 
         s.PREV_hash_value = a.HASH_VALUE
        )
      )
AND t.ses_addr = s.saddr;

 

Wird eine Transaktion gerade ausgeführt, so erhöht sich die Anzahl genutzer Undo-Sätze (used_urec) und Undo-Blöcke (used_ublk). Wird die Transaktion aktuell zurückgerollt, nehmen die Werte ab.

Bei einem shutdown immediate beispielsweise kann auf diese Weise gemonitort werden, welche Menge an Undo-Informationen zurückzurollen sind, bevor die Datafiles geschlossen werden können.