<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-144  評論-80  文章-1  trackbacks-0

    ORACLE的高級復(fù)制實(shí)現(xiàn)內(nèi)外網(wǎng)數(shù)據(jù)同步

     

    陳光 holen@263.net 2003.10

     

    本文簡要介紹了ORACLE的高級復(fù)制功能,并通過一個實(shí)際項(xiàng)目,討論了在內(nèi)外網(wǎng)的兩級DB中如何采用高級復(fù)制達(dá)到內(nèi)外網(wǎng)的數(shù)據(jù)統(tǒng)一,最后給出配置腳本供大家參考。

     

    1、基本概念

     

    ORACLE

    ORACLE是以高級結(jié)構(gòu)化查詢語言(SQL)為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫,通俗地講它是用方便邏輯管理的語言操縱大量有規(guī)律數(shù)據(jù)的集合。是客戶/服務(wù)器(CLIENT/SERVER)體系結(jié)構(gòu)的數(shù)據(jù)庫之一。

     

    高級復(fù)制

    什么是復(fù)制?簡單地說復(fù)制就是在由兩個或者多個數(shù)據(jù)庫系統(tǒng)構(gòu)成的一個分布式數(shù)據(jù)庫環(huán)境中拷貝數(shù)據(jù)的過程。

    高級復(fù)制,是在組成分布式數(shù)據(jù)庫系統(tǒng)的多個數(shù)據(jù)庫中復(fù)制和維護(hù)數(shù)據(jù)庫對象的過程。 Oracle 高級復(fù)制允許應(yīng)用程序更新數(shù)據(jù)庫的任何副本,并將這些更改自動傳遞到其他數(shù)據(jù)庫,同時(shí)確保全局事務(wù)處理的一致性和數(shù)據(jù)完整性。

    同步復(fù)制,復(fù)制數(shù)據(jù)在任何時(shí)間在任何復(fù)制節(jié)點(diǎn)均保持一致。如果復(fù)制環(huán)境中的任何一個節(jié)點(diǎn)的復(fù)制數(shù)據(jù)發(fā)生了更新操作,這種變化會立刻反映到其他所有的復(fù)制節(jié)點(diǎn)。這種技術(shù)適用于那些對于實(shí)時(shí)性要求較高的商業(yè)應(yīng)用中。

    異步復(fù)制,所有復(fù)制節(jié)點(diǎn)的數(shù)據(jù)在一定時(shí)間內(nèi)是不同步的。如果復(fù)制環(huán)境中的其中的一個節(jié)點(diǎn)的復(fù)制數(shù)據(jù)發(fā)生了更新操作,這種改變將在不同的事務(wù)中被傳播和應(yīng)用到其他所有復(fù)制節(jié)點(diǎn)。這些不同的事務(wù)間可以間隔幾秒,幾分種,幾小時(shí),也可以是幾天之后。復(fù)制節(jié)點(diǎn)之間的數(shù)據(jù)臨時(shí)是不同步的,但傳播最終將保證所有復(fù)制節(jié)點(diǎn)間的數(shù)據(jù)一致。

     

    2、項(xiàng)目情況

          

    需求描述

           這是一個內(nèi)外網(wǎng)結(jié)構(gòu)的審批系統(tǒng)。

    外網(wǎng)有一個WEB+APPSERVER),一個DBORACLE9.2,雙網(wǎng)卡),負(fù)責(zé)接收申報(bào)和反饋審批結(jié)果。

    內(nèi)網(wǎng)有一個WEB+APPSERVER),一個DBORACLE9.2,雙網(wǎng)卡),負(fù)責(zé)接收申報(bào)和反饋審批結(jié)果,以及通過審批流程處理來自外網(wǎng)的審批申報(bào)。

    由上可知,內(nèi)網(wǎng)功能包括外網(wǎng)功能,不過外網(wǎng)申報(bào)需要CA認(rèn)證,內(nèi)網(wǎng)則不需要。

    根據(jù)國家保密有關(guān)規(guī)定,政務(wù)系統(tǒng)的內(nèi)外網(wǎng)必須物理隔絕,所以外網(wǎng)接收到的申報(bào)并不能馬上反應(yīng)到內(nèi)網(wǎng),同理,內(nèi)網(wǎng)的處理結(jié)果也不能迅速反饋到外網(wǎng)。

     

    技術(shù)選擇`

    我們選擇ORACLE異步手工復(fù)制,復(fù)制主要完如下功能:

    1.  把外網(wǎng)新申報(bào)數(shù)據(jù)復(fù)制到內(nèi)網(wǎng);

    2.  把內(nèi)網(wǎng)對申報(bào)的處理結(jié)果反饋到外網(wǎng)。

     

    操作實(shí)現(xiàn)

    因?yàn)檎9ぷ鲿r(shí)間,內(nèi)外網(wǎng)均不能停頓,而內(nèi)外網(wǎng)又不能物理連通。于是設(shè)定在每天晚上18:0018:15(或其它時(shí)段)為維護(hù)時(shí)段,該時(shí)段內(nèi)外網(wǎng)均停止作業(yè),由系統(tǒng)管理員把與內(nèi)外網(wǎng)DB相連的所有網(wǎng)線均斷開,用一根直連網(wǎng)線把兩臺DB連接,通過ORACLE提供的操作界面,在外網(wǎng)端手工刷新記錄。

     

     

    3、具體實(shí)現(xiàn)步驟

     

    以下是腳本中用到的技術(shù)參數(shù),內(nèi)外網(wǎng)表結(jié)構(gòu)相同,且都有主鍵。

     

     

    內(nèi)網(wǎng)

    外網(wǎng)

    IP

    192.168.0.50

    192.168.0.100

    SID

    ORANEI

    ORAWAI

    LAWTABLE

    REGISTER

    USERINFO

    ……

    68張表

    LAWTABLE

    REGISTER

    2張表

    登錄名/密碼

    HOLEN/HOLEN

    HOLEN/HOLEN

     

    以下是我們到客戶處安裝所用的SQL腳本

     

    第一步:配置內(nèi)網(wǎng),即MASTER

    --版本:2.0

    --修訂者:陳光 holen@263.net

    --時(shí)間:2003-6-8 15:30                   

    --內(nèi)網(wǎng)作為MASTER   

    --創(chuàng)建內(nèi)網(wǎng)用戶HOLEN

     

    CONN SYSTEM/PASSWORD@ORANEI

     

    CREATE USER "HOLEN"  PROFILE "DEFAULT" IDENTIFIED BY "HOLEN" ;

    GRANT "CONNECT" TO "HOLEN";

    GRANT "DBA" TO "HOLEN";

    GRANT "RESOURCE" TO "HOLEN";

    --導(dǎo)入內(nèi)網(wǎng)數(shù)據(jù)庫備份,dos下到入完成(表LAWTABLE,REGISTER及其他表)

     

    第二步:配置內(nèi)網(wǎng),即MASTER端(續(xù))

    --需要復(fù)制(同步)的表為HOLEN用戶下的LAWTABLE,REGISTER

     

    --創(chuàng)建repadmin用戶管理復(fù)制環(huán)境

    CREATE USER REPADMIN IDENTIFIED BY REPADMIN;

    ALTER  USER REPADMIN DEFAULT TABLESPACE USERS;

    ALTER  USER REPADMIN TEMPORARY TABLESPACE TEMP;

    GRANT connect, resource TO REPADMIN;

     

    --授予repadmin用戶權(quán)限可以管理當(dāng)前站點(diǎn)中任何主體組

    EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');

     

    --授予repadmin用戶權(quán)限可以為任何表創(chuàng)建snapshot logs

    GRANT comment any table TO REPADMIN;

    GRANT lock any table TO REPADMIN;

     

    --指定repadmin用戶為propagator,并授予執(zhí)行任何procedure的權(quán)限

    EXECUTE dbms_defer_sys.register_propagator('REPADMIN');

    GRANT execute any procedure TO REPADMIN;

     

    --分配proxy snapshot administration權(quán)限給repadmin,list_of_gnamesnull,意味著可以管理所有對象組

    BEGIN

      dbms_repcat_admin.register_user_repgroup(

      username =>       'repadmin',

      privilege_type => 'proxy_snapadmin',

      list_of_gnames =>  NULL);

    END;

    /

     

    --分配'receiver'權(quán)限給repadmin

    BEGIN

          dbms_repcat_admin.register_user_repgroup(

          username =>       'repadmin',

          privilege_type => 'receiver',

          list_of_gnames =>  NULL);

    END;

    /

     

    GRANT select any table TO repadmin;

     

    --ORANEI上建立主體組,主體組名為HOLEN_MASTER,并往主體組中加入一個表

    --建立復(fù)制主體組

    BEGIN

       DBMS_REPCAT.CREATE_MASTER_REPGROUP(

       gname => '"HOLEN_MASTER"',

       qualifier => '',

       group_comment => '');

    END;

    /

     

    CONNECT REPADMIN/REPADMIN;

     

     

    --向復(fù)制組中加入表對象LAWTABLE

    BEGIN

       DBMS_REPCAT.CREATE_MASTER_REPOBJECT(

       gname => '"HOLEN_MASTER"',

       type => 'TABLE',

       oname => '"LAWTABLE"',

       sname => '"HOLEN"',

       copy_rows => TRUE,

       use_existing_object => TRUE);

    END;

    /

     

    --建立相應(yīng)的快照日志

    CREATE SNAPSHOT LOG

         ON "HOLEN"."LAWTABLE"

    TABLESPACE "SYSTEM"

    WITH PRIMARY KEY

    EXCLUDING NEW VALUES;

     

    --生成復(fù)制支持

    BEGIN  

       DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(

       sname => '"HOLEN"',

       oname => '"LAWTABLE"',

       type => 'TABLE',

       min_communication => TRUE,

       generate_80_compatible => FALSE);

    END;

    /

     

    --向復(fù)制組中加入表對象REGISTER

    BEGIN

       DBMS_REPCAT.CREATE_MASTER_REPOBJECT(

       gname => '"HOLEN_MASTER"',

       type => 'TABLE',

       oname => '"REGISTER"',

       sname => '"HOLEN"',

       copy_rows => TRUE,

       use_existing_object => TRUE);

    END;

    /

     

    CREATE SNAPSHOT LOG

         ON "HOLEN"."REGISTER"

    TABLESPACE "SYSTEM"

    WITH PRIMARY KEY

    EXCLUDING NEW VALUES;

     

    BEGIN  

       DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(

       sname => '"HOLEN"',

       oname => '"REGISTER"',

       type => 'TABLE',

       min_communication => TRUE,

       generate_80_compatible => FALSE);

    END;

    /

     

    --MASTER端配置完畢

     

    第三步:配置外網(wǎng),即SNAPSHOT

    --外網(wǎng)作為SNAPSHOT   

    --創(chuàng)建外網(wǎng)用戶HOLEN

     

    CONN SYSTEM/PASSWORD@ORAWAI

     

    --創(chuàng)建普通用戶

    CREATE USER "HOLEN"  PROFILE "DEFAULT" IDENTIFIED BY "HOLEN";  

    GRANT "CONNECT" TO "HOLEN";

    GRANT "DBA" TO "HOLEN";

    GRANT "RESOURCE" TO "HOLEN";

     

    --創(chuàng)建repadmin用戶管理快照端復(fù)制環(huán)境

    CREATE USER REPADMIN IDENTIFIED BY REPADMIN;

    ALTER  USER REPADMIN DEFAULT TABLESPACE USERS;

    ALTER  USER REPADMIN TEMPORARY TABLESPACE TEMP;

    GRANT connect, resource TO REPADMIN;

     

    --授予repadmin用戶權(quán)限可以管理當(dāng)前站點(diǎn)中任何主體組

    EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');

     

    --授予repadmin用戶權(quán)限可以為任何表創(chuàng)建snapshot logs

    GRANT comment any table TO REPADMIN;

    GRANT lock any table TO REPADMIN;

     

    --指定repadmin用戶為propagator,并授予執(zhí)行任何procedure的權(quán)限

    EXECUTE dbms_defer_sys.register_propagator('REPADMIN');

    GRANT execute any procedure TO REPADMIN;

     

    --授予repadmin用戶可以創(chuàng)建快照

    GRANT create any snapshot TO REPADMIN;

    GRANT alter any snapshot TO REPADMIN;

     

    --在外網(wǎng)建立與內(nèi)網(wǎng)的鏈接

    --在外網(wǎng)端需要把ORANEI添加到樹

    CREATE PUBLIC DATABASE LINK ORANEI CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING ' ORANEI ';

     

    --在外網(wǎng)建立刷新組 HOLEN_REFRESH

    BEGIN

       DBMS_REFRESH.MAKE(

       name => '"HOLEN"."HOLEN_REFRESH"',

       list => '',

       next_date => SYSDATE,

       interval => '/*1:Mins*/ sysdate + 1/(60*24)',

       implicit_destroy => FALSE,

       lax => FALSE,

       job => 0,

       rollback_seg => NULL,

       push_deferred_rpc => TRUE,

       refresh_after_errors => TRUE,

       purge_option => NULL,

       parallelism => NULL,

       heap_size => NULL);

    END;

    /

     

    --在外網(wǎng)建立快照組

    BEGIN

       DBMS_REPCAT.CREATE_SNAPSHOT_REPGROUP(

       gname => '"HOLEN_MASTER"',

       master => 'ORANEI.US.ORACLE.COM',

       propagation_mode => 'ASYNCHRONOUS');

    END;

    /

     

    --建立快照,快照要在表所屬的用戶下建立,本例要先用HOLEN用戶登陸

    CONNECT HOLEN/HOLEN;

     

    --建立快照LAWTABLE

    CREATE SNAPSHOT "HOLEN"."LAWTABLE" 

    REFRESH FAST FOR UPDATE

    AS SELECT * FROM "HOLEN"."LAWTABLE"@ ORANEI.US.ORACLE.COM C

    /

     

    --將快照加入刷新組

    BEGIN  

      DBMS_REFRESH.ADD(

      name => '"HOLEN"."HOLEN_REFRESH"',

      list => '"HOLEN"."LAWTABLE"',

      lax => TRUE);

    END;

    /

     

    --將快照加入快照組

    BEGIN

       DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT(

       gname => '"HOLEN_MASTER"',

       sname => '"HOLEN"',

       oname => '"LAWTABLE"',

       type => 'SNAPSHOT',

       min_communication => FALSE);

    END;

    /

     

    --建立快照REGISTER

    CREATE SNAPSHOT "HOLEN"."REGISTER" 

    REFRESH FAST FOR UPDATE

    AS SELECT * FROM "HOLEN"."REGISTER"@ ORANEI.US.ORACLE.COM C

    /

     

    --將快照加入刷新組

    BEGIN  

      DBMS_REFRESH.ADD(

      name => '"HOLEN"."HOLEN_REFRESH"',

      list => '"HOLEN"."REGISTER"',

      lax => TRUE);

    END;

    /

     

    --將快照加入快照組

    BEGIN

       DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT(

       gname => '"HOLEN_MASTER"',

       sname => '"HOLEN"',

       oname => '"REGISTER"',

       type => 'SNAPSHOT',

       min_communication => FALSE);

    END;

    /

     

    --外網(wǎng)端(SNAPSHOT)配置完畢

     

    第四步:配置內(nèi)網(wǎng)

    --當(dāng)外網(wǎng)配置完成后,在內(nèi)網(wǎng)執(zhí)行如下語句

     

    BEGIN   

       DBMS_REPCAT.RESUME_MASTER_ACTIVITY(

       gname => '"HOLEN_MASTER"');

    END;

    /

     

     

    4、后記

     

    ORACLE的高級復(fù)制功能非常強(qiáng)大,能實(shí)現(xiàn)多點(diǎn)間的數(shù)據(jù)同步、異步復(fù)制。

    內(nèi)外網(wǎng)結(jié)構(gòu)的報(bào)送、審批、備案等兩(多)級系統(tǒng)日益流行,若內(nèi)外DB為同類型商業(yè)數(shù)據(jù)庫,一般數(shù)據(jù)庫本身都提供復(fù)制功能,若內(nèi)外網(wǎng)為不同類型的數(shù)據(jù)庫,如內(nèi)網(wǎng)為SQLSERVER,外網(wǎng)為ORACLE,則一般使用“同步機(jī)”中間件,在程序中調(diào)用即可。

    感謝李鑫為我提供技術(shù)解答!

     

    5、關(guān)于作者

     

    陳光,J2EE項(xiàng)目經(jīng)理,熟悉EJBXML,致力Aapche JakartaAapche XML項(xiàng)目的應(yīng)用與推廣,可通過holen@263.net與作者聯(lián)系。

     

    posted on 2005-03-10 15:32 小力力力 閱讀(377) 評論(0)  編輯  收藏 所屬分類: ORACLE
    主站蜘蛛池模板: 5555在线播放免费播放| 老牛精品亚洲成av人片| 亚洲激情视频在线观看| 亚洲综合伊人久久综合| 国产成人精品久久亚洲| 亚洲国产精品成人| 亚洲av成人一区二区三区在线观看| 国产网站免费观看| 凹凸精品视频分类国产品免费 | 亚洲伊人色一综合网| 久久亚洲AV无码精品色午夜| 久久久久亚洲AV无码专区体验| 97亚洲熟妇自偷自拍另类图片| 亚洲日本国产乱码va在线观看| 亚洲狠狠狠一区二区三区| 亚洲日韩乱码中文无码蜜桃臀| 亚洲成无码人在线观看| 亚洲日本人成中文字幕| 亚洲精品GV天堂无码男同| 国产亚洲精品AAAA片APP| 美女被免费视频网站| 一个人免费观看www视频| 99久久成人国产精品免费| 久久青草91免费观看| 91麻豆最新在线人成免费观看| 免费一本色道久久一区| 永久黄网站色视频免费直播| 亚洲AV无码一区二区三区在线观看 | 亚洲中文字幕久在线| 亚洲高清一区二区三区| 亚洲av永久无码精品秋霞电影秋| 精品亚洲国产成人av| 人成午夜免费大片在线观看| 不卡视频免费在线观看| 99久久国产免费-99久久国产免费| 国产在线观看麻豆91精品免费| 成人人观看的免费毛片| 免费在线观看黄网站| 久久亚洲国产精品一区二区| 亚洲AV成人无码天堂| 黄页网址大全免费观看12网站|