用dblink从远程oracle数据库导数据到本地oracle库中:insert into 本地表 select * from 远程表@dblink
有500多万条数据吧,运行起来特别的慢,要10几个小时才能导完,是不是出什么问题了呢,本地表没有索引,
你们是怎么做的呢,不考虑其他的导入方式,只用insert into

解决方案 »

  1.   

    应该考虑网络开销问题吧。你为什么不先把远程的数据先直接COPY过来。然后在本地更新呢?或者我有个傻办法,呵呵,把远程数据库所需要表EXP到你本机上,本地IMP。
    这也可以做成程序直接执行。
      

  2.   

    另外如果刚才我说的都不能做的话,那只能从思路下功夫。如果是两个结构相同的表table1,table2 
    将table1插入到table2中: 几条思路,你考虑一下
      
    1、指定回滚段,回滚段足够大 
    set transaction use rollback segment RBS1; 
          INSERT INTO table1 NOLOGGING 
             SELECT * FROM table2; 
         commit; 
    2、采用定义cursor,每5000或10000条记录提交一次 
    declare 
        cursor cur_select is 
                 select t1,t2,t3..... from tabl1; 
    v_id number; 
    v_t  table1%rowtype; 
      
    begin 
        open cur_select; 
         
        loop 
          exit when cur_select%notfound; 
          fetch cur_select into v_t.t1,v_t.t2,v_t.t3..... ; 
           
          insert into table2 
          (t1,t2,t3......) 
          values 
          (v_t.t1,v_t.t2,v_t.t3..... ); 
      
          v_id := v_id + 1; 
      
          if v_id = 10000 then 
            commit; 
            v_id := 0; 
          end if; 
            
        end loop; 
      
        commit;  
    end; 3。也可考虑BULK绑定办法
    在Oracle 9i上建议使用bulk insert.   
    4。建议使用NOLOGING参数
    使用oracle中包含在注释中的提示信息
    insert /*+append*/ into ...nologing
    select * from ...
    我够笨的!请教各位高士还有没有其他的方法? 
      

  3.   

    修改表为NOLOGING,然后在insert后加提示用append方式。
    insert /*+append*/ into ...
    select * from ...
      

  4.   

    domap()的思路不错,可以一试。