閱讀329 返回首頁    go 技術社區[雲棲]


利用dblink實現oracle對oracle數據庫的同步

利用dblink 做oracle到oracle的定時同步,以剛為卡中心做的一個同步為例

1、創建需要的dblink連接的數據庫(若已經有,則不需要)
 
例:
查看 dblink :  select * from dba_db_links; 
 
創建 dblink :
 
create database link ECARDRYXX
  connect to WPENG
  using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 202.120.85.118)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ORA92)
    )
  )';
 
 
2. 創建需要同步到對方數據的視圖:
 
例:
create or replace view ryxx as
select ryjbxx.userid outid, xyzzjg.bmmc college, xszzjg.bmmc departname, ryjbxx.major,
       ryjbxx.typeof, ryjbxx.sfsf, ryjbxx.cn, ryjbxx.email, decode(sys_user.STATUS, '2', 'Yes', '4', 'No', 'No') inetUserStatus
       from
(
select t1.xh userid, t1.xym , t1.xsm , t2.zymc major,
       'student' typeof, t1.sfsf sfsf, t1.xm cn, t1.dzxx email
       from idc_u_xs.xs_xsjbxx t1, idc_u_jwmis.jw_zyxx t2
       where  t1.zyh = t2.zydh(+)                                     -- 本科生
union all
select t1.xh userid, t1.xym, t1.xsm, t2.zymc, 'student' typeof, '' sfsf, t1.xm cn, t1.email email
       from idc_u_yjs.yjs_yjsjbxx t1, idc_u_yjs.yjs_dict_bsxkzydm t2
       where t1.zydm = t2.zydm(+)                                     -- 研究生
union all
select t1.zgh userid, '' xym, '' xsm, '' major, 'teacher' typeof, '' sfsf,  t1.xm cn, t1.dzxx email
       from idc_u_rs.rs_zzryjbxx t1                                   --  在職人員
union all
select t1.zgh userid, '' xym, '' xsm, '' major, 'teacher' typeof, '' sfsf,  t1.xm cn, t1.dzxx email
       from idc_u_rs.rs_xjrylsb t1                                    -- 新增人員
) ryjbxx, idc_u_pub.sys_user, idc_u_rs.rs_zzjg xyzzjg, idc_u_rs.rs_zzjg xszzjg
where
      ryjbxx.userid = sys_user.userid
      and ryjbxx.xym = xyzzjg.bmbh(+)    --  學院組織機構
      and ryjbxx.xym = xszzjg.bmbh(+)    --   院係組織機構

3. 創建需要執行同步的pl/sql :
 
例如:
   為了使用更模塊化,更集中,建議同麵向同一個庫的pl/sql,寫在同一個包下。
 
CREATE OR REPLACE PACKAGE ECARD IS
       PROCEDURE RYXXSYNC;
END;
 
CREATE OR REPLACE PACKAGE BODY ECARD IS
       PROCEDURE RYXXSYNC IS
       BEGIN
            delete from wpeng.ryxx@ecardryxx; --刪除數據
            insert into wpeng.ryxx@ecardryxx(outid, college, departname, major, typeof, sfsf, cn, email, inetuserstatus)
                   select outid, college, departname, major, typeof, sfsf, cn, email, inetuserstatus from ryxx;  --插入最新數據
       END;
END;
 

4. 創建job,定時執行同步:
 
例:
打開 sql命令窗口:
 
variable ryxxsyncjob number; 
 
 
begin
     dbms_job.submit(:ryxxsyncjob, 'ECARD.RYXXSYNC;',
                                   SYSDATE, 'TRUNC(SYSDATE) + 1 + 2/24');  --每天淩晨兩點執行。
     commit;
end;


最後更新:2017-04-03 16:49:01

  上一篇:go RVDS 3.1 下載地址及破解方法
  下一篇:go Oracle查詢用戶所有表