UNDO 行为

本文介绍 Oracle 数据库中 UNDO 表空间的工作原理,包括 UNDO extent 的三种状态及事务如何请求 UNDO space。此外,还介绍了 V$undostat 和 V$ROLLSTAT 视图的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p class="MsoNormal"><span style="" lang="EN-US">--</span>
<span style="">回滚表空间各区使用状况
</span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US">select</span>
<span style="" lang="EN-US"> status, </span>
<span style="" lang="EN-US">sum</span>
<span style="" lang="EN-US">(blocks)
</span>
<span style="" lang="EN-US">as</span>
<span style="" lang="EN-US"> blocks, </span>
<span style="" lang="EN-US">sum</span>
<span style="" lang="EN-US">(bytes/</span>
<span style="" lang="EN-US">1024</span>
<span style="" lang="EN-US">) </span>
<span style="" lang="EN-US">as</span>
<span style="" lang="EN-US"> Size_Kb<br><span> </span>
</span>
<span style="" lang="EN-US">from</span>
<span style="" lang="EN-US">
dba_undo_extents<br><span></span>
</span>
<span style="" lang="EN-US">where</span>
<span style="" lang="EN-US">
tablespace_name = </span>
<span style="" lang="EN-US">'UNDOTBS01'</span>
<span style="" lang="EN-US"><br><span></span>
</span>
<span style="" lang="EN-US">group</span>
<span style="" lang="EN-US"> </span>
<span style="" lang="EN-US">by</span>
<span style="" lang="EN-US"> status</span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US"></span>
</p>
<p class="MsoNormal"><span style="" lang="EN-US"></span>
</p>
<p>每个<span lang="EN-US">undo extent</span>
可以有三种状态<span lang="EN-US">:</span>
</p>
<p><span lang="EN-US">active:</span>
有活动事务在此<span lang="EN-US">extent</span>

</p>
<p><span lang="EN-US">expired:</span>
已结束的事务,<span lang="EN-US">undo </span>
信息超过<span lang="EN-US">undo_retention</span>
时间限制
</p>
<p><span lang="EN-US">unexpired:</span>
已经结束的事务,<span lang="EN-US">undo </span>
信息未达到<span lang="EN-US">undo_retention</span>
时间限制
</p>
<p>当一个事务开始它将会去寻找可用的<span lang="EN-US">undo block</span>
来存放<span lang="EN-US">undo</span>
信息,它将按照以下顺序请求<span lang="EN-US">undo space.</span>
</p>
<p><span lang="EN-US">1.</span>
先去搜索拥有非<span lang="EN-US">active extent</span>
的<span lang="EN-US">undo segment</span>
,如果没有发现,那么会去创建新的<span lang="EN-US">undo segment,</span>
如果空间不够不能创建,将返回错误
</p>
<p><span lang="EN-US">2.</span>
如果有一个<span lang="EN-US">undo segment</span>
被选中,但是其中<span lang="EN-US">free</span>
的<span lang="EN-US">undo block</span>
并不足以存储该事务的<span lang="EN-US">undo </span>
信息,那么它将尝试创建<span lang="EN-US">extent</span>
,如果没有空间,那么将会进入下一步。
</p>
<p><span lang="EN-US">3.</span>
如果创建新<span lang="EN-US">extent</span>
失败,它将会搜索其他<span lang="EN-US">undo segment</span>
中<span lang="EN-US">expired extent</span>
并重用。
</p>
<p><span lang="EN-US">4.</span>
如果其他<span lang="EN-US">undo segment</span>
中没有<span lang="EN-US">expired extent</span>
可使用,那么它会继续搜索其他<span lang="EN-US">undo segment</span>
中<span lang="EN-US">unexpired extent</span>
并重用。
</p>
<p><span lang="EN-US">5.</span>
如果经过以上尝试还没有可用空间,将会返回错误。
</p>
<p class="MsoNormal"><span lang="EN-US">V$undostat</span>
</p>
<p class="MsoNormal"><span lang="EN-US">EXPSTEALCNT:</span>
<span style="">尝试请求</span>
<span lang="EN-US">expired extent</span>
<span style="">的次数</span>
<span lang="EN-US"><br>
EXPBLKREUCNT:</span>
<span style="">实际使用</span>
<span lang="EN-US">expired
block</span>
<span style="">数</span>
<span lang="EN-US"><br>
UNXPSTEALCNT:</span>
<span style="">尝试请求</span>
<span lang="EN-US">unexpired
extent</span>
<span style="">的次数</span>
<span lang="EN-US"><br>
UNXPBLKREUCNT:</span>
<span style="">实际使用</span>
<span lang="EN-US">unexpired
block</span>
<span style="">数</span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p class="MsoNormal"><span lang="EN-US"></span>
</p>
<p class="MsoNormal"><span lang="EN-US">V$ROLLSTAT</span>
<span style="">中的常用列</span>
<span lang="EN-US"><br>
? USN</span>
<span style="">:回滚段标识</span>
<span lang="EN-US"><br>
? RSSIZE</span>
<span style="">:回滚段默认大小</span>
<span lang="EN-US"><br>
? XACTS</span>
<span style="">:活动事务数</span>
<span lang="EN-US"><br><br></span>
<span style="">在一段时间内增量用到的列</span>
<span lang="EN-US"><br>
? WRITES</span>
<span style="">:回滚段写入数</span>
<span lang="EN-US">(</span>
<span style="">单位</span>
<span lang="EN-US">:bytes)<br>
? SHRINKS</span>
<span style="">:回滚段收缩次数</span>
<span lang="EN-US"><br>
? EXTENDS</span>
<span style="">:回滚段扩展次数</span>
<span lang="EN-US"><br>
? WRAPS</span>
<span style="">:回滚段翻转</span>
<span lang="EN-US">(wrap)</span>
<span style="">次数</span>
<span lang="EN-US"><br>
? GETS</span>
<span style="">:获取回滚段头次数</span>
<span lang="EN-US"><br>
? WAITS</span>
<span style="">:回滚段头等待次数</span>
</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值