文章詳情頁
Oracle數(shù)據(jù)復制技術有效解決數(shù)據(jù)冗余
瀏覽:4日期:2023-11-19 10:58:26
一個中型或大型公司往往由地理上分散的部門所組成,這些部門通常需要進行數(shù)據(jù)共享。針對這些共享數(shù)據(jù),可以將其存儲在某個站點上,需要的用戶都從這個站點上存取。 這種方案的優(yōu)點是數(shù)據(jù)的一致性輕易保證,但其缺點也是很突出的,那就是該站點的負載大、網(wǎng)絡負載大,遠程用戶的數(shù)據(jù)響應遲緩。數(shù)據(jù)復制技術可以有效地解決這個問題,它通過將這些共享數(shù)據(jù)復制到位于不同地點的多個數(shù)據(jù)庫中,從而實現(xiàn)數(shù)據(jù)的本地訪問,減少了網(wǎng)絡負荷,并提高了數(shù)據(jù)訪問的性能,而且通過對數(shù)據(jù)庫中的數(shù)據(jù)定期同步(通常是天天晚上),從而確保了所有的用戶使用同樣的、最新的數(shù)據(jù)。該技術適用于用戶數(shù)量較大、地理分布較廣、而且需要實時地訪問相同數(shù)據(jù)的應用模式。數(shù)據(jù)復制的概念及特點1、數(shù)據(jù)復制的概念及分類:數(shù)據(jù)復制,就是將數(shù)據(jù)庫中的數(shù)據(jù)拷貝到另外一個或多個不同的物理站點上,從而保持源數(shù)據(jù)庫與目標數(shù)據(jù)庫中指定數(shù)據(jù)的一致性。按照數(shù)據(jù)復制的實時性,數(shù)據(jù)復制可分為同步數(shù)據(jù)復制和異步數(shù)據(jù)復制。同步數(shù)據(jù)復制是指將本地生產數(shù)據(jù)以完全同步的方式復制到異地,每一本地IO交易均需等待遠程復制的完成方予以釋放。異步數(shù)據(jù)復制則是指將本地生產數(shù)據(jù)以后臺同步的方式復制到異地,每一本地IO交易均正常釋放,無需等待遠程復制的完成。同步復制實時性強,遠端數(shù)據(jù)與本地數(shù)據(jù)完全同步。但這種方式受帶寬影響較大,數(shù)據(jù)傳輸距離較短。異步復制不影響本地交易,傳輸距離長,但其數(shù)據(jù)比本地數(shù)據(jù)略有延遲。在異步復制環(huán)境中,對于所有應用最要害的就是要確保數(shù)據(jù)的一致性。按照復制站點的類型,數(shù)據(jù)復制可分為多主控站點復制、物化視圖復制及混合復制。多主控站點復制也稱為對等站點復制,其中每個站點都是主控站點,都需要與其他站點進行信息交流,各站點之間是平等的。物化視圖復制包含一個主控站點、一個或多個物化視圖站點,物化視圖中的內容可以為目標主對象在某個時間點的全部拷貝或部分拷貝,其中目標主對象既可以是主控站點上的表也可以是物化視圖站點上的主物化視圖。混合復制包含多個主控站點和多個物化視圖站點,是主控站點復制和物化視圖復制的結合體,適合于復雜的業(yè)務情況。2、數(shù)據(jù)復制的特點:數(shù)據(jù)復制通過在多個站點上建立備份,能夠提高數(shù)據(jù)的安全性,同時也提高了數(shù)據(jù)的可用性,這是因為假如一個站點出現(xiàn)了問題,用戶可以選擇其他站點繼續(xù)進行操作,應用系統(tǒng)還可繼續(xù)運行,從而數(shù)據(jù)復制提供了容錯保護機制。然而數(shù)據(jù)復制最基本的功能是提高數(shù)據(jù)庫的性能。它通過將遠程數(shù)據(jù)庫中的數(shù)據(jù)復制到本地,使得應用能夠就近訪問數(shù)據(jù),從而降低網(wǎng)絡傳輸負載,提高效率。而且在數(shù)據(jù)復制系統(tǒng)中,可以提供多個站點之間的負載平衡,讓這幾個用戶使用這個服務器,另外幾個用戶可以使用其他的服務器,以避免某些站點負載過重。物化視圖還提供了按子集進行復制,這樣各站點就可只復制自己需要的數(shù)據(jù),也能減輕網(wǎng)絡的傳輸量。數(shù)據(jù)復制的實現(xiàn)方法在具體的實現(xiàn)之前,首先要做好設計與規(guī)劃。這就需要細致分析具體的業(yè)務情況,設計出一套能夠滿足業(yè)務需要的方案。通常在設計過程中,需要確定出要建立的數(shù)據(jù)庫站點,各站點的類型,需要復制的數(shù)據(jù)對象,以及同步方式、沖突解決方案等內容。數(shù)據(jù)復制的實現(xiàn)主要包括以下幾步:(1)創(chuàng)建復制站點。 (2)創(chuàng)建組對象。 (3)配置沖突解決方案。下面我們舉一個例子來說明各步具體需要完成的工作。在這個例子中我們采用多主控站點復制方式,設有兩個主控站點和兩個共享數(shù)據(jù)表。兩個主控站點分別為:處理站點(cl.world)和解釋站點(js.wo rld);兩個數(shù)據(jù)表為測區(qū)( survey)和測線( line)。 STEP1 創(chuàng)建復制站點(1)首先以SYSTEM身份登陸主站點數(shù)據(jù)庫cl.world CONNECT system/manager@cl.world。 (2)創(chuàng)建用戶—復制治理員,并為該用戶授權復制治理員負責復制站點的創(chuàng)建和治理,每個復制站點都必須創(chuàng)建復制治理員: 以下為引用的內容: CREATE;USER;repadmin;IDENTIFIED;BY;repadmin; BEGIN DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA;(username;=>;’repadmin’); END; (3)為本站點指定傳播者:傳播者負責將本地最新更新的數(shù)據(jù)傳播到其他站點上: BEGIN DBMS_DEFER_SYS.REGISTER_PROPAGATOR;(username;=>;’repadmin’); END; (4)為本站點指定接收者接收者負責接收其他站點上的傳播者傳送過來的數(shù)據(jù): BEGIN DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP;( username;=>;’repadmin’, privilege_type;=>;’receiver’, list_of_gnames;=>;NULL); END; (5)確定清除時間:為了使傳送過來事務隊列不致過大,需要將成功加載的事務從事物隊列里清除掉,這里設定每小時清除一次。 CONNECT;repadmin/repadmin@cl.world BEGIN DBMS_DEFER_SYS.SCHEDULE_PURGE;( next_date;=>;SYSDATE, interval;=>;’SYSDATE;+;1/24’, delay_seconds;=>;0); END; 在建立好站點cl.world后,以同樣的方法創(chuàng)建站點js. world。 (6)創(chuàng)建各主控站點之間的調度鏈接:創(chuàng)建各主控站點之間的調度鏈接需要先在各主控站點間建立數(shù)據(jù)庫鏈接,之后為每個數(shù)據(jù)庫鏈接定義調度時間。首先,在處理站點上建立與解釋站點的數(shù)據(jù)庫鏈接,這里需要先建立一個公用數(shù)據(jù)庫鏈接,供其他私有數(shù)據(jù)庫鏈接來使用。 CONNECT;SYSTEM/MANAGER@cl.world CREATE;PUBLIC;DATABASE;LINK;js.world;USING;’js.world’; CONNECT;repadmin/repadmin@cl.world CREATE;DATABASE;LINK;js.world;CONNECT;TO;repadmin IDENTIFIED;BY;repadmin; 同樣,在解釋站點上建立與處理站點的數(shù)據(jù)庫鏈接以下為引用的內容: CONNECT;SYSTEM/MANAGER@js.world CREATE;PUBLIC;DATABASE;LINK;cl.world;USING;’cl.world’; CONNECT;repadmin/repadmin@js.world CREATE;DATABASE;LINK;cl.world;CONNECT;TO;repadmin IDENTIFIED;BY;repadmin; 調度鏈接確定本站點上的事務向其他站點發(fā)送的頻度,下面的代碼為10分鐘一次: CONNECT;repadmin/repadmin@cl.world BEGIN DBMS_DEFER_SYS.SCHEDULE_PUSH;( destination;=>;’js.world’, interval;=>;’SYSDATE;+;(1/144)’, next_date;=>;SYSDATE, parallelism;=>;1, execution_seconds;=>;1500, delay_seconds;=>;1200); END; 在解釋站點上做相同的工作STEP2 創(chuàng)建主控組在復制環(huán)境中,Oracle用組來治理復制對象。通過將相關的復制對象放在一個組里,從而方便對大量數(shù)據(jù)對象的治理。 這里我們假設用戶模式integr ation 在處理站點和解釋站點都已存在,而且表測區(qū)(survey )和測線(line)也已經(jīng)創(chuàng)建。(1)創(chuàng)建主控組對象 CONNECT;repadmin/repadmin@cl.world BEGIN DBMS_REPCAT.CREATE_MASTER_REPGROUP;( gname;=>;’inte_repg’); END; (2)向主控組中添加數(shù)據(jù)對象,將測區(qū)表survey加入到組inte_repg中 BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT;( gname;=>;’inte_repg’, type;=>;’TABLE’, oname;=>;’survey’, sname;=>;’integration’, use_existing_object;=>;TRUE, copy_rows;=>;FALSE); END; 以同樣的方法將測線表line 加入到組inte_repg中。(3)在主控組中添加其他參與復制的站點,數(shù)據(jù)庫之間的同步方式在此指定 BEGIN DBMS_REPCAT.ADD_MASTER_DATABASE;( gname;=>;’inte_repg’, master;=>;’js.world’, use_existing_objects;=>;TRUE, copy_rows;=>;FALSE, propagation_mode;=>;’ASYNCHRONOUS’); END; (4)假如可能出現(xiàn)沖突,則需要配置沖突解決方案。沖突解決方案將在后面介紹。 (5)為每個對象生成復制支持 BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT;( sname;=>;’integration’, oname;=>;’survey’, type;=>;’TABLE’, min_communication;=>;TRUE); END; 測線表line也一樣。(6)重新開始復制 BEGIN DBMS_REPCAT.RESUME_MASTER_ACTIVITY;( gname;=>;’inte_repg’); END; 以同樣的方式設置解釋站點。設置成功后,數(shù)據(jù)復制過程就宣告完畢,庫中的數(shù)據(jù)就可進行復制。數(shù)據(jù)復制中沖突的解決方案在復制環(huán)境中,盡管在數(shù)據(jù)庫和應用程序設計過程中,會盡量避免各站點間沖突的發(fā)生,但完全避免沖突的可能性還是比較小的,那么一旦沖突發(fā)生,就需要一個按照具體業(yè)務規(guī)則的沖突解決機制,來使得各站點的數(shù)據(jù)保持一致。首先需要分析哪些對象輕易出現(xiàn)沖突。通常來說,靜態(tài)的數(shù)據(jù)變化少,沖突出現(xiàn)的可能性也小;而有些數(shù)據(jù)變化非常大,沖突出現(xiàn)的可能性也大。確定了沖突易發(fā)的對象后,需要確定怎樣解決沖突,比如在各站點之間建立優(yōu)先次序,在數(shù)據(jù)不一致時,以某個站點上的為準;或以某個站點上最新的修改為準。Oracle提供了多中沖突解決方案,具體包括:針對更新沖突的方案、針對唯一性沖突的方案、針對刪除沖突的方案。除了這些方案以外,用戶還可以自定義沖突解決方法。每種方案都有自己的適用情況,那么我們需要根據(jù)具體的業(yè)務來選擇合適的沖突解決方案。結束語本文具體介紹了分布式系統(tǒng)Oracle中的數(shù)據(jù)復制技術,在具體應用中,還有許多比較復雜的問題需要解決,比如主控組中假如包含循環(huán)依靠的表或自相關的表時如何處理;如何利用模版機制來創(chuàng)建物化視圖站點;如何對數(shù)據(jù)復制環(huán)境進行治理與維護。這些問題需要在實際應用中逐步探索,深入研究。
標簽:
Oracle
數(shù)據(jù)庫
排行榜
