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

来源:这里教程网 时间:2026-03-03 17:21:14 作者:

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 有问题,产生笛卡尔积的结果。 使用 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,并查看执行计划,来验证是否耗尽临时表空间。

相关推荐