原创 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. docker redis实现主从复制

    1.使用docker启动三个redis实例,容器名称分别为:myredis-master-6379,myredis-slave-6380,myredis-slave-6381.通过命令可以看到容器给三 ...

  2. Linux-shell学习笔记2

    1.命令的运行顺序 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』: 由 alias 找到该命令来运行: 由 bash 内建的 (builtin) 命令来运行: 通过 $PAT ...

  3. Cesium专栏-空间分析之坡向分析(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  4. iOS-基于TCP连接<Scoket-服务端>

    一:前言(本文为TCP服务端) TCP首先要服务器开放一个端口 然后客户端去连接服务端的IP地址和端口号 连接成功之后再进行数据传输 要经历三次握手 二:代码在GitHub 1.需要的工具类 自行下载 ...

  5. SSH远程管理

    目录 SSH远程管理 ssh功能 SSH相关命令 Xshell连接不上虚拟机 scp命令 SSH验证方式 优化 免交互expect[扩展] 免交互sshpass[扩展] 简易跳板机 小结 SSH远程管 ...

  6. xshell连接console口

  7. Statements、PreparedStatement及CallableStatement(三)

    当获得了与数据库的连接后,就可以与数据库进行交互了.JDBC Statement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或PL/SQL命令,并 ...

  8. 通过ES6 Module看import和require区别

    前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...

  9. js函数只执行一次,函数重写,变量控制与闭包三种做法

    一.情景需求 调用后台接口需要附带token信息,那么在每个请求的头部添加token的做法就不太优雅了:一个网站请求100次,那就得写添加100次token,假设某天接口有所变动,改起来就十分麻烦了. ...

  10. copy-and-swap idiom

    This answer is from https://stackoverflow.com/a/3279550/10133369 Overview Why do we need the copy-an ...