Oracle 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段

当Oracle SQL语句遇到无法在表空间TEMP中扩展temp段的错误时,可能是由于游标未关闭导致的。在WebLogic使用长连接的情况下,临时表空间不会被回收。解决方案包括检查临时表空间使用情况、正在运行的会话及游标状态,最终通过重启WebLogic来释放资源。

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

Oracle11g下SQL语句报无法通过 128 (在表空间 TEMP 中) 扩展 temp 段。
把SQL中的WMSYS.WM_CONCAT改为listagg,此SQL就没问题了,说还有很多SQL报错。此时我判断现在是个系统的问题。此问题解决方法如下:

1.用下列的SQL判断临时表空间适用情况

select tablespace_name,
max_gb,
used_gb,
round(100 * used_gb / max_gb) pct_used
from (select a.tablespace_name tablespace_name,
round((a.bytes_alloc - nvl(b.bytes_free, 0)) / power(2, 30),
2) used_gb,
round(a.maxbytes / power(2, 30), 2) max_gb
from (select f.tablespace_name,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible,
‘YES’,
f.maxbytes,
‘NO’,
f.bytes)) maxbytes
from dba_data_files f
group by tablespace_name) a,
(select f.tablespace_name, sum(f.bytes) bytes_free
from dba_free_space f
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
union all
select h.tablespace_name tablespace_name,
round(sum(nvl(p.bytes_used, 0)) / power(2, 30), 2) used_gb,
round(sum(decode(f.autoextensible,
‘YES’,
f.maxbytes,
‘NO’,
f.bytes)) / power(2, 30),
2) max_gb
from v t e m p s p a c e h e a d e r h , v temp_space_header h, v tempspaceheaderh,vtemp_extent_pool p, dba_temp_files f
where p.file_id(+) = h.file_id
and p.tablespace_name(+) = h.tablespace_name
and f.file_id = h.file_id
and f.tablespace_name = h.tablespace_name
group by h.tablespace_name)
order by 4;

2.可以看到正在运行的会话使用临时表空间的情况,不过这里的sql_id并不是当前正在执行的SQL。

select username,session_addr,sql_id,contents,segtype,blocks*8/1024/1024 gb
from v$sort_usage order by blocks desc;

3.查看正在运行的会话打开的游标的SQL,下列查询。

select sid from v$session s where saddr=‘0000000292038458’;

select sql_id,s.sql_fulltext,sorts,rows_processed/executions from v s q l s w h e r e p a r s i n g s c h e m a n a m e = ′ C F M S T E S T ′ a n d e x e c u t i o n s > 0 a n d s o r t s > 0 a n d s q l i d i n ( s e l e c t s q l i d f r o m v sql s where parsing_schema_name='CFMS_TEST' and executions>0 and sorts>0 and sql_id in (select sql_id from v sqlswhereparsingschemaname=CFMSTESTandexecutions>0andsorts>0andsqlidin(selectsqlidfromvopen_cursor where sid=6)
order by 3;

总结:临时表空间回收的前提是:在SQL对应的游标没关闭的情况下,数据库不会去释放临时段。而我们使用的weblogic的连接池中的连接是长连接,游标一直是打开的状态。解决问题的办法就是把weblogic重启一下。

作者:深圳gg
来源:优快云
原文:https://blog.youkuaiyun.com/stevendbaguo/article/details/51119095
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值