一台数据服务器A,配置TEMP表空间初始为9G,并且为自动扩展,但设定上限为65535MB,数据库所在分区D盘有剩余空间20G。
这台服务器CPU和内存配置都还行,Xeon E7330,4G内存。
运行一段Procedure,4小时后报错:ORA-01652:unable to extend temp segment by 64 in tablespace TEMP ORA-27059: could not reduce file size
此时发现D盘剩余空间全部被那个TEMP表空间文件占满,同时在DatabaseConsole中发觉TEMP表空间被自动设成了30G另一台数据库服务器B,配置与上面相仿,内存大些,8G。导入了上面相同的数据库。TEMP表空间初始为9G,自动扩展,设定上限为65535MB,不过数据库所在分区D盘有剩余空间60G。
运行同一段Procedure,30分钟完成。
运行过程中使终在监视TEMP表空间文件的大小,以及D盘的剩余空间,一直没有变动。第三台数据库服务器C,配置为个人电脑,内存2G什么的。导入相同的数据库,TEMP表空间初始为1G,自动扩展,设定上限为65535MB,数据库所在分区D盘剩余空间仅为12G。
运行同一段Procedure,约30分钟完成。
运行过程中使终在监视TEMP表空间文件的大小,以及D盘的剩余空间,一直没有变动。
请问数据服务器A出错的原因是什么?是不是Oracle另有什么关于TEMP表的配置不正确?
急问,谢谢!

解决方案 »

  1.   

    新建一个TEMP表空间,把老的删掉对么?
    OK谢谢,我去试试。
      

  2.   


    但是在其它两台服务器上,同样的数据,同样一段Procedure,只花30分钟就能跑完。
    这也是这个问题奇怪的地方。
      

  3.   

    看看A系统的大表有没有建索引,另外还要对表做统计分析,用DBMS_STATS包来收集统计数据,这样便于数据库选择优化的执行计划。
      

  4.   


    试过了,新建了一个TEMP表空间,把旧的删了,问题依旧
      

  5.   

    A服务里是不是有大量排序?SQL 执行计划\统计分析如何?
      

  6.   

    的确是有涉及几十万条数据的排序,但由于服务器的配置应该算是不错,就这样吃掉30G的TEMP表空间实在感到奇怪。
    结果昨天去A服务器上新建了一个Instance,参数配置设得跟之前出错的那个Instance一样,把数据库也导进去,然后在新的Instance中跑Procedure,居然就这么OK了!!
    不知道原来的Instance中的数据库文件碰到了什么问题,水平有限,查不出什么原因。有可能重启一下服务器也可以解决,但客户那边不允许
    现在就把应用切换至新的Instance,把老的出错的那个删了。虽没找到根本原因,但先解决了再说
    这样的问题实在是第一次碰到,呵呵,谢谢大家的帮助。