Oracle切换undo后如何确定使用旧undo的会话信息
Oracle切换undo后如何确定使用旧undo的会话信息
背景
是这样的,最近RAC的磁盘组90%报警,存储空间只能再加2T空间。
而这套RAC的DATA组用了normal冗余,不知道当初哪个大聪明这么搞的,底层还是做了RAID 10的。
领导也不知道不懂这么设置的。
因此,这新的2T创建新磁盘组且使用extern的外部冗余,后续将index和undo切换到新的磁盘组上。
index重建到新表空间就行,而undo通过创建新的undo类型表空间并切换新undo达到迁移目的。
参考mos文档:How to Shrink the datafile of Undo Tablespace (Doc ID 268870.1)
上周五创建新undo并且切换过去后,当时立刻直接删除会报:
ORA-30013: undo tablespace 'UNDOTBS1' is currently in use
原本想着隔个周末两天时间然后今天周一再次进行删除,没想到还是报错。
根据Undo Tablespace Moved To Pending Switch-Out State (Doc ID 341372.1)可知,当默认的undo表空间改变后,原来使用旧undo的活动事务将在v$rollstat.status中显示为“PENDING OFFLINE”状态。
因此可以使用如下脚本查看使用旧undo的活动事务的会话:
col usn for 999 col name for a25 col USERNAME for a15 col STATUS for a15 col TABLESPACE_NAME for a11 col SID for 99999 col SERIAL# for 99999 col PROGRAM for a19 col MACHINE for a25 col OSUSER for a20 SELECT a.usn, a.name, b.status, c.tablespace_name, d.addr, e.sid, e.serial#, e.username, e.program, e.machine, e.osuser FROM v$rollname a, v$rollstat b, dba_rollback_segs c, v$transaction d, v$session e WHERE a.usn=b.usn AND a.name=c.segment_name AND a.usn=d.xidusn AND d.addr=e.taddr AND b.status='PENDING OFFLINE';
以下是我此次查询结果(脱敏):
db1: USN NAME STATUS TABLESPACE ADDR SID SERIAL# USERNAME PROGRAM MACHINE OSUSER ---- --------------------- --------------- ---------- ---------------- ------ ------- --------------- ------------------- ------------------------- -------------------- 9 _SYSSMU9_2162248266$ PENDING OFFLINE UNDOTBS1 0000001783BFD9D8 2129 13 ABCD_EFGH AbcdefghApp.exe WORKGROUP\VM-ABCD-APP23 abcdefgadmin 10 _SYSSMU10_3111847501$ PENDING OFFLINE UNDOTBS1 0000001783C44840 2065 13 ABCD_EFGH AbcdefghApp.exe WORKGROUP\VM-ABCD-APP23 abcdefgadmin db2: USN NAME STATUS TABLESPACE ADDR SID SERIAL# USERNAME PROGRAM MACHINE OSUSER ---- --------------------- --------------- ---------- ---------------- ------ ------- --------------- ------------------- ------------------------- -------------------- 20 _SYSSMU20_2091716515$ PENDING OFFLINE UNDOTBS2 000000177BF53AA0 913 3 ABCD_EFGHG JDBC Thin Client ABCD-App08 abcdefgadmin
经过排查发现会话并没有未commit的会话,而是均使用了含有dblink的select查看,因此产生事务。
经确认可以直接kill。
至此,解决。
分类:
Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了