0、在本地服务器的 tnsnames.ora 中配置远程数据库的 service_name,确保 tnsping 能通
1、在本地数据库中建立到远程数据库的 DBLINK
CREATE [PUBLIC] DATABASE LINK <link_name>
CONNECT TO <user_name>
IDENTIFIED BY <password>
USING '<service_name>'; 2、定时执行一个 JOB,从远程数据中获取更新数据,同步到本地
select * from A.NAME@远程,A.INFO@远程 where NAME.XING='程' AND NAME.ID=INFO.ID3、如果JOB出错,会写入 alert_sid.log 中,定期查看一下即可如果设计合理的话,不用理会错误,只要下次同步成功就可以了。

解决方案 »

  1.   

    同意boydgmx(梦霄) 所说
    不过可以考虑用oracle的物化视图,比自己写job要方便,出错也小。
      

  2.   

    我以為 boydgmx(梦霄) 所说的不是很好,樓主的要求是使用快照。
    其實用快照就可以了,樓主可以按以下步聚使用快照:
    一、在遠程機上在要對其同步的表上建立快照日志(如果不建快照日志,則無法使用快速刷新);
    二、在本地服務器上建一個到遠種機的DBLINK(假設名稱為MY_DBL);
    三、在本地機上創建快照表:
       --先建本地快照表NAME
       CREATE SNAPSHOT NAME AS
       SELECT t1.* from 方案名.NAME@远程 t1,方案名.INFO@远程 t2 where t1.XING='程' AND t1.ID=t2.ID;
        --再建本地快照表INFO
        SELECT t2.* from 方案名.NAME@MY_DBL t1,方案名.INFO@MY_DBL t2 where t1.XING='程' AND t1.ID=t2.ID;
        --再設置同步方案
        --1.完整刷新方案
        Alter snapshot NAME refresh complete
      Start with sysdate+1/1440--表示快照建立一分鐘後開始完整刷新(同步)一次
        next sysdate+1;     --表示以後每隔一天就完整刷新(同步)一次
        
        Alter snapshot INFO refresh complete
      Start with sysdate+1/1440
        next sysdate+1;    --2.定時快速刷新方案
        Alter Snapshot NAME refresh FAST
        Start with sysdate+1/720--這裡表示快照建立兩分鐘後開始快速刷新一次
        next sysdate+1/144;      --這表示以後每十分鐘刷新(同步)一次    Alter Snapshot INFO refresh FAST
        Start with sysdate+1/720
        next sysdate+1/144;
        
    經過我上述說的步聚後,樓主的數據就可以和遠程數據庫同步了,不過要注意,如果樓主的本地數據庫已有了Name和Info表的話,建議把它們改名,再創建快照表,或者把我上面建的快照表改名,再使用job定時從本地快照表中往你的Name和Info表中導入數據。
      

  3.   

    我觉得zjp8310(z一阵风z)的回答非常好!应该给分他