Oracle 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段
2016-04-11 10:02
645 查看
开发人员找我,Oracle11g下SQL语句报无法通过 128 (在表空间 TEMP 中) 扩展 temp 段。因为在开发环境上,初步判断是SQL的问题,把SQL中的WMSYS.WM_CONCAT改为listagg,此SQL就没问题了,等了一会,开发人员再次找到我,说还有很多SQL报错。此时我判断现在是个系统的问题。之前写过一篇,2016-1-8
ORA-1652: unable to extend temp segment by 128 in tablespace解决方案,也是解决这个问题的,不过并不适用这个场景。此问题解决方法如下:
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$temp_space_header h, v$temp_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$sql s
where parsing_schema_name='CFMS_TEST' and executions>0 and sorts>0
and sql_id in (select sql_id from v$open_cursor where sid=6)
order by 3;
总结:临时表空间回收的前提是:在SQL对应的游标没关闭的情况下,数据库不会去释放临时段。而我们使用的weblogic的连接池中的连接是长连接,游标一直是打开的状态。解决问题的办法就是把weblogic重启一下,询问过开发组,说有差不多一年没有重启系统了。
ORA-1652: unable to extend temp segment by 128 in tablespace解决方案,也是解决这个问题的,不过并不适用这个场景。此问题解决方法如下:
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$temp_space_header h, v$temp_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$sql s
where parsing_schema_name='CFMS_TEST' and executions>0 and sorts>0
and sql_id in (select sql_id from v$open_cursor where sid=6)
order by 3;
总结:临时表空间回收的前提是:在SQL对应的游标没关闭的情况下,数据库不会去释放临时段。而我们使用的weblogic的连接池中的连接是长连接,游标一直是打开的状态。解决问题的办法就是把weblogic重启一下,询问过开发组,说有差不多一年没有重启系统了。
相关文章推荐
- ORACLE临时表—ON COMMIT DELETE ROWS,ON COMMIT PRESERVE ROWS
- support.oracle.com-1344854.1-ebs工作流
- oracle 简述
- [数据库] Navicat for Oracle设置唯一性和递增序列实验
- oracle最大连接数
- oracle学习总结2
- ORACLE中的varchar2()与nvarchar2()的区别
- oracle11g 在 16核 64g 的pc server上利用hugePages提升性能
- Oracle之分页查询
- Oracle--分析函数
- 解决oracle 端口 1521 本机127可通 其他ip不通
- OracleClient使用整理
- Oracle数据库删除数据
- 转载:oracle的shared server模式和dedicated server模式
- oracle视图总结(创建、查询、改动、删除等)
- oracle小数点前零丢失的问题
- 【Oracle】4.约束
- Oracle11g 新特性 虚拟列
- Oracle VM + centos7.1+openstack kilo 多结点安装教程---基础环境配置(4)
- 【Oracle】3.模糊查询