各位好:
    我有一个procedure,在测试环境运行正常,但生产环境执行报01652错误。我跟踪了一下后台的临时表空间文件temp01.dbf,测试环境420多M就够了,但生产环境在执行过程中就一直增加,增加到1G以上还没有执行完,如果将该临时表空间设为非扩展的,设置1G大小,则报这个错误。
    当然我的脚本效率确实不高,只是怎么也不会花这么大的临时表空间啊!并且测试环境都ok了,这可能是什么原因呢?

解决方案 »

  1.   

    临时表空间并不是你一个session在用的,毕竟你现在是生产库.再一个,v$sort_usage看看目的什么情况? 与v$session关联查查你这个会话当前使用了多少temp segment
      

  2.   

    不知道对你有没有帮助:ORA-01652解决一例2008-04-04 16:16ORA-01652解决一例
    应用程序在执行一个存储过程时报如下错误:
    ORA-01652: 无法通过256(在表空间NEW_TEMP中)扩展 temp 段 
    ORA-06512: 在"NEW1.PACK_DATA_FX", line 60 
    ORA-06512: 在"NEW1.PROC_FXTZ0", line 7 ORA-06512: 在line 1 
           通常来说如果出现该错误是由于临时表空间空间不足所致,只要给表空间添加数据文件就能解决问题(alter tablespace ts_name add tempfile file_name size n M)。当然最好是检查应用程序的设计,以优化排序操作。
    但通过检查发现应用程序没有大的排序操作。这时我们就把注意力放在表空间的数据文件上,检查一下数据文件的状态。 
    SQL> select file#,status from v$tempfile;    FILE# STATUS
    ---------- -------
          1 ONLINE
          2 ONLINE
          3 ONLINE
          4 OFFLINE
    果不其然,问题就出现在数据文件上,我们看到编号为4的临时文件状态为不在线。我们首先找出对应的临时文件:
    SQL> select tablespace_name,file_name from dba_temp_files where file_id=4;TABLESPACE_NAME             FILE_NAME
    ------------------------------ ----------------------------------------
    NEW_TEMP                       D:\ORACLE\ORADATA\HSMIS\NEW_TEMP01.DBF再把临时文件的状态改为在线:SQL> alter database tempfile 'd:\oracle\oradata\hsmis\new_temp01.dbf' online;数据库已更改。这样问题就得以良好解决。
    http://www.itpub.net/266090.htmlhttp://bbs.chinaunix.net/archiver/?tid-348973.html
    ORA-01652: 无法通过(在表空间中)扩展 temp 段,如何解决?本地和对端数据库版本都是 Oralce9,通过 dbLink 方式建立连接。
    报错的语句是 
    insert into t
           select * from t@dbLink;
    错误信息是“ORA-01652: 无法通过(在表空间中)扩展 temp 段”。网上搜了一下文章,找到原因有 2 条,一是临时表空间不够,二是需要调整表空间的参数(ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);)。因为我对表空间的参数不熟悉,所以只采用增加表空间的方法,但是我已经把表空间额外增加了 3G 的空间,结果问题依然(不过对端的表的记录总数为 73926307,我仍不知道 3G 空间是否足够)。查了一下临时表空间的信息:SELECT * FROM SYS.DBA_TABLESPACES;
    TABLESPACE_NAME     BLOCK_SIZE     INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS     MAX_EXTENTS    PCT_INCREASE
    TEMP             4096           1048576           1048576        1                                0MIN_EXTLEN    STATUS       CONTENTS    LOGGING    EXTENT_MANAGEMENT    ALLOCATION_TYPE PLUGGED_IN     SEGMENT_SPACE_MANAGEMENT
    1048576       ONLINE       TEMPORARY    NOLOGGING LOCAL                UNIFORM           NO          MANUAL临时表空间的参数INITIAL_EXTENT、NEXT_EXTENT值都是 1048576(1G),问题是不是出在这里(我额外增加的 3G 空间是分别创建 3 个大小为 1G 的数据文件),不能“跨越”第二个 1G 的数据库文件?