要基于回滚段查询关联的会话 SID,可通过以下方法实现:
方法 1:通过事务视图关联查询
SELECT s.sid, r.name AS rollback_segment_name
FROM v$session s
JOIN v$transaction t ON s.saddr = t.ses_addr
JOIN v$rollname r ON t.xidusn = r.usn
WHERE r.name = '&rollname';
注释:
v$transaction.xidusn
字段表示事务使用的回滚段编号,与v$rollname.usn
关联v$rollname.name
为回滚段名称,需替换为实际名称
方法 2:结合锁信息查询
SELECT s.sid, r.name AS rollback_segment_name
FROM v$lock l
JOIN v$session s ON l.sid = s.sid
JOIN v$rollname r ON TRUNC(l.id1/65536) = r.usn
WHERE l.type = 'TX' AND r.name = '&rollname
';
注释:
v$lock.id1
的高 16 位存储回滚段编号(USN),通过TRUNC(id1/65536)
提取l.type='TX'
过滤事务锁
关键视图说明
-
v$rollname
存储所有在线回滚段的信息,包含字段usn
(回滚段编号)和name
(名称) -
v$transaction
包含活跃事务信息,xidusn
字段对应回滚段编号 -
v$session
提供会话详细信息,sid
为会话唯一标识 -
v$lock
记录锁信息,事务锁 (TX
) 的id1
字段包含回滚段信息
操作建议
- 替换回滚段名称:将上述 SQL 中的
回滚段名称
替换为目标回滚段名称(如_SYSSMU922_1763818300$
) - 权限要求:查询需要访问
v$session
、v$transaction
等动态性能视图的权限(通常需 DBA 权限) - 扩展监控:若需观察回滚进度,可结合
v$transaction.used_urec
和used_ublk
字段分析回滚进度