解决方案 »

  1.   

     产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。
    参考http://www.cnblogs.com/HondaHsu/archive/2012/07/16/2593916.html
      

  2.   

    根本原因两个时间点pga的使用情况不一样,pgq进行排序操作空间不够,
    而临时表空间不能扩展或者达到峰值,所以报这个错误。
    解决办法,扩容临时表空间,这个官方文档直接就提到了。可以采用简单
    的alter tablespace temp add tempfile 'xx' size  xxM;
    或者如果经常出现这种情况,适当调整pga大小
      

  3.   

    依据现网情况,不能进行扩展,请问调整pga大小,是否需要重启实例呢,如果需要的话,这个办法也没法采用。
    我在网上看到,有这样的解决方法,不知道是什么意思,影响有多大呢,具体方法:1、select ts#, name from sys.ts$ ; 2、alter session set events 'immediate trace name DROP_SEGMENTS level 4' ; 说明: 
    temp表空间的TS# 为 3*, So TS#+ 1= 4。不知道能否详细解决解释一下呢
      

  4.   

    是要重启。这些参数只能重启后生效的。
    你下面写的句子是修改扩展参数的,修改后每次扩展值不一样,但是如果无法扩展,这样也不行的。
    不过你上面写的建临时表不错,可以把一些大表的连接分步骤进行操作,建一些临时表。
    现在把过程改了,建了中间表,过程正常跑没问题了,但是有个问题,我没想明白,还是要请教下。首先,我先把过程大概说下,从数据仓库抽数据插入到ADB(另外一个库)的一张表里,sql非常简单,而且也优化过了,数据仓库的四张表数据量基本都在。问题就是从数据仓库抽数据,这些数据不是应该先放到ADB的temp表空间里么,为啥会因为数据仓库temp表空间紧张造成这样的问题出现呢?难道是先放到数据仓库的temp表空间里,再抽到ADB的temp表空间里进行插入么?
      

  5.   

    不是先放到temp表空间,只是占用temp表空间进行排序等临时操作。
    你用四张表生成一张表,这四张表肯定进行大表连接等动作,
    这些动作产生的排序等操作在原库即你的数据仓库库里面完成,然后插入新库即你的ADB库。
    这中间的排序等占用pga的动作,因为太大pga装不下,所以在临时表空间temp中完成,而
    temp表空间无法扩展,这就导致四表操作无法继续,就报错。
    误区:数据是放在永久表空间,不可能存放在临时表空间中的,临时表空间只是进行排序等临时性操作,没有存放数据。