How to monitor long running transactions

The following select will show all transactions that started more then half an hour ago (1/48 of a day)

select t.start_time, t.used_ublk, s.username, s.sid, s.serial#, r.segment_id, r.segment_name
  from v$transaction t, v$session s, dba_rollback_segs r
  where t.ses_addr = s.saddr 
    and t.xidusn = r.segment_id
    and t.start_date < sysdate-1/48;