Oturum bazlı undo segment kullanımının tespiti
Veritabanındaki bir oturumda kullanılan undo segment bilgisine aşağıdaki sorgu ile ulaşabilirsiniz. Geçmişe yönelik bilgiler de alınabilir.
Sorgudaki koşullar değiştirilerek , bir kullanıcı için ya da aktif oturumlarda kullanılan undo segment bilgilerine ulaşılabilir.
SELECT r.NAME "Undo Segment Name", dba_seg.size_mb, DECODE (TRUNC (SYSDATE - LOGON_TIME), 0, NULL, TRUNC (SYSDATE - LOGON_TIME) || ' Days' || ' + ') || TO_CHAR ( TO_DATE (TRUNC (MOD (SYSDATE - LOGON_TIME, 1) * 86400), 'SSSSS'), 'HH24:MI:SS') LOGON, v$session.SID, v$session.SERIAL#, p.SPID, v$session.process, v$session.USERNAME, v$session.STATUS, v$session.OSUSER, v$session.MACHINE, v$session.PROGRAM, v$session.module, action FROM v$lock l, v$process p, v$rollname r, v$session, ( SELECT segment_name, ROUND (bytes / (1024 * 1024), 2) size_mb FROM dba_segments WHERE segment_type = 'TYPE2 UNDO' ORDER BY bytes DESC) dba_seg WHERE l.SID = p.pid(+) AND v$session.SID = l.SID AND TRUNC (l.id1(+) / 65536) = r.usn AND l.TYPE(+) = 'TX' AND l.lmode(+) = 6 AND r.NAME = dba_seg.segment_name --AND v$session.username = 'ADURUOZ' --AND status = 'ACTIVE' ORDER BY size_mb DESC;
Aşağıdaki sorgu ile de özet bilgi edinilebilir.
SELECT u.tablespace_name tablespace, s.username, u.status, SUM (u.bytes) / 1024 / 1024 sum_in_mb, COUNT (u.segment_name) seg_cnts FROM dba_undo_extents u LEFT JOIN v$transaction t ON u.segment_name = '_SYSSMU' || t.xidusn || '$' LEFT JOIN v$session s ON t.addr = s.taddr GROUP BY u.tablespace_name, s.username, u.status ORDER BY 1, 2, 3;