原创 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. CAD编辑器哪个好用?如何使用CAD编辑器

    说起CAD图纸很多的朋友都很熟悉,因为CAD图纸在很多领域都有广泛的应用.那CAD图纸都是使用CAD编辑器制图软件来进行绘制的,图纸的格式都是为dxf格式或者是dwg格式的.对于才接触CAD的伙伴们来 ...

  2. FCC---Use the CSS Transform Property skewX to Skew an Element Along the X-Axis

    The next function of the transform property is skewX(), which skews the selected element along its X ...

  3. Vue结合后台导入导出Excel问题详解

    话不多说,直接上前端代码 axios({ method: 'post', url: 'http://localhost:19090/exportUser',//这个是请求的地址 params: {// ...

  4. 关于如何获取项目所部署的本机IP和端口的问题

    关于如何获取项目所部署的本机IP和端口的问题 今天在写一个需求的时候碰到一个不常见的问题,在没有继承或者实现服务器提供的接口或者实现类的时候,比如说部署在tomacat上,某个类不去继承servelt ...

  5. HTML基础——表单的应用

    1.表单的构成 一个完整的表单由表单控件(表单元素).提示信息和表单域3个部分构成. 表单控件:包含了具体的表单功能项,如单行文本输入框.密码输入框.复选框.提交按钮.搜索框等. 提示信息:一个表单中 ...

  6. ArcGIS Server10.4 service发布步骤

    准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso 破解文件:Lic10.4.1.ecp #安装Server前, ...

  7. linux学习(六)计划任务命令

    目录 at命令 @(计划任务命令) at命令 at命令用于指定在未来某一时间执行一个任务,该任务只能被执行一次 at [选项] [时间] f:指定包含具体指令的任务文件 q:指定新任务队列名称 l:显 ...

  8. JS&Jquery基础之窗口对象的关系总结

    1.top    该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量.2.opener opener用于在window.open的页面引用执行该wi ...

  9. mssql sqlserver 添加表注释和添加列注释的方法分享

     转自: http://www.maomao365.com/?p=8919 摘要: 下文讲述使用sql脚本对数据表或数据列添加注释(备注说明)的方法分享,如下所示: 实验环境:sql server 2 ...

  10. 以特定用户和组来执行某个程序 - linux

    运行cockpit 服务时,我们指定运行此程序的用户和组:cockpit-ws cockpit-ws 我们使用 sudo -u -g 命令来进行运行: sudo -u cockpit-ws -g co ...