从服务器A的表table1中拿数据,然后删除服务器B的表table2中的数据,再将取到的数据insert到服务器B的表table2中语句我知道怎么写,关键是table1中有1000多万条数据,怎么插入到table2中?

解决方案 »

  1.   

    楼主可以换个思路,为什么每次都要删除table2中的数据呢,更新里面的数据不行吗?
    两台服务器需要dblink了
    可以在table1表中设置触发器,当有更新的时候把数据更新到table2中
      

  2.   

    直接update速度会快些吗?我先truncate然后insert时,速度很慢,还可能死机。
      

  3.   

    exp/imp
    rename A to B
      

  4.   


    alter table B nologging ;insert into B select * from A@dblink where ...;--如果是增量,可以在条件里限制。
    commit;
      

  5.   

     这事手工做的话,EXP/IMP最好了
    如果不是,还是用DBLINK吧操作放在B上,建一个DBLINK -> A 就可以了
    至于性能方面,好像没有具体说到环境、表的设计等其它方面,插入慢,数据量只是参考点之一。
      

  6.   

    如果是内网的话dblink也可以,外网最好是exp,压缩后再imp。
      

  7.   

    去看看 ETL 方面的资料或许有用 方法很多的 可以考虑用别的工具 
    也可以考虑在原来A上建立分区表 一部分一部分的往新B 里插入 可能一次插入太多 消耗资源太多
      

  8.   

    就用导入导出。
     imp/exp
      

  9.   

    加hint  /*+ append */
      

  10.   


    alter table b nologginginsert /* +append */ into b select * from a@dblink;
      

  11.   


    也可以采用exp  imp 也很好
      

  12.   

    题外话,设为nologging后最好做一次备份。
      

  13.   

    insert /* +append */ 
    insert /* +paralle*/
    insert bulk into 
    nolog
      

  14.   

    data pump导出,作为外部表加载
      

  15.   

    SQL> copy from user/pass@tnsname -
    > append table_nameb(name1,name2) -
    > using select * from tabl_nameacopy from 这个功能据说要去掉了,被exp/imp 取代。不过还是挺好用的,
    我导过2、3百万的数据用了 不到十分钟吧。
      

  16.   

    你的数据库要是归档的话,insert会让 闪回空间爆掉,那可是1000w呀,连删除带插入 多少日志,你想想。
    最好是导出导入  ,要是想insert就得先把归档关掉 ,你考虑吧  导入导出 是没日志的  
      

  17.   

    我以前做大数据插入(大约5000w):
    备份数据,关日志、del索引,插,建索引,检查数据,开日志,ok
      

  18.   

    直接用DBLINK Insert预计会有问题D.
    小心回滚段和日志文件.建议用exp/imp.
      

  19.   

    这个顶一下,我就是经常用这个。另外楼主的服务器A 和服务器B如果一样(里面的表索引等一系列对象)的话,可以试一下这两个命令
    expdp impdp 这个速度是相当快的
      

  20.   

    哇...说实话..我看不懂dblink是什么意思..刚入门的菜鸟..求高手写个事例加速了解谢谢!