select /*+ use_hash(cc,bb) */ cc.prod_inst_id, CC.val
  from ods2.osor_prod_inst_attr cc, tmp_DKH_BUSI_INF_003 bb
 where bb.attr_id = cc.attr_id;一张表有2KW条数据,一张表有7W条数据,用use_hash会运行5个小时之后出现
ORA-01652: unable to extend temp segment by 4096 in tablespace DKH_DAT
错误,这个应该是临时表空间不足的错?再次重跑还是跑这个错误,求解决办法,或者不用use_hash的优化方法不加use_hash的执行计划如下

解决方案 »

  1.   

    create index ods2_inx on ods2(attr_id);
    create index tmp_DKH_BUSI_INF_inx on tmp_DKH_BUSI_INF(attr_id);
      

  2.   

    Alter tablespace 表空间 add datafile 文件名(带路径)size Xm; 
      

  3.   

    增大数据文件到你的临时表空间,或者将你的数据文件设置为自动扩展
    Alter tablespace 表空间 add datafile 文件名(带路径)size Xm; 
      

  4.   


    --method1
    SQL> alter database datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\NEWORCL\NEWORCL01.DBF' resize 1000m;Database altered
    --method2
    SQL> alter database datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\NEWORCL\NEWORCL01.DBF' autoextend on;Database altered
    --method3
    SQL>Alter tablespace temp add datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\NEWORCL\NEWORCL02.DBF')size 10m; Database altered
    SQL> 
      

  5.   

    主机有多少内存?多开些 PGA,PGA用光了才用Temp表空间,Temp表空间设置为自动增长;
    不过做Hash连接,基本上都要用到磁盘。选择出来的数据是在7W左右还是2KW左右?
    如果在7W左右,考虑使用小表做驱动表,用NEST LOOP