事务在回滚的时候,drop掉相关的表。事务会停止回滚,相关的undo段会自动offline...

本文探讨了Oracle数据库中UNDO Segment自动离线的问题,并提供了详细的测试步骤及解决办法,包括如何通过特定的SQL操作触发离线状态及如何使离线的UNDO Segment重新上线。

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

最近发现测试环境中oracle的undo segment,大量的自动offline。排查了一下

结论:
在回滚的时候,如果将表做了drop table <> purge;操作。回滚会自动结束。涉及的undo segments会自动offline(不会立即offline);
测试过程中,offline中的undo回滚中的区,可以被online的undo segments使用。

测试。
1.将undo表空间使用完
SQL> insert into emp select * from emp;

14 rows created.

SQL> /

………………

SQL> /
insert into emp select * from emp
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'

SQL>
2.kill会话,自动回滚
3.另起一个会话,产生大量的事务,消耗undo。发现offline中的extent被使用

SQL> select SEGMENT_NAME,EXTENT_ID,BYTES from dba_extents where segment_name in (select SEGMENT_NAME from dba_rollback_segs where STATUS='OFFLINE')

SEGMENT_NAME EXTENT_ID BYTES
--------------------------------------------------------------------------------- ---------- ----------
_SYSSMU12_3580111010$ 0 65536
_SYSSMU12_3580111010$ 1 65536
_SYSSMU12_3580111010$ 2 65536
_SYSSMU13_3093638253$ 0 65536
_SYSSMU13_3093638253$ 1 65536
_SYSSMU13_3093638253$ 2 65536
_SYSSMU13_3093638253$ 3 65536
_SYSSMU13_3093638253$ 4 65536
_SYSSMU13_3093638253$ 5 65536
_SYSSMU13_3093638253$ 6 65536
_SYSSMU13_3093638253$ 7 65536

SEGMENT_NAME EXTENT_ID BYTES
--------------------------------------------------------------------------------- ---------- ----------
_SYSSMU14_3308680137$ 0 65536
_SYSSMU14_3308680137$ 1 65536
_SYSSMU14_3308680137$ 2 65536
_SYSSMU15_4173493555$ 0 65536
_SYSSMU15_4173493555$ 1 65536
_SYSSMU16_3198972214$ 0 65536
_SYSSMU16_3198972214$ 1 65536
_SYSSMU17_3974766379$ 0 65536
_SYSSMU17_3974766379$ 1 65536
_SYSSMU17_3974766379$ 2 65536
_SYSSMU17_3974766379$ 3 65536

SEGMENT_NAME EXTENT_ID BYTES
--------------------------------------------------------------------------------- ---------- ----------
_SYSSMU17_3974766379$ 4 65536
_SYSSMU17_3974766379$ 5 65536
_SYSSMU18_289737016$ 0 65536
_SYSSMU18_289737016$ 1 65536

26 rows selected.

SQL> /

SEGMENT_NAME EXTENT_ID BYTES
--------------------------------------------------------------------------------- ---------- ----------
_SYSSMU12_3580111010$ 0 65536
_SYSSMU12_3580111010$ 1 65536
_SYSSMU13_3093638253$ 0 65536
_SYSSMU13_3093638253$ 1 65536
_SYSSMU14_3308680137$ 0 65536
_SYSSMU14_3308680137$ 1 65536
_SYSSMU15_4173493555$ 0 65536
_SYSSMU15_4173493555$ 1 65536
_SYSSMU16_3198972214$ 0 65536
_SYSSMU16_3198972214$ 1 65536
_SYSSMU17_3974766379$ 0 65536

SEGMENT_NAME EXTENT_ID BYTES
--------------------------------------------------------------------------------- ---------- ----------
_SYSSMU17_3974766379$ 1 65536
_SYSSMU18_289737016$ 0 65536
_SYSSMU18_289737016$ 1 65536

14 rows selected.

SQL>

 

处理方法:

1.执行下列语句,生成undo segment online语句。

select 'alter rollback segment "'||segment_name||'" online;' from dba_rollback_segs where owner<>'SYS'  and instance_num=2 and status<>'ONLINE';

2.设置"_smu_debug_mode"=4 。然后将段online

SQL> ALTER SYSTEM SET "_smu_debug_mode"=4  sid='*' SCOPE=MEMORY;

System altered.

SQL> alter rollback segment "_SYSSMU136_3870040108$" online;

3.执行完成后,设置"_smu_debug_mode"=0;

SQL> ALTER SYSTEM SET "_smu_debug_mode"=0  sid='*' SCOPE=MEMORY;

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值