有两数据库 数据库s1、s2。
    先从s1上的A表(1000W条数据 )中拷贝过来800W条数据到s2上的B表中来!。这步我已经完成。
   
    现在如何在s2上再建一张表C(表结构同A),将余下的200W的数据拷贝过来。
    要求效率高点。
   
    在线等!急!

解决方案 »

  1.   

    ctas+dblink,expdp+查询条件。
    这两种方法都可尝试。
      

  2.   


      id为主键!
       
       我现在在s2上建立一张表D,D表是复制A表数据!
       
       B和D我都在id上建了索引!   select * from D d
        where not exists (select 1 from B b where d.id= b.id);
       看执行计划时,只用了B上的索引!没用到D上的索引!不知道是什么原因!
      

  3.   

    insert into C as
      select * from D d
        where not exists (select 1 from B b where d.id= b.id);
      

  4.   

    我的语句是这样写的:
      create table  C as
      select * from D d
        where not exists (select 1 from B b where d.id= b.id);
      

  5.   

    是否可以考虑2点1 使用Parallel(需要多处理器)
    2 使用Nologging(恢复时可能会出问题)做完好备份下数据库,以免nologging操作无法恢复。
      

  6.   

    B表:从A表中导入的800W数据
    C表:新表,结构同A和D
    D表:数据和结构跟A一样
      

  7.   

       DBA给参照我的语句,给出具体的SQL吗?谢谢!
      

  8.   

    alter table big_table parallel 4;
      

  9.   

    CREATE TABLE table_name PARALLEL NOLOGGING AS SELECT /*+ PARALLEL */ * from ……
      

  10.   

       PARALLEL NOLOGGING  在这有什么用处?
       提示:/*+ PARALLEL */  又是什么?
      

  11.   

    PARALLEL NOLOGGING  并行+不生成REDO&UNDO(ORACLE说并不是完全不生成,但会少很多)select里的PARALLEL提示查询时也使用并行,但我未测试过远程数据库是否能起作用,你可以去执行select的数据库里验证下。
      

  12.   

    哦!谢谢了!suiziguo!
       问题解决了!
       就此结帖!