??? 關鍵詞:數據庫,分布式系統,復制,管理
1 數據庫復制的原理
數據庫復制是在分布式數據庫系統中使用非常廣泛的技術。分布式數據庫系統由多個相同或不同的數據庫組成,它們通過局域網或廣域網相連,不同數據庫的數據之間有非常緊密的關系。在分布式數據庫系統中應用可訪問本地和遠程的數據庫,使用客戶服務器體系結構處理信息請求。不同物理數據庫之間使用數據庫鏈路連接,使得客戶端對它們的訪問就象訪問一個邏輯數據庫一樣。分布式數據庫系統中各個數據庫協同工作,但每個數據庫節點是個獨立的數據庫,可由不同部門分別進行管理和數據庫的升級,一個數據庫出現故障不會影響其它數據庫的使用。在分布式數據庫系統中的每個獨立的數據庫一般被稱為站點或數據庫站點。
在應用中,采用數據庫復制的原因是需定期地將信息傳播出去,或定期地從某地獲得信息。
可以Oracle數據庫為例來說明數據庫工作的基本原理。Oracle數據庫的復制是采用數據庫的后臺進程自動實現的。負責復制工作的后臺進程個數和它們被激活的時間是由數據庫參數確定的。數據庫的后臺進程是由系統進程進行管理,經過設定的時間間隔執行它們預定的工作,以實現數據定期地從源站點到目標站點的傳播。Oracle數據庫具有基本復制和高級復制方法。所謂基本復制是指從主表到復制點生成的數據是只讀的,用戶不能對復制生成的數據實施修改操作,這種實體被稱為快照。快照的信息將不斷地按照設計時定義的時間間隔從主表進行更新,間隔的設定可根據應用對信息要求的實時性而定。高級復制相對基本復制而言各復制點都可對數據進行修改,每個數據庫站點進行的修改都可傳播到其它站點,每個站點都可看到其它站點輸入或修改的數據。數據的一致性是采用高級復制時須全面考慮的問題。
數據庫的復制用途很大,但不同的應用有不同的要求,Oracle提供的復制方法能滿足大多數的需要,但有的實際問題,如帶有統計匯總計算功能的復制,只有利用Oracle提供的思想方法自行開發復制軟件,將復制和匯總合二為一。理解了復制工作的基本原理后,自行開發復制軟件也就是輕而易舉的事了。
2 數據庫復制的用途
復制是在分布式數據庫系統中獲得多個數據庫信息的方法,如在部隊的數據庫系統中用于上級機關了解和獲得下屬各部隊的武器、彈藥、物資等的狀態情況的數據。還可用于沒條件一直處于連接的環境、信息的分布使用、信息匯總、提高性能、備份、平衡應用的負載、大批數據傳輸等,如連鎖店的總店為了統一零售價格、及時將商品的價格發布給各零售店是非常重要的,為達到此目的,每個零售店的數據庫擁有價格列表的復制品,每天晚上從總店的主表更新,這是信息的分布使用的典型例子。大批數據傳輸主要用于從別的數據庫系統中導入數據,如從聯機事務處理系統中將信息復制到決策支持系統中等。
一般說來,應用只存取本地數據庫的數據,而限制對遠程數據庫數據的存取,以減少網絡的負擔,提高性能;另一方面,如果重要的數據已被復制到其它服務器,那么在本地服務器出現故障時,系統仍然可用。使用復制技術還能提高數據庫存取的性能、數據的安全性和加強應用的限制。
利用數據庫復制的方法有利于及時獲得最新信息,有利于減少用戶的重復勞動,有利于及時維護數據庫的一致性。
3 數據庫復制設計的基本步驟
數據庫復制的基本工作方式是,定義一個查詢,使用數據庫的作業管理機制,自動地、定期地從主表更新數據。
3.1 基本復制
??? 基本復制的設計主要包括以下步驟:
(1)建立復制環境,確定哪些主表將被復制,復制到哪些站點的數據庫;
(2)在復制的各站點,建立復制用戶和復制的數據庫鏈路;
?。?)在被復制的數據庫中建立所有主表的更新日志,更新日志是支持快速更新的關鍵;
?。?)在復制的各站點,使用數據庫鏈路建立快照;
(5)在復制的各站點,建立快照的更新組,定義更新時間和更新間隔,將需同時更新的快照加入一個更新組中;
?。?)授予需使用快照的用戶對快照的查詢權限。
3.1.1 復制環境
在設計一個分布式數據庫系統時,確定哪些主表將被復制,檢查每個參加復制的表,確認每個表都有主鍵。確定每個表中哪些信息以什么形式復制到哪些站點的數據庫。將需復制的主表根據其數據關系、應用關系、應用對數據的實時性要求等進行分組。
建議不同服務器中需復制的表在不同的數據庫位于相同的用戶名下,對應的用戶采用相同的口令,以便于操作。而采用高級復制的具有數據復制關系的表的結構在各站點應一致。
3.1.2 建立用戶和數據庫鏈路
在參加復制的主站點和復制點建立對應的用戶以包含復制對象。建立主表所在的數據庫到各復制站點的數據庫鏈路。雖然復制一般是在不同數據庫的相同用戶之間進行,但建立數據庫鏈路時還是需顯式地指定連接的用戶名和口令。不要建立公共的數據庫鏈路,一般建立屬于直接連接的復制用戶的私有鏈路。
3.1.3 建立日志
日志是為了記錄對主表數據的輸入、更新、刪除操作,有了日志,系統可識別哪些數據是新產生的需要復制的數據,哪些數據是已經被復制過了的,因此每次更新只需復制那些最新的信息,以減少數據的復制量,降低網絡流量,縮短復制的時間。
在被復制的數據庫中建立所有主表的更新日志,更新日志只需建立一次即可支持一個站點到多個站點的復制。
3.1.4 建立快照
在每個復制站點,建立所需的快照。復制端的快照的邏輯結構是從一個或多個主表中進行查詢的SQL語句定義的,同時該SQL語句也定義快照所含的來自主表的那部分信息,它不能包含合計、分組、連接、集合功能。
3.1.5 更新
根據對主表的分組情況在復制的各站點建立快照的更新組,根據需要定義更新時間和更新間隔,將需同時更新的快照加入一個更新組中。
必須設定怎樣和什么時候更新復制端的數據??蛇x用完全更新、快速更新、手工更新和自動更新方式。更新時間的設置需遵循以下原則:
??? ·下次更新時間為未來時間;
??? ·更新間隔大于完成一次更新所需時間;
??? ·可指定一具體時間進行手工更新。
出現網絡問題或系統錯誤時,更新將暫時被中斷,一旦問題解決,更新將恢復正常。
3.1.6 權限
對于使用簡單復制方法生成的快照,只需授予用戶查詢權限,因為快照是只讀的;對于使用高級復制方法生成的復制品,可視需求設置不同權限,但由于權限越大,用戶可執行的操作越多,產生復制沖突的可能性越大,因此權限還需有限制地授予。
3.2 高級復制
高級復制又分為多站點復制和可更新快照復制。其設計原理和步驟與基本復制相似,簡述如下。多站點復制包括以下步驟:
(1)設計并建立復制環境,確定哪些站點作為高級復制的站點,哪些主表將參與復制;
?。?)使用復制管理器,定義參加復制的站點,在復制的各站點,建立包含復制實體的用戶和復制的數據庫鏈路,建立復制的管理用戶,配置數據更新的計劃;
(3)建立主復制組,不同的需參與復制的實體可加入不同的組中;
(4)授予需使用復制信息的用戶以適當的權限。
??? 可更新快照復制包括以下步驟:
(1)設計并建立復制環境,確定哪些站點作為復制的主站點,哪些主表和實體將參與復制,確定哪些為可更新快照的設置站點;
?。?)在復制的各站點建立快照管理用戶,建立包含可更新快照實體的用戶和復制的數據庫鏈路,配置數據更新的時間和間隔;
??? (3)在主站點建立快照日志;
??? (4)在復制點建立必要的更新組;
?。?)建立快照組,快照組可包含表、存儲過程、包、函數、同義詞、視圖等實體;
?。?)授予需使用復制信息的用戶以適當的權限。
4 數據庫復制的設計
4.1 數據庫的分布
如何分布和設計數據庫需視具體工程應用的地理分布、組織關系、數據量、資金和對數據的安全性等情況而定。
數據庫復制的設計要盡可能簡單,數據關系盡可能簡化,只要滿足需求即可。盡可能減少維護管理的工作量。
應用存取頻繁的數據盡量位于本地數據庫,如果這些數據由遠程數據庫進行管理,則需考慮將其復制到本地,這樣既可簡化應用程序的設計,又可提高數據的安全性、降低網絡流量、提高性能。如果應用程序需要同時存取本地和遠程的數據庫,設計時一定要通過事務的同時提交或回滾以保證數據的一致性。
如果采用高級復制,因為可能出現多個站點同時修改或輸入相同數據的可能,所以數據復制需考慮的首要問題是數據沖突問題。設計中要盡可能避免數據沖突的產生。而設計時不可避免的數據沖突要在設計時確定解決方法,在運行時將其配置于復制環境以利于在沖突產生時數據庫能及時解決問題,不致于影響整個復制的工作進程。
4.2 數據沖突的解決
數據的沖突是設計人員設計分布式數據庫系統的數據庫復制時主要解決的問題,數據沖突主要出現在高級復制環境。
4.2.1 唯一性約束沖突
如果復制的數據將破壞完整性約束(如當不同站點的事務向參加復制的表中插入主鍵相同的記錄時)將導致唯一性約束沖突。
如果復制方在插入或修改時出現違反唯一性約束問題,則復制方檢測到唯一性約束沖突。
多站點復制時網絡上不同數據庫上的用戶同時修改或刪除同一記錄或同時插入主鍵相同的記錄的矛盾,在設計時要考慮充分,可用以下方法避免:
??? (1)盡量減少需同時更新數據的站點數;
(2)建立不同取值范圍的序列生成器生成主鍵,避免主鍵重復的矛盾。但對于站點很多的情況這種方法不合適。避免主鍵重復的另一方法是在每一站點采用相同的全范圍的序列生成器,將其與站點的唯一標識結合作為復合主鍵;
(3)在應用中不允許修改主鍵。
4.2.2 刪除沖突
如果復制方在執行刪除和更新操作時,主鍵不存在,復制方將檢測到一個刪除沖突。如果一個事務試圖刪除已經被別的用戶刪除了的或正被別的用戶修改的記錄時將出現刪除沖突。刪除沖突在復制環境中必須避免??刹捎卯惒絼h除方法,即在應用程序中不采用刪除命令,而采用標記需刪除的記錄,然后系統定期地統一執行刪除操作以避免刪除沖突。
4.2.3 更新沖突
當不同站點的事務在幾乎同一時間修改同一記錄時將導致更新沖突。
在設計時需盡可能避免更新沖突,但不能徹底杜絕。設計時不能避免的沖突,在設計時要全部理出,針對不同情況配置數據庫提供的沖突解決方法解決。但數據庫內建的沖突解決功能不能解決刪除沖突、對主鍵的修改、違反參考一致性等沖突,這些需要通過應用的設計解決。
4.3 參數的設置
??? 要使復制能自動、正常工作,需在參數文件中適當設置和調整以下參數:
一般第一個參數為2(必須大于0)即可,如果數據庫中配置的作業非常多、有多個同時更新的作業,需增大此參數。其取值范圍為0~9,A~Z。
第二個參數單位為秒,定義喚醒服務器后臺進程的時間間隔,使用缺省值60。
如果二者設置不協調,將導致數據庫不能及時更新數據或后臺進程死鎖。
5 數據庫復制的管理
數據庫復制的設計主要由研制方完成,而其管理主要是指系統投入使用后的日常管理工作,主要由使用方的數據庫管理員來完成。
5.1 參數的修改
在設計時,設計者會綜合考慮各種因素以設置參數,但隨著用戶業務的發展,數據量的增大,在數據庫還未出現問題時,數據庫管理員應及時地對
JOB QUEUE PROCESS,JOB QUEUE
INTERVAL參數進行調整。如果所設置的參數不能滿足應用的需要,數據的復制將出現問題。這可查看快照和數據庫的日志文件,如果出現錯誤,日志中有記錄,并且生成CORE文件。后臺進程出現的問題數據庫自己能解決,但CORE文件需要數據庫管理員及時刪除,否則由于它增長迅速,將很快占滿整個硬盤。
5.2 更改復制更新的間隔
復制作業執行的時間和觸發的時間間隔也是管理員經常需調整的因素。
數據庫管理員能根據需要更改復制間隔時間,以滿足需求的變化。每個用戶只能更改屬于自己的作業執行間隔。
作業間隔的設定一定不能小于執行一次數據更新所需的時間。
5.3 取消復制作業
由于某種原因不需繼續執行復制操作時可取消復制作業。有兩種選擇:暫時終止和徹底刪除。暫時終止的復制作業在將來需要時可恢復執行,而徹底刪除的復制作業不可恢復,只能重建。
??? 用戶只能停止或取消屬于自己的復制作業。
5.4 可能出現的問題
下列情況下數據庫的復制不能正常進行:缺少后臺進程,網絡故障,數據庫例程失敗,以及復制程序出現錯誤。
若由于某種原因復制作業不能正常執行,數據庫將以一定的時間間隔重復執行此作業,在經過一定次數的嘗試后仍不能成功,則該作業將由數據庫自動標記為“終止”。一旦造成終止的問題被解決,被終止的作業可人為地讓其執行復制(一旦執行成功,該作業的狀態將自動改變),或將其狀態由終止改為自動執行,讓數據庫自動執行復制。如果造成終止的問題在數據庫發現問題至設定的嘗試次數的時間范圍之內解決,復制作業將正常執行而不會終止。
如果復制方在設定的時間得不到數據的更新,這時有可能是后臺進程死鎖,有三種解決方法:人為執行復制作業,將數據復制上來;如果用戶并不急需看到更新的數據,那么可以再等待一段時間,Oracle的系統監視進程將自動殺掉死的復制進程,重新生成新的后臺進程,復制將自動恢復;關閉并重新打開數據庫,復制將自動恢復。
每個用戶只能人工執行屬于自己的作業。
5.5 擴充站點的問題
如果為了滿足新的需求,需在已建立好的復制環境中建立新的快照,則以下三個條件同時成立,系統將出錯:
??? (1)新的快照須采用快速更新方式更新;
(2)新的快照與某個已存在的快照是基于相同的主表;
?。?)該已存在的快照在創建新的快照時能被快速更新。
解決此問題的方法是新建的快照采用完全更新方式,或采用以下方法避免問題出現:在建新的快照之前建立一個基于同一主表的虛擬快照,以避免在快照創建時的數據更新,然后以快速更新方式建立所需的快照,最后刪除虛擬快照。
6 結束語
數據庫的復制是個非常靈活的技術,恰當地應用該技術將給用戶和設計者帶來意想不到的好處。但復制的應用經常會給數據庫系統的管理帶來很多麻煩,因此,設計數據庫復制環境時要盡可能地簡單、實用,以提高系統的可用性。同時,一個分布式數據庫系統的數據庫管理員,必須具有全面的數據庫知識以保證系統正常、穩定地工作。
評論
查看更多