FP 某段SQL语句执行时间超过1个小时,并报错:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展

一、出现如下两个错误:
1.某一段SQL语句执行时间超过1个小时;
2.一个小时后,提示如下错误:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展 temp 段ORA-06512: 在 "STG.FP_MO2SAP"

二、检查及处理过程
提示temp表空间有问题,临时表空间主要是用于在排序操作或者大型查询、统计分析操作。
1.先检查临时表空间信息 select * from dba_tablespaces; select * from dba_temp_files; select * from v$tempfile
检查发现临时表空间有32G,当前只执行此语句就把整个表空间用完,初步估计SQL语句有问题,可将语句拷贝出来研究。
如下图是释放后结果图:


2.对SQL语句进行优化,加索引,再次执行语句时间由一个小时变成6秒,成功一半。

CREATE INDEX STG.IDX_TEMP_MO_DBA01 ON STG.TEMP_MO(LOC_ID,ITEM)
LOGGING
TABLESPACE WWFDATA
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
NOPARALLEL;

CREATE INDEX STG.IDX_IN_ITEM_SITE_DBA01 ON STG.IN_ITEM_SITE(ITEM_ID,PROC_TYPE)
LOGGING
TABLESPACE WWFDATA
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
NOPARALLEL;

CREATE INDEX STG.IDX_IN_ITEMBOMROUTING_DBA01 ON STG.IN_ITEMBOMROUTING(PRODUCED_ITEM_ID,SITEID)
LOGGING
TABLESPACE WWFDATA
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
NOPARALLEL;
View Code


3.将此SQL语句加回存储过程FP_MO2SAP后还是比较慢,再继续检查SQL语句。

select count(1) from IN_ITEMBOMROUTING --193027
select count(1) from temp_mo --20473
set serveroutput on
exec show_space('IN_ITEMBOMROUTING');

表记录数有19W条。有可能会把临时表空间吃完,对涉及到的基表做了一个空间占用情况统计,计算一下基表占用19922944字节,大约是19M。还不包括其它的表的字段统计,

4.接下来做一个执行计划和统计分析,得到如下结果:

发现SQL语句里面没有用到temp_mo表

原文地址:https://www.cnblogs.com/Snowfun/p/6069000.html