ORA-01652: 多个外部数据表(Oracle调MSSS)连接方式不当,造成临时空间不足

今天测试SO导GL一直不顺,直接原因是:

ORA-01652: 无法通过 16 (在表空间 TEMP1 扩展 temp 

 

说是临时表空间不足,但是这里数据并不多,理不应该占用太多空间。

经过反复测试,发现问题出在后面查询脚本的最后二行,即:

               and h."company_code" in (

SELECT company_code

    from CUX_TEMP_SO_2_GL_OU_LIST) –后面是个存储公司权限范围的微型临时表

这只是一个简单的限定而已,但由于这几个表都取自SQLSERVER,Oracle优化器无法对其做出可靠的判断,所以对于上面的条件,Oracle会从bosohdr表完整抓出了很多公司的所有合同,导致 临时空间不足。

但是,当我把bosohdr与CUX_TEMP_SO_2_GL_OU_LIST表直接相连时,问题就解决了。

 

经验就是说:当在oracle中调用多张外部来源的表并试图做连接时,要特别注意其连接方式,尽量不要使用类如in的谓词;或者把连接关系在外部库就做好,然后通过视图引用到Oracle.

 

 

SELECT c."so_num" SO_NUM –其它字段略

               from bjsodetgl@sql_pltprd21.sina.com.cn       g,

                    bjsohdr@sql_pltprd21.sina.com.cn         h,

                    bjso_gl_acct_cfg_new@sql_pltprd21.sina.com.cnc,

                    aradv@sql_pltprd21.sina.com.cn           a,

                    CUX_TEMP_SO_2_GL_OU_LIST                 com

              where g."so_num" = c."so_num"

                --and g."book_id" = c."book_id"

                and decode(g."book_id",'1001',C_LEDGER_PRC,'1002',C_LEDGER_US) =c."book_id"

                 --andg."account_all" = c."dr_all" --这次只取借方

                and g."r12_account" = c."dr_segment6" --这次只取借方

                and g."r12_sub_account" = c."dr_segment7" --这次只取借方                

                 andg."so_num" = h."so_num"

                AND h."status_flag" = 0

                AND g."gene_flag" = 1

                AND g."gl_flag" = 0 --未导GL

                AND h."agency_code" = a."adv_code"

                AND g."period" BETWEEN P_START_DATE AND P_END_DATE

                and h."company_code" = com.company_code

                --and h."company_code" in (   

                --    SELECT company_code from CUX_TEMP_SO_2_GL_OU_LIST)

                )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值