ITPub博客

首页 > 数据库 > Oracle > 临时表空间ORA-1652问题解决

临时表空间ORA-1652问题解决

原创 Oracle 作者:xueshancheng 时间:2021-12-16 11:17:38 0 删除 编辑

1 某业务系统数据库告警如下:

Tue Dec 14 16:50:14 2021

ORA-1652: unable to extend temp segment by 128 in tablespace TEMP1 


2 在17:00 查看临时表空间,几个节点进行查看,使用率为 0% ;但为什么会报临时表空间不足?距离告警时间只有10分钟。

节点 1

TABLESPACE_NAME                 Total(MB)   Used(MB)   Free(MB) Pct. Free(%)

------------------------------ ---------- ---------- ---------- ------------

TEMP1                             215040          0     215040          100

TEMP                              155647          3     155644          100

TEMP2                              28672          0      28672          100

 

节点 2 :

TABLESPACE_NAME                 Total(MB)   Used(MB)   Free(MB) Pct. Free(%)

------------------------------ ---------- ---------- ---------- ------------

TEMP1                             215040        0     215040         100

TEMP                              155647        2     155645         100

TEMP2                              28672        0      28672         100


3   根据 ASH 查看 16:40-16:50 执行的相关 SQL ,在节点 2 上发现如下 SQL 进行排序。


4 查看相关 SQL 的执行计划,发现进行排序耗费的临时表空间为 18E ,即为 18*1024*1024G ,这明显应该是写的 SQL 有问题,产生笛卡尔积的结果。

5  使用 PLSQL 进行对相关 SQL 进行格式化,发现此 SQL 没有 where 条件,故导致笛卡尔积。

select table_A.CONS_ID as "CONS_ID", table_A.CUST_ID as "CUST_ID",

        ...................

        '' as "TYPE_CODE"

   from table_A, table_B, table_C, table_D   order by  ORG_NO, table_A.CONS_NO

6  原因分析:

在查询临时表空间是否够用?如果是RAC,则每个节点都需要进行查询,原因为RAC环境下,临时表空间为共用的,

即在节点1查询临时表空间是够用的,在节点2有可能已经耗尽。如果事件已经发生,不能通过当前会话查询出耗尽临时表空间的SQL,那么可以通过生成每个节点的ASH,查看顶级事件中是否有sort关键字的SQL,并查看执行计划,来验证是否耗尽临时表空间。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69996316/viewspace-2848056/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
本人目前就职于北京海天起点技术服务股份有限公司,从事Oracle数据库有十几年了,对Oracle及goldengate比较精通。

注册时间:2021-03-11

  • 博文量
    60
  • 访问量
    68949