UNDO表空间清理
Oracle数据库想清理undo表空间
1.新建UNDO表空间UNDOTBS2
2.设置为默认UNDO表空间
3.查看undotbs1是否有使用的段,发现有很多段都是online状态
4.等待一周,发现还是有很多的段是online状态
问题:如和不重启,可以不影响生产的情况下删掉undotbs1表空间?
已经尝试过drop 表空间和offline表空间,均失败报错。
我来答
添加附件
收藏
复制链接
微信扫码分享

在小程序上查看
分享
添加附件
问题补充
1条回答
默认
最新
--查看active状态的segment 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; --查看具体 undo segment 的情况 SELECT b.usn, --undo segment NO. tablespace_name, segment_name, bytes "Extent_Size", status, 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 and a.SEGMENT_NAME ='_SYSSMU479_2990344083$' group by b.usn, tablespace_name, segment_name, bytes,status order by count(extent_id) desc; -- 通过usn查看会话中的事务状态,正在运行什么sql select start_time, --事务起始时间 s.SID, -- session id s.username, --用户名 s.MACHINE, --机器名称 s.OSUSER, --登录名 pr.SPID, r.name, --回滚段名称 ubafil, --Undo block address (UBA) filenum ubablk, --UBA block number t.ses_addr, t.status, --会话状态 (used_ublk * p.value) / 1024 blk, --使用的回滚段空间 used_urec, --使用的undo 记录 , s1.SQL_ID, --sql_id s1.SQL_TEXT --sql文本 from v$transaction t, v$rollname r, v$session s, v$parameter p, v$sql s1 ,v$process pr where xidusn = usn and s.saddr = t.ses_addr and p.name = 'db_block_size' and s.SADDR = s1.ADDRESS(+) and s.paddr = pr.addr(+) and xidusn = 1505 order by 1;
复制
可能部分会话虽然事务结束了,但是undo块头还持有着,根据上面的sql定位是否异常会话,杀掉这些会话释放undo占用


打赏 0

回答交流
Markdown
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
添加图片链接
上传图片
导航目录
Markdown语法参考
请输入正文
提示
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
