情况是这样的: 两个库分别在两个机器上
库DataBaseA里有一表T1(大概有4G),在机器A上,在内网
库DataBaseB里有一表T2(与DataBaseA的表T1结构完全相同),在机器B上,在外网
T1表数据每天有更新
实现目标:
每周日把机器B的网线换到内网与机器A相连接,然后执行一个过程让系统自动把机器A上库DataBaseA里的表T1全部自动更新到机器2上DataBaseB里的T2表,由于数据太大,有8000万条记录(4G),如何些这个过程或执行导数据的脚本来提高性能.
我试了insert into T2 select .....大概需要4小时,可太慢了
有没有表的办法?要求不能用人工的导出dmp....就通过数据链来进行自动导数据

解决方案 »

  1.   

    1.安装两块网卡(加另一个网段用);
    2.create procedure ...;
    3.使用job。
      

  2.   

    truncate table t2;
    alter table t2 nologging;
    insert /*+append*/ into t2  select * from t1@databaseA;
    alter table t2 logging;之后,我个人觉得应该在 databaseB上建一个物化视图,弄个job每天晚上同步databaseA上的数据。
      

  3.   

    加个/*+APPEND*/可以节省一半时间...(不产生redo)不过LZ为何一定要全量导入,不能根据T1更新过的记录更新T2吗?
      

  4.   

    T1里面的数据有更新的,也有新增的,并且T1所在的库我没操作权限,根本不能进行任何的操作,只有查询权限3楼的 代码艺术:
     你说的物化视图可能不好实现,因为两个库databaseA和databaseB不在一个网内,需要手工切换线才能进行连接导数据,那个同步不好做吧?
    你那的代码一次行提交会不会慢?如果做成分批提交,每10000行提交一次,会不会快些?
      

  5.   

    循环绝对比一条语句慢alter session enable parallel dml;insert /*+append nologging parallel(t2,default)*/ into t2  
          select * from t1@databaseA;不过并行很耗资源.
    如果这样会快的话,你还可以试试在select之后也加上parallel的hint,应该会更快一点.
      

  6.   

    DataBaseB 用append插入的时候不要忘记用nologging和关闭归档模式