ora-1628,undo unable extend.的问题排查脚本

查询分配太多小的extent的undo段。如果一个大查询分配到 太多小的extent的undo段的时候。就容易出现该错误
IF: ORA-1628 Reported During Long Running Transactions (文档 ID 1951032.1)
ORA-01628 errors i.e max # extents (32765) reached for rollback segment <SEGMENT_NAME>
1.确定小的事务分配的undo段
SELECT b.usn,
tablespace_name,segment_name,
bytes "Extent_Size",
count(extent_id) "Extent_Count",
bytes * count(extent_id) "Extent_Bytes"
FROM dba_undo_extents a ,v$rollname b
WHERE status = 'ACTIVE'
and a.SEGMENT_NAME=b.name
group by b.usn,tablespace_name,segment_name, bytes
order by count(extent_id) desc;

2.确定会话事务(需要两个节点各自执行v$rollname,显示单节点的)
select a.inst_id,a.sid, a.serial#,b.XIDUSN,a.SQL_ID, a.username, b.used_urec, b.used_ublk*8/1024/1024 G
from gv$session a, gv$transaction b
where a.saddr=b.ses_addr
and a.inst_id=b.inst_id
and xidusn=2672
order by used_ublk desc

3.怎样评估undo表空间大小

统计undoblks的1s钟最大数量*undo_retention*1.5
select inst_id,max(undoblks)/600*10800*8/1024/1024*1.5 from gv$undostat t group by t.INST_ID;

4.监控undo表空间是否足够

select inst_id,t.BEGIN_TIME,t.END_TIME,t.UNXPBLKREUCNT,t.UNXPSTEALCNT,t.UNXPBLKRELCNT,t.EXPSTEALCNT,t.EXPBLKRELCNT from gv$undostat t where t.UNXPBLKREUCNT>0 order by begin_time desc,inst_id ;
UNXPBLKREUCNT:未过期块重用
UNXPSTEALCNT:未过期块偷窃次数
UNXPBLKRELCNT:未过期块偷窃成功的块数

 5.查找大事务相关的session

select a.inst_id,a.sid, a.serial#,a.SQL_ID, a.username, b.used_urec, b.used_ublk*8/1024/1024 G
from gv$session a, gv$transaction b
where a.saddr=b.ses_addr
and a.inst_id=b.inst_id
order by used_ublk desc

转载于:https://www.cnblogs.com/erwadba/p/9532538.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值