- 该 SQL 是Oracle 单实例回滚段事务排查的标配语句,实现「会话 – 事务 – 回滚段 – 表空间」全链路关联;
- 核心价值:定位长事务、回滚段争用、UNDO 表空间异常的根源会话 / 用户 / 表空间;
- RAC 适配仅需替换 2 个全局视图 + 新增实例编号,完全保留原格式即可;
- 执行前提:用户需具备
SELECT_CATALOG_ROLE或对应视图的查询权限。
set lines 200 pages 50000
col username for a5;
col name for a30;
col status for a10;
col tablespace_name for a15;
select distinct a.sql_id,a.sid,a.serial#,a.username,b.xidusn,b.xidslot,b.ubablk,b.status,c.usn,c.name,d.extents,d.writes,d.xacts,e.tablespace_name
from v$session a,v$transaction b,v$rollname c ,v$rollstat d, dba_rollback_segs e
where
a.saddr=b.ses_addr
and b.xidusn=c.usn
and c.usn=d.usn
and c.name=e.segment_name
order by e.tablespace_name;
select sid,serial#,status,event,sql_id,s.final_blocking_session,module,program from v$session S where sid=&sid;
select 'ALTER SYSTEM DISCONNECT SESSION '''||sid||','||serial#||''' immediate;'
from v$session
where sid='&sid';
-- RAC专属格式配置,适配所有列,杜绝换行/挤压,字段宽度按需调整
set lines 350 pages 50000
col inst_id for a5; -- RAC实例编号(核心列)
col instance_name for a20; -- 实例名称(直观显示节点,如ORCL_NODE1)
col sql_id for a15; -- 会话执行的SQL ID
col sid for a8; -- 会话ID
col serial# for a10; -- 会话序列号(kill会话必备)
col username for a10; -- 操作用户名
col machine for a40; -- 客户端主机名(定位发起事务的机器)
col program for a40; -- 客户端程序名(PL/SQL/Java/应用进程)
col roll_name for a30; -- 回滚段名称(自定义别名,避免冲突)
col ts_name for a20; -- 回滚段表空间(简写别名,更整洁)
col trans_status for a12; -- 事务状态(加别名区分回滚段状态)
col roll_status for a12; -- 回滚段状态(加别名区分事务状态)
select distinct
a.inst_id, -- RAC核心:集群实例编号(1/2/3)
-- ✅ 修正核心:用gv$instance关联,获取对应实例的名称(彻底解决918报错)
(select g.instance_name from gv$instance g where g.inst_id = a.inst_id) as instance_name,
a.sql_id,
a.sid,
a.serial#,
a.username,
a.machine,
a.program,
b.xidusn as trans_usn, -- ✅ 加别名:事务所属回滚段编号
b.xidslot,
b.ubablk,
b.status as trans_status,-- ✅ 加别名:事务状态(区分回滚段状态)
c.usn as roll_usn, -- ✅ 加别名:回滚段编号(区分事务编号)
c.name as roll_name, -- ✅ 加别名:回滚段名称
d.extents,
d.writes,
d.xacts,
d.status as roll_status, -- ✅ 加别名:回滚段状态(区分事务状态)
e.tablespace_name as ts_name -- ✅ 加别名:表空间名称
from gv$session a, -- RAC全局会话视图(集群全节点)
gv$transaction b, -- RAC全局事务视图(集群全节点)
v$rollname c, -- 无gv$版本,保留原生视图(集群共享)
v$rollstat d, -- 无gv$版本,保留原生视图(集群共享)
dba_rollback_segs e -- 集群共享数据字典,无需修改
where
a.saddr = b.ses_addr
and b.xidusn = c.usn
and c.usn = d.usn
and c.name = e.segment_name
-- ✅ 优先按实例分组,再按表空间/用户名排序,RAC排查更高效
order by a.inst_id, e.tablespace_name, a.username;