Oracle復(fù)制技術(shù)的分布式系統(tǒng)同步應(yīng)用
本文將結(jié)合一個(gè)實(shí)際案例,講解Oracle復(fù)制技術(shù)在分布式信息系統(tǒng)中的同步應(yīng)用,希望通過這篇文章,大家能更好的理解Oracle復(fù)制技術(shù)。
引言
基于WAN的分布式管理信息系統(tǒng)是當(dāng)前跨多地域企事業(yè)單位信息處理的首選。福建省運(yùn)政管理信息系統(tǒng)是覆蓋全省14個(gè)市運(yùn)管處、84個(gè)縣運(yùn)管所的WAN分布式網(wǎng)絡(luò)管理系統(tǒng),根據(jù)業(yè)務(wù)特點(diǎn)和實(shí)際應(yīng)用特征,全省數(shù)據(jù)存儲(chǔ)分為二級(jí),在省局中心設(shè)立全省數(shù)據(jù)存儲(chǔ)中心,各市處設(shè)立本市處數(shù)據(jù)存儲(chǔ)中心,省局?jǐn)?shù)據(jù)中心又分內(nèi)網(wǎng)數(shù)據(jù)中心和外網(wǎng)數(shù)據(jù)中心。本文運(yùn)用Oracle高級(jí)復(fù)制技術(shù)實(shí)現(xiàn)各數(shù)據(jù)中心的數(shù)據(jù)同步。
1 Oracle高級(jí)復(fù)制技術(shù)
Oracle高級(jí)復(fù)制,也稱為對(duì)稱復(fù)制,有基于整個(gè)表的復(fù)制和基于部分表的復(fù)制兩種復(fù)制方法。這兩種復(fù)制主要是通過多主復(fù)制和可更新快照復(fù)制兩種機(jī)制實(shí)現(xiàn)的。同時(shí)還可以將這兩種復(fù)制機(jī)制結(jié)合起來以滿足不斷變化的業(yè)務(wù)需求。
1.1多主復(fù)制
多主復(fù)制方法支持全表在各個(gè)主節(jié)點(diǎn)間的對(duì)稱復(fù)制,允許所有主節(jié)點(diǎn)對(duì)主表有更新操作的權(quán)力。任何—個(gè)主節(jié)點(diǎn)上的復(fù)制表的更新都會(huì)被傳播并直接應(yīng)用到其他所有主表。一個(gè)主節(jié)點(diǎn)出現(xiàn)問題,不會(huì)影響其他主節(jié)點(diǎn)之間的傳播。
多主復(fù)制采用一種稱為“延遲遠(yuǎn)程過程調(diào)用(deferred remoteprocedure calls RPCs)”機(jī)制。各節(jié)點(diǎn)之間變化的傳播,既可以以基于事件的方式立即傳播,也可以從某個(gè)特定的時(shí)間點(diǎn)(如在網(wǎng)絡(luò)空閑)開始傳播。在傳播變化時(shí),如果其中的一個(gè)遠(yuǎn)端系統(tǒng)沒有準(zhǔn)備好,傳播變化的延遲遠(yuǎn)程過程調(diào)用就會(huì)保存在其本地隊(duì)列中,等到系統(tǒng)準(zhǔn)備好以后再執(zhí)行。
1.2可更新快照復(fù)制
Oracle將只讀快照機(jī)制擴(kuò)展為一種允許快照可更新的對(duì)稱復(fù)制。快照更新的傳播方式也是采用了和多主復(fù)制一樣的延遲遠(yuǎn)程過程調(diào)用機(jī)制。
快照是對(duì)出現(xiàn)在特定時(shí)刻的數(shù)據(jù)的復(fù)制,既可以是包含一個(gè)主表的完全拷貝,也可以是滿足基于值的選擇標(biāo)準(zhǔn)的主表中行的子集。快照在主節(jié)點(diǎn)的刷新是按照一定的時(shí)間間隔或用戶單獨(dú)請(qǐng)求進(jìn)行的。最后一次刷新后主表的任何變化也同樣被傳播并應(yīng)用到快照。多個(gè)快照的刷新是在一個(gè)一致的事務(wù)中完成的,這就確保了數(shù)據(jù)和引用的完整性。
1.3混合配置
可以將多主復(fù)制和可更新快照結(jié)合在一起,構(gòu)成一種新的混合配置,這種配置可以完成對(duì)全表或子表的復(fù)制。例如,一個(gè)系統(tǒng)具有兩個(gè)不同地理區(qū)域的中心節(jié)點(diǎn),這兩個(gè)不同的地理區(qū)域下面還有一些分支機(jī)構(gòu),可以把兩個(gè)中心節(jié)點(diǎn)看作是互為備份節(jié)點(diǎn),采用多主復(fù)制方法在兩個(gè)中心節(jié)點(diǎn)之間復(fù)制數(shù)據(jù),同時(shí)采用只讀或可更新快照復(fù)制方法在區(qū)域范圍中的主節(jié)點(diǎn)之間復(fù)制全表或主表。這種配置的一個(gè)顯著好處就是當(dāng)其中的一個(gè)中心發(fā)生問題時(shí),快照的主節(jié)點(diǎn)可以被重新定義到另一個(gè)良好的中心節(jié)點(diǎn)上,從而提高了系統(tǒng)的可靠性。
1.4過程級(jí)復(fù)制
這種復(fù)制方法主要應(yīng)用在存在大量數(shù)據(jù)以及采取批處理方式操作數(shù)據(jù)的情況。
2實(shí)際應(yīng)用
2.1福建省運(yùn)輸管理局網(wǎng)絡(luò)環(huán)境
福建省運(yùn)輸管理局根據(jù)系統(tǒng)業(yè)務(wù)的需要,建立了全省的省、市、縣業(yè)務(wù)VPN三級(jí)網(wǎng)絡(luò)系統(tǒng),各數(shù)據(jù)中心均采用oracle數(shù)據(jù)庫系統(tǒng),整個(gè)數(shù)據(jù)的存儲(chǔ)采用二級(jí)分布存儲(chǔ),以確保全省業(yè)務(wù)數(shù)據(jù)存儲(chǔ)的快速、穩(wěn)定、安全。全省數(shù)據(jù)中心分布如圖1。
各級(jí)數(shù)據(jù)中心的存儲(chǔ)原則:省局?jǐn)?shù)據(jù)中心(內(nèi)網(wǎng))匯集全省各市運(yùn)管處的所有業(yè)務(wù)數(shù)據(jù),為各市實(shí)現(xiàn)異地備份,提供跨地市數(shù)據(jù)查詢,協(xié)助完成異地執(zhí)法稽查,通過內(nèi)外網(wǎng)數(shù)據(jù)交換,實(shí)現(xiàn)內(nèi)網(wǎng)相關(guān)數(shù)據(jù)流向外網(wǎng),外網(wǎng)提交的數(shù)據(jù)進(jìn)入內(nèi)網(wǎng),為公眾提供數(shù)據(jù)查詢與業(yè)務(wù)力、理等服務(wù)。各市運(yùn)管處只為本市所轄縣的運(yùn)管所提供存儲(chǔ)服務(wù),并將數(shù)據(jù)匯集到省局?jǐn)?shù)據(jù)中心,出現(xiàn)數(shù)據(jù)故障時(shí)自動(dòng)從省局讀取數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù)。
基于以上的數(shù)據(jù)存儲(chǔ)原則,整個(gè)數(shù)據(jù)同步機(jī)制主要采用Oracle復(fù)制技術(shù)的可更新快照機(jī)制。省局的數(shù)據(jù)庫系統(tǒng)設(shè)置為主數(shù)據(jù)庫,各市處的數(shù)據(jù)庫系統(tǒng)設(shè)置為從數(shù)據(jù)庫,所以整個(gè)分布式數(shù)據(jù)庫系統(tǒng)是“一主多從”的結(jié)構(gòu)。使用Oracle系統(tǒng)中的增量復(fù)制技術(shù),定時(shí)或手動(dòng)進(jìn)行主數(shù)據(jù)庫與從數(shù)據(jù)庫的數(shù)據(jù)更新。從數(shù)據(jù)庫復(fù)制到主數(shù)據(jù)庫的是全部數(shù)據(jù),只要從數(shù)據(jù)庫中的數(shù)據(jù)有變化,就會(huì)反映到主數(shù)據(jù)庫中;主數(shù)據(jù)庫復(fù)制到從數(shù)據(jù)庫的是與本市相關(guān)的業(yè)務(wù)數(shù)據(jù)。省局內(nèi)網(wǎng)與外網(wǎng)數(shù)據(jù)中心、省局與省廳之間數(shù)據(jù)交換同樣采用可更新快照要制實(shí)現(xiàn)。
2.2數(shù)據(jù)復(fù)制以及各中心的數(shù)據(jù)同步過程
數(shù)據(jù)庫復(fù)制操作可以由各市處數(shù)據(jù)庫發(fā)起,發(fā)起的方式可以是定時(shí)自動(dòng)復(fù)制也可以是手動(dòng)復(fù)制。實(shí)現(xiàn)數(shù)據(jù)復(fù)制可以用命令方式或用Oracle系統(tǒng)的Advanced replication manger來定制。下面采用命令方式,以省局和廈門兩點(diǎn)為例描述主從數(shù)據(jù)中心節(jié)點(diǎn)的數(shù)據(jù)同步復(fù)制的操作步驟。
2.2.1實(shí)現(xiàn)數(shù)據(jù)庫復(fù)制的前提
(1)用system身份登錄各數(shù)據(jù)庫,查看v$option視圖,如果其中Advanced replication為TRUE,則支持高級(jí)復(fù)制功能,否則不支持。
(2)打開tnsnames.ora文件,設(shè)置數(shù)據(jù)庫初始化參數(shù)要求:
①db_domain=fjysgl.com.cn,/指明數(shù)據(jù)庫的域名(默認(rèn)的是WORLD),這里用fjysgl.com.cn。
②global_names=true//它要求鏈接(database link)和被連接的數(shù)據(jù)庫名稱一致,因而全局?jǐn)?shù)據(jù)庫名為:db_name+”.”+db_domain。
③有跟數(shù)據(jù)庫job執(zhí)行有關(guān)的參數(shù)。
- job_queue processes=l //定義SNP進(jìn)程的啟動(dòng)個(gè)數(shù)為n,系統(tǒng)缺省值為0,正常定義范圍為0—36,根據(jù)任務(wù)的多少,可以配置不同的數(shù)值。
- job_queue_interval=60 //定義系統(tǒng)每隔N秒喚醒該進(jìn)程一次,系統(tǒng)缺省值為60秒,正常范圍為1~3600秒。
- distributed_transactions=lO
- open._links=4
2.2.2實(shí)現(xiàn)數(shù)據(jù)庫的同步復(fù)制操作
省局?jǐn)?shù)據(jù)中心與廈門市處數(shù)據(jù)中心的具體配置如表1所示。
(1)確認(rèn)網(wǎng)絡(luò)暢通,兩中心數(shù)據(jù)庫服務(wù)器之間可以互相訪問,在tnsnames.ora里設(shè)置數(shù)據(jù)庫連接字符串。
①修改廈門市處數(shù)據(jù)庫連接字符串。
- fjyg=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=
- (PROTOCOL=TCP)(HOST=10.1.1.3)(PORT=1521)))
- (CONNECT_DATA=(SERVICE_NAME=f]yg)))
運(yùn)行$tnsping fjyg,出現(xiàn)以下提示符:
- Attempting 10 contact(ADDRESS=(PROTOCOL=TCP)
- (HOST=10.1.1.3)(PORT=1521))
OK(10毫秒)則表明有廈門市處數(shù)據(jù)庫可以訪問省局中心數(shù)據(jù)庫。
②在省局?jǐn)?shù)據(jù)庫作同樣類似配置,并確認(rèn)$tnsping xm是通的。
(2)改數(shù)據(jù)庫全局名稱,建公共的數(shù)據(jù)庫鏈接。
①用system身份登錄xm數(shù)據(jù)庫:
- alter database rename global_name t0 xm.1jysgl.com.cn:
用system身份登錄fjyg擻據(jù)庫:
- alter database rename global_name to fjyg.1jysgl.com.cn:
②用system身份登錄xm數(shù)據(jù)庫:
- create public database link fjyg.fjysgl.com.cn using fjyg’:
測試數(shù)據(jù)庫全局名稱和公共的數(shù)據(jù)庫連接:
- select。from global_name@t]yg.fjysgl.com.cn:
返回結(jié)果應(yīng)為fjYg.fjysgl.com.cn;
用system身份登錄fjyg數(shù)據(jù)庫:
- create public database link xm.fjysgl.com.cn using‘xm’;
測試數(shù)據(jù)庫全局名稱和公共的數(shù)據(jù)庫鏈接。
(3)建立管理數(shù)據(jù)庫復(fù)制的用戶repadmin,并賦權(quán)。
①用system身份登錄xm數(shù)據(jù)庫,分別運(yùn)行如下命令:
- create user repadmin identified by repadmin default
- tablespace users temporary tablespace temp;
- execute dbms_defer_sys.register_propagator(‘repadmin’):
- grant execute any procedure to repadmin;
- execute dbms_repcat_admin.grant_admin_any_repgroup
- (‘repadmin’):
- grant comment any table t0 repadmin;
- grant lock any table tO repadmin;
②同樣用system身份登錄旬yg數(shù)據(jù)庫,運(yùn)行以上的命令,管理數(shù)據(jù)庫復(fù)制的用戶repadmin,并賦權(quán)。
(4)在數(shù)據(jù)庫復(fù)制的用戶repadmin下創(chuàng)建私有的數(shù)據(jù)庫鏈接。
①用repadmin身份登錄xm數(shù)據(jù)庫。
- create database link fjYg.fjysgl.com.cn connect Io repadmin
- identified by repadmin;
②用repadmin身份登錄fjyg數(shù)據(jù)庫。
- create database link xm.fjysgl.com.cn connect to repadmin
- identified by repadmin;
在這里以O(shè)RACLE系統(tǒng)的例程用戶的scott及dept表。
(5)創(chuàng)建或選擇實(shí)現(xiàn)數(shù)據(jù)庫復(fù)制的用戶和對(duì)象,給用戶賦權(quán),數(shù)據(jù)庫對(duì)象必須有主關(guān)鍵字。
(6)創(chuàng)建要復(fù)制的組scott_mg,加入數(shù)據(jù)庫對(duì)象,產(chǎn)生對(duì)象的復(fù)制支持。
①用repadmin身份登錄xm數(shù)據(jù)庫,創(chuàng)建主復(fù)制組。
- scott_mg execute dbms_repcat.create_master_repgroup
- (‘scott_mg’):
②在復(fù)制組scott_mg里加入數(shù)據(jù)庫對(duì)象。
- execute dbms_repcat.create_master_repobject(sname=>'scott',
- oname=>'dept',type=>'table',use_existing_object=>true.
- gname=>。scotLmg’):
③對(duì)數(shù)據(jù)庫對(duì)象產(chǎn)生復(fù)制支持。
- execute dbms_repcat.generate_replication_support(‘scott','dept',
- ‘tabIe’):
④確認(rèn)復(fù)制的組和對(duì)象已經(jīng)加入數(shù)據(jù)庫的數(shù)據(jù)字典。select gname.master。status from dba_repgroup;select from dba_repobject;
(7)創(chuàng)建主復(fù)制節(jié)點(diǎn)。
①用repadmin身份登錄xm數(shù)據(jù)庫,創(chuàng)建主復(fù)制節(jié)點(diǎn)。execute dbms_repcat.a(chǎn)dd_master_database
- (gname=>'sco~_mg',master=>'rjyg.fjysgLcom.cn.,
- use_existing_objects=>true.copy_rows=>false,
- propagation_mode=>。asynchronous');
②確認(rèn)復(fù)制的任務(wù)隊(duì)列已經(jīng)加入數(shù)據(jù)庫的數(shù)據(jù)字典。select’from useriobs;
(8)使同步組的狀態(tài)由停頓(quiesced)改為正常(normal)。
①用repadmin身份登錄xm數(shù)據(jù)庫,運(yùn)行以下命令:execute dbms_repcat.resume_master_activity('scott_mg',false);
②確認(rèn)同步組的狀態(tài)為正常(normal)。select gname,master,status from dba_repgroup;
③如果這個(gè)①命令不能使同步組的狀態(tài)為正常(normal),可能有一些停頓的復(fù)制,運(yùn)行以下命令進(jìn)行處理:execute dbms_repcat.resume_master_activity('scott,mg',true);
(9)創(chuàng)建復(fù)制數(shù)據(jù)庫的時(shí)間表,假設(shè)10分鐘自動(dòng)復(fù)制一次。
①用repadmin身份登錄xm數(shù)據(jù)庫,運(yùn)行以下命令:
- SQL>begin
- dbms_defer_sys.schedule_push
- (destination=>'fjyg.fjysgl.com.cn.,interval=>’sysdate
- +10/1440',next_date=>sysdate);end;/
- SQL>be_qin
- dbms_defer_sys.schedule_purge(next_date=>sysdate.
- interval=>’sysdate+10/1440',delay_seconds=>0.
- rollback_segment=>”):
- end;
- /
②用repadmin身份登錄巧yg數(shù)據(jù)庫,運(yùn)行與①相似命令。
通過以上的配置即可實(shí)現(xiàn)省局與廈門市處二個(gè)數(shù)據(jù)中心之間的數(shù)據(jù)同步復(fù)制,其他點(diǎn)省局與福州處、省局與泉州處等使用相同的方法進(jìn)行處理。
對(duì)于省局中心的內(nèi)外網(wǎng)數(shù)據(jù)庫服務(wù)器,因?yàn)檎9ぷ鲿r(shí)間,內(nèi)外網(wǎng)均不能停頓,而內(nèi)外網(wǎng)又不能物理連通,于是設(shè)定在每天晚上非工作時(shí)間(或其它時(shí)段)為維護(hù)時(shí)段,該時(shí)段內(nèi)外網(wǎng)均停止作業(yè),由系統(tǒng)管理員把與內(nèi)外網(wǎng)DB相連的所有網(wǎng)線斷開,用一根直連網(wǎng)線把兩臺(tái)DB連接,使用相同的方式實(shí)現(xiàn)內(nèi)外網(wǎng)數(shù)據(jù)的同步。
3 結(jié)束語
Oracle的高級(jí)復(fù)制功能為分支機(jī)構(gòu)多、地理范圍廣的大型企事業(yè)單位的分布式數(shù)據(jù)庫系統(tǒng)提供了很好的各中心數(shù)據(jù)同步的實(shí)現(xiàn)方案。而隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,這種應(yīng)用也顯得越來越重要,變得越來越復(fù)雜。為充分利用數(shù)據(jù)復(fù)制來提高數(shù)據(jù)的可用性和系統(tǒng)的性能,在進(jìn)行復(fù)制之前應(yīng)作出詳細(xì)的需求分析才能取得更好的應(yīng)用效果。
【編輯推薦】