数据库temp文件32G 请教各位大师 ,ORACLE 11G LINUX 系统 ,数据库temp文件32G 了,但是能正常用,应该如何处理? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 检查下temp表空间是被啥用掉了,再分析处理。临时表空间使用率:SELECT a.tablespace_name, trunc(a.BYTES / 1024 / 1024 / 1024) totalG, trunc((a.bytes - nvl(b.bytes, 0)) / 1024 / 1024 / 1024) FREEG, trunc(nvl(b.bytes, 0) / 1024 / 1024 / 1024) usedG, trunc(nvl(b.bytes, 0) / a.BYTES * 100) as usedpercent FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_temp_files GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(T.BYTES_USED) bytes FROM gv$temp_extent_pool T GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name(+);--临时表空间会话级详细占用情况(前10个占用最多的):select * from ( SELECT se.INST_ID, se.username, --数据库用户名 se.SID, --SID se.serial#, --serial# se.status, se.machine, --会话来源主机 se.program, --连接会话使用的程序 se.TADDR, p.spid, --进程号 su.SQL_ID, --SQL_ID su.TABLESPACE, --占用的表空间 su.segtype, --占用表空间的类型 su.CONTENTS, su.BLOCKS --占用的块数,可以反映占用空间大小 FROM gv$session se, gv$sort_usage su, gv$process p WHERE se.saddr = su.session_addr and se.INST_ID = su.INST_ID and se.INST_ID = p.INST_ID and se.PADDR = p.ADDR order by su.BLOCKS desc) where rownum<=10;找出占用临时表空间的真实sql:select ktssosqlid from x$ktsso, v$session where ktssoses = v$session.saddr and ktssosno = v$session.serial#and v$session.sid=2111; (2111根据查出的实际sid修改) 1. temp 文件32G 本身没有问题,temp 不使用会释放,但是大小不会变)1)查询sql 看temp的实际使用情况,2)看alert日志是否报大量temp不足,影响业务2. temp 文件32G,如果真的不够,可以往temp 表空间里面增加temp 文件 1、大量使用使用临时表,2、大数据的排序操作。以上两个因素,都会造成 TEMP 的爆涨。 打开了自动扩展了吧?32G是8K数据块下数据文件最大的大小,猜测临时表空间应该曾经爆掉过。对于整套系统来讲,32G的临时表空间可能无法应对高峰,需要为临时表空间添加更多的临时文件来防止数据库在使用它的时候因为空间问题报错退出。 加temp文件 如何实现等待 急求帮助:Oracle中的to_date()函数有多种日期格式,请问如何由日期格式解析出具体的时间字符串。。。 Oracle的面向对像流行吗,大侠们? 定义表的时候,如何限制属性的取值范围, 热备份脚本错误问题 在线等待! sql取最后三条记录怎么取? oracle不能安装在win2000profession上吗? 怎样建一个view只有最近的10条记录 NVL这个函数干嘛用的?谢谢 oracle定时job问题 数据导入问题 怎样实时监控表A的变化来做到实时插入表B
临时表空间使用率:
SELECT a.tablespace_name,
trunc(a.BYTES / 1024 / 1024 / 1024) totalG,
trunc((a.bytes - nvl(b.bytes, 0)) / 1024 / 1024 / 1024) FREEG,
trunc(nvl(b.bytes, 0) / 1024 / 1024 / 1024) usedG,
trunc(nvl(b.bytes, 0) / a.BYTES * 100) as usedpercent
FROM (SELECT tablespace_name, SUM(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(T.BYTES_USED) bytes
FROM gv$temp_extent_pool T
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name(+);--临时表空间会话级详细占用情况(前10个占用最多的):
select * from (
SELECT se.INST_ID,
se.username, --数据库用户名
se.SID, --SID
se.serial#, --serial#
se.status,
se.machine, --会话来源主机
se.program, --连接会话使用的程序
se.TADDR,
p.spid, --进程号
su.SQL_ID, --SQL_ID
su.TABLESPACE, --占用的表空间
su.segtype, --占用表空间的类型
su.CONTENTS,
su.BLOCKS --占用的块数,可以反映占用空间大小
FROM gv$session se, gv$sort_usage su, gv$process p
WHERE se.saddr = su.session_addr
and se.INST_ID = su.INST_ID
and se.INST_ID = p.INST_ID
and se.PADDR = p.ADDR
order by su.BLOCKS desc
) where rownum<=10;找出占用临时表空间的真实sql:
select ktssosqlid from x$ktsso, v$session where ktssoses = v$session.saddr
and ktssosno = v$session.serial#
and v$session.sid=2111; (2111根据查出的实际sid修改)
2. temp 文件32G,如果真的不够,可以往temp 表空间里面增加temp 文件