本帖最后由 v0lcano0l 于 2012-10-22 10:37:35 编辑

解决方案 »

  1.   

    因为sql语句中有好几个千万级的表,不并行的话又跑不动
      

  2.   

    1.一个小错,别名有可能混淆:  FROM中:
      noc_mrj.vw_region_new@rim r
      EXISTS FROM中:
      rimdb.PUB_FIXED_ASSETS@rim R
    2.函数ftth_get_vlan_withport中SQL的条件rownum = 1
      表示对行数据的针对性弱,所以,该函数可以用下面SQL替代,而不必引用函数:    (SELECT MIN(dv.vlan_num)         
         --注意:MIN( )保证一定能返回一行,且no_data_found时,返回NULL。
         FROM rimdb.dat_vlan_port_union@rim dvp,
              rimdb.DAT_VLAN@rim dv
        WHERE dvp.port_id = rp.port_id     --注意,portid 已改为rp.port_id 
          AND dvp.vlan_id = dv.vlan_id
          AND dv.buz_type = '17150110'
          AND dvp.delete_state = '0'
          AND dv.delete_state = '0')       --注意rownum = 1已取消3.建议使用存储过程实现。
      

  3.   

    建议:
    1。把函数建在远程数据库rim,SQL中如下引用:
    ftth_get_vlan_withport@rim(rp.port_id)
    2。先把表建好,然后再用并行插入:
    insert /*+ parallel(degree 4)*/ into RIM_DSLAM_INFO    
    select /*+ parallel(degree 4)*/ * from table@rim;
      

  4.   

    进行INSERT,UPDATE,DELETE操作,如果数据量大,最好使用存储过程,单记录操作。避免中途数据问题或意外后数据恢复自动操作,特别是回滚段溢出。