原创 Oracle 作者:wzq609 时间:2015-02-04 22:11:07 17183 0

前言:在检查数据库的alert日志,发现数据库报了ORA-1652: unable to extend temp segment的错误,以下记录的是整个处理过程:

1、检查当前数据库的表空间的大小,脚本如下

select file_name,file_id,bytes/1024/1024,status,autoextensible TABLESPACE_NAME from DBA_TEMP_FILES;

2、当前数据库的temp表空间已经设置32GB了,一般情况下如果临时表空间在20GB左右就够了(需要根据数据库的表数量级作为判断标准)

根据对系统的了解,初步判断这个增长明显是异常行为;

(如果表空间太小的话,可以通过语句增加:ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 10240M AUTOEXTEND OFF;)

3、因为每次报错都是在凌晨,所以不可能不睡觉一直跟踪临时表空间的使用情况,还好可以使用Oracle诊断事件跟踪ORA-1652事件,该诊断事件对系统的性能影响很小,因为只有在发生这个错误的时候,系统才会写入信息到alert日志中;

跟踪的级别分为三个等级:

  • 在session级别启用数据库的跟踪:ALTER SESSION SET EVENTS '1652 trace name errorstack';
  • 在系统级别启用数据库的跟踪:ALTER SYSTEM SET EVENTS '1652 trace name errorstack';
  • 把该参数写入到spfile文件中: ALTER SYSTEM SET EVENT = '1652 trace name errorstack'  SCOPE = SPFILE;
    (关于参数的详细设置,也整理了一个文档,可以在博客中搜索)

对应的关闭脚本如下:

  • ALTER SESSION SET EVENTS '1652 trace name context off';
  • ALTER SYSTEM SET EVENTS '1652 trace name context off';
  • ALTER SYSTEM RESET EVENT SCOPE = SPFILE SID = '*';

4、第二天的时候,果然又报错了,详细的报错信息如下:

ORA-1652: unable to extend temp segment by 128 in tablespace                 TEMP
Errors in file '/u01/app/oracle/diag/rdbms/orcl/ORCL/trace/orcl_m000_15204728.trc:

打开相应的报错信息如下:

*** 2015-02-04 00:12:07.836
*** SESSION ID:(556.17195) 2015-02-04 00:12:07.836
*** CLIENT ID:() 2015-02-04 00:12:07.836
*** SERVICE NAME:(SYS$BACKGROUND) 2015-02-04 00:12:07.836
*** MODULE NAME:(MMON_SLAVE) 2015-02-04 00:12:07.836
*** ACTION NAME:(0000010 FINISHED190) 2015-02-04 00:12:07.836
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=1, mask=0x0)
----- Error Stack Dump -----
ORA-01652: unable to extend temp segment by 128 in tablespace PSAPTEMP
----- Current SQL Statement for this session (sql_id=2d1p0p5k3f8fu) -----
select p, NULL, NULL from (select count(*) p from v$rman_status  where operation = 'BLOCK MEDIA RECOVERY')
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object

经过以上跟踪,终于知道了导致临时表空间耗光的罪魁祸首的原因,接下来是对语句进行分析;

5、另外需要注意的是,以上的跟踪出来的情况并不一定是主要原因,可能是压垮骆驼的最后一根稻草,因为前面有一条语句用了95%的TEMP表空间,紧接着又有一条语句用了6%的TEMP表空间,这个时候系统会记录第二条语句。但是真正的原因是前面那条使用了95%TEMP的表空间的语句;

在正常的情况下,可以监控表空间里面的内容的占用情况,也能分析出问题的原因,脚本如下:

SELECT S.sid || ',' || S.serial# sid_serial,
       S.username,
       T.blocks * TBS.block_size / 1024 / 1024 mb_used,
       T.tablespace,
       T.sqladdr address,
       Q.hash_value,
       Q.sql_text
FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS
WHERE T.session_addr = S.saddr
   AND T.sqladdr = Q.address(+)
   AND T.tablespace = TBS.tablespace_name
ORDER BY S.sid;

可以发现SID/SERIAL为5/1273的SESSION消耗了大量的temp表空间;

6、以上提供了整个问题的解决方法,建议大家动手试下,实验的步骤如下:

a、创建一个大表;

b、进行索引的创建;

c、诊断事件跟踪ORA-1652事件的开启;

d、再次创建索引;

e、检查报警日志;

总结:学习就是不断实验和总结的一个过程,每次动手解决记录问题的过程总是乐趣无穷;

......................................................................................................................................................................………………………………………

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )

ORACLE ORA-1652的解决方法的更多相关文章

  1. Oracle OCI-22053:溢出错误解决方法

    原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...

  2. 经历:asp.net oracle 部署问题以及解决方法

    原文:[原创]经历:asp.net oracle 部署问题以及解决方法 精简的美丽...... 一.环境    开发环境        win7 64bit         Vs2010       ...

  3. Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法

    asp.net程序编写完成后,发布到IIS,经常出现的一个问题是连接不上Oracle数据库,具体表现为Oracle的本地NET服务配置成功:用 pl/sql 等工具也可以连接上数据库,但是通过浏览器中 ...

  4. Oracle数据库TNS错误解决方法

    ORA-12154: TNS:could not resolve the connect identifier specified ,即无法解析指定的连接 标识符.这说明缺少了一个环境变量,TNS_A ...

  5. Oracle用户被锁定解决方法

    解决方法: 1.用dba角色登陆:2.输入下面格式命令解锁: alter user 用户名 account unlock;3.如果密码忘记了,输入下面格式命令修改密码: alter user 用户名 ...

  6. oracle ORA-00119和ORA-00132解决方法

    ORA-00119 ORA-00132解决方法. 思路:*.local_listener错误导致.要*.local_listener就要修改spfile文件,因为oracle默认是以spfile文件启 ...

  7. plsql developer字符集和oracle字符集不一致的解决方法(转)

    如果oracle安装选择的字符集与PLSQL Developer的字符集不同,则打开 PLSQL Developer时会提示字符不一致可能造成问题: 定位到注册表的以下位置: HKEY_LOCAL_M ...

  8. PLSQL Developer不支持Oracle 64位客户端解决方法

    问题描述: 在虚拟机同网段,搭建Oracle 11.2.04数据库64位的,本机操作系统Win10 x64和PLSQL 9.03,目前想利用PLSQL远程登录ORACLE数据库操作.当初用 insta ...

  9. [原创]经历:asp.net oracle 部署问题以及解决方法

    精简的美丽...... 一.环境    开发环境        win7 64bit         Vs2010        Oracle 11g r2 64bit        <inst ...

  10. oracle 提示口令失效解决方法

    Oracle错误代码:ORA-28002. 受影响版本:Oracle11g以上版本. 导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TI ...

随机推荐

  1. 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. nvprof 使用记录; 以及使用 nvprof 查看tensorflow-gpu 核函数运行记录

    最近需要使用 nvprof 此时cuda 程序运行的性能,下面对使用过程进行简要记录,进行备忘: 常用使用命令:nvprof --unified-memory-profiling off python ...

  3. 如何快速查看 group 对应的id

    最近需要获取group 对应的id 数字号码,突然想不起来怎么获得了,现在在这里进行备忘一下: $ cut -d: -f3 < <(getent group sudo) getent gr ...

  4. 昨天周末晚上没有出去,码了一小段,先留着kangkang。

    昨天周末晚上没有出去,码了一小段,先留着kangkang. import numpy as npimport matplotlibmatplotlib.use('Agg')import matplot ...

  5. 关于华为模拟器(eNSP)添加路由器启动后一直打印#号的原因

    操作系统为win10 专业版 1903:1.首先打开控制面板,找到windows defender防火墙,在“允许应用通过防火墙”中把和espn相关的两个的专网和公网都勾选上,最后确定:然后重启华为模 ...

  6. go语言设计模式之interpreter

    interpreter.go package interpreter import ( //"fmt" "strconv" "strings" ...

  7. 【poj1430】Binary Stirling Numbers(斯特林数+组合数)

    传送门 题意: 求\(S(n,m)\% 2\)的值,\(n,m\leq 10^9\),其中\(S(n,m)\)是指第二类斯特林数. 思路: 因为只需要关注奇偶性,所以递推式可以写为: 若\(m\)为偶 ...

  8. java之三元运算符

    逻辑运算 ? m : n;如果逻辑运算为真,则返回m,否则返回n 实例: 判断i,j两个数的大小,如果a较大,则输出1,否则输出0: 找到i,j,k三个数中的最大值: public class Tes ...

  9. MySQL中使用group_concat遇到的坑

    在使用group_concat的过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是10 ...

  10. 分析FAT32内部结构-入门篇-

    FAT32(File Allocation Table)是一种32位的FAT文件系统,微软在1996年8月发布. FAT32的数字32是下面会讲到的FAT中每个表项的长度. 磁盘(硬盘)是数据的载体, ...