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