正德厚生,臻于至善

undo.sql

  1. 该 SQL 是Oracle 单实例回滚段事务排查的标配语句,实现「会话 – 事务 – 回滚段 – 表空间」全链路关联;
  2. 核心价值:定位长事务、回滚段争用、UNDO 表空间异常的根源会话 / 用户 / 表空间
  3. RAC 适配仅需替换 2 个全局视图 + 新增实例编号,完全保留原格式即可;
  4. 执行前提:用户需具备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;
赞(0) 打赏
未经允许不得转载:徐万新之路 » undo.sql

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册