
摘 要:在簡(jiǎn)要說(shuō)明數(shù)據(jù)庫(kù)復(fù)制技術(shù)的基礎(chǔ)上,主要探討了oracle數(shù)據(jù)庫(kù)高級(jí)復(fù)制的幾種方法,介紹了多主復(fù)制和可更新快照復(fù)制兩種機(jī)制的設(shè)計(jì)步驟,并將實(shí)際應(yīng)用中可能出現(xiàn)的問(wèn)題進(jìn)行列舉,最后給出一個(gè)可更新快照復(fù)制實(shí)例。
關(guān)鍵詞:Oracle數(shù)據(jù)庫(kù);高級(jí)復(fù)制;應(yīng)用
一些大的信息系統(tǒng)往往由多地的不同用戶同時(shí)使用,由相距較遠(yuǎn)的多個(gè)站點(diǎn)構(gòu)成的廣域網(wǎng),并且各個(gè)站點(diǎn)之間需要數(shù)據(jù)共享,通常將這些共享的數(shù)據(jù)存儲(chǔ)在其中一個(gè)站點(diǎn)上,作為數(shù)據(jù)中心,所有用戶都從該站點(diǎn)存取數(shù)據(jù)。這種方案很容易就能保證數(shù)據(jù)一致性,但會(huì)造成數(shù)據(jù)中心的負(fù)載過(guò)大,使遠(yuǎn)程用戶的數(shù)據(jù)響應(yīng)很慢,甚至造成系統(tǒng)癱瘓。數(shù)據(jù)復(fù)制技術(shù)可以有效地解決這個(gè)問(wèn)題,它通過(guò)將這些共享數(shù)據(jù)復(fù)制到多個(gè)不同站點(diǎn)的數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)數(shù)據(jù)的本地訪問(wèn),減少網(wǎng)絡(luò)負(fù)荷,并提高數(shù)據(jù)訪問(wèn)的性能,而且通過(guò)數(shù)據(jù)同步,確保數(shù)據(jù)實(shí)時(shí)性和一致性[1]。該技術(shù)適用于用戶數(shù)較多、地理分布較廣、而且需要實(shí)時(shí)地訪問(wèn)相同數(shù)據(jù)的應(yīng)用模式。
Oracle數(shù)據(jù)庫(kù)的復(fù)制是由數(shù)據(jù)庫(kù)的后臺(tái)進(jìn)程自動(dòng)實(shí)現(xiàn)的,通過(guò)設(shè)置數(shù)據(jù)庫(kù)參數(shù),確定后臺(tái)負(fù)責(zé)復(fù)制任務(wù)的進(jìn)程數(shù)和被激活的時(shí)間。數(shù)據(jù)庫(kù)的后臺(tái)進(jìn)程是由系統(tǒng)按設(shè)定的時(shí)間間隔執(zhí)行預(yù)定的操作,以實(shí)現(xiàn)數(shù)據(jù)定期地從源數(shù)據(jù)庫(kù)到目標(biāo)數(shù)據(jù)庫(kù)的傳輸,并由系統(tǒng)進(jìn)行控制。Oracle數(shù)據(jù)庫(kù)復(fù)制支持基本復(fù)制和高級(jí)復(fù)制兩種形式,這里主要講述Oracle高級(jí)復(fù)制技術(shù)在應(yīng)用時(shí)的設(shè)計(jì),以及可能遇到的問(wèn)題和解決辦法。
1 基本概念
Oracle高級(jí)復(fù)制,即對(duì)稱(chēng)復(fù)制,既可支持整個(gè)表的復(fù)制也可支持基于部分表的復(fù)制兩種復(fù)制方案,其主要是通過(guò)多主復(fù)制和可更新快照復(fù)制兩種機(jī)制實(shí)現(xiàn)的。同時(shí)還可以將這兩種復(fù)制機(jī)制結(jié)合起來(lái)以滿足不斷變化的業(yè)務(wù)需求。
2 高級(jí)復(fù)制設(shè)計(jì)步驟
2.1 多主復(fù)制
(1)創(chuàng)建復(fù)制環(huán)境,明確高級(jí)復(fù)制的站點(diǎn)和參與復(fù)制的數(shù)據(jù)表;保證各站點(diǎn)具有復(fù)制關(guān)系的表結(jié)構(gòu)的一致性;(2)使用數(shù)據(jù)庫(kù)復(fù)制管理器,定義參加復(fù)制的站點(diǎn),在復(fù)制的各站點(diǎn),建立包含復(fù)制實(shí)體的用戶和復(fù)制的數(shù)據(jù)庫(kù)鏈路,建立復(fù)制的管理用戶,配置數(shù)據(jù)更新的計(jì)劃;(3)建立主復(fù)制組,不同的需參與復(fù)制的實(shí)體可加入不同的組中;(4)給用戶分配適合的權(quán)限,防止由于用戶權(quán)限過(guò)大而造成的復(fù)制沖突。
2.2 可更新快照復(fù)制
(1)創(chuàng)建復(fù)制環(huán)境,明確高級(jí)復(fù)制的站點(diǎn)、參與復(fù)制的數(shù)據(jù)表和可更新快照復(fù)制的站點(diǎn);保證各站點(diǎn)具有復(fù)制關(guān)系的表結(jié)構(gòu)的一致性;(2)在復(fù)制的各站點(diǎn)建立快照管理用戶,建立包含可更新快照實(shí)體的用戶和復(fù)制的數(shù)據(jù)庫(kù)鏈路,配置數(shù)據(jù)更新的時(shí)間和間隔;(3)在主站點(diǎn)建立快照日志;(4)在復(fù)制點(diǎn)建立必要的更新組;(5)建立快照組,快照組可包含表、存儲(chǔ)過(guò)程、包、函數(shù)、同義詞、視圖等實(shí)體;(6)給用戶分配適合的權(quán)限,防止由于用戶權(quán)限過(guò)大而造成的復(fù)制沖突。[3]
3 需要注意事項(xiàng)
3.1 確保網(wǎng)絡(luò)連接的穩(wěn)定。如果服務(wù)器網(wǎng)絡(luò)連接中斷,則造成數(shù)據(jù)無(wú)法訪問(wèn)和傳輸;網(wǎng)絡(luò)不穩(wěn)定,會(huì)導(dǎo)致數(shù)據(jù)傳輸過(guò)程中出現(xiàn)丟包現(xiàn)象,影響數(shù)據(jù)的完整性。
3.2 要有較高的網(wǎng)絡(luò)傳輸速度。各個(gè)站點(diǎn)之間要進(jìn)行大量的、頻繁的數(shù)據(jù)傳輸,速度過(guò)慢的話將影響其訪問(wèn)速度。
3.3 服務(wù)器應(yīng)保持開(kāi)機(jī)狀態(tài)或定時(shí)開(kāi)機(jī)。否則會(huì)造成大量的延遲任務(wù),無(wú)法進(jìn)行數(shù)據(jù)發(fā)布。
3.4 不能在參與復(fù)制的表上面直接執(zhí)行DDL語(yǔ)句。因?yàn)镺RACLE自動(dòng)在參與復(fù)制的表上建立了支持復(fù)制的TRIGGER和PACKAGE,在其上面直接執(zhí)行任何DDL語(yǔ)句都會(huì)破壞這些復(fù)制支持。應(yīng)該先SUSPEND要修改表所在的復(fù)制組,在REPICATION MANAGER中或調(diào)用REPCAT API執(zhí)行DDL語(yǔ)句,然后重新GENERATE該表的復(fù)制支持,最后將復(fù)制組狀態(tài)恢復(fù)為NORMAL。注意一定要在修改表結(jié)構(gòu)的DDL語(yǔ)句中的表名前帶上屬主,并且最后不加分號(hào)。若直接執(zhí)行了DDL語(yǔ)句,應(yīng)先將該表移出復(fù)制環(huán)境刪掉,再重新建立或復(fù)制表。
3.5 如需要在表中增加字段并設(shè)置默認(rèn)值時(shí),在9i之前的版本中要分成兩部分執(zhí)行,不能一次執(zhí)行。例
ALTER TABLE owner.table_name ADD field_name
ALTER TABLE owner.table_name MODIFY field_name DEFAULT 'abc'
因?yàn)樵诟呒?jí)復(fù)制環(huán)境中,執(zhí)行任何DDL語(yǔ)句,都需要SUSPEND復(fù)制組,此時(shí)復(fù)制表只能查詢,不能再執(zhí)行DML語(yǔ)句。如何在一個(gè)SQL語(yǔ)句中執(zhí)行添加字段同時(shí)賦缺省值,則添加字段后插入缺省值的DML操作不會(huì)執(zhí)行,并且報(bào)錯(cuò)。分成兩步操作能解決該問(wèn)題。
3.6 執(zhí)行任何對(duì)復(fù)制環(huán)境的管理命令前,都要保證此時(shí)沒(méi)有堆積的DEFERRED TRANS。
3.7 ADMIN REQUEST(對(duì)復(fù)制環(huán)境的管理命令)須一步一步執(zhí)行。用一個(gè)REPCATLOG表保存ADMIN REQUEST語(yǔ)句,從第一條到最后一條順序執(zhí)行,只有執(zhí)行完上一條后才能執(zhí)行下一條。每次發(fā)出ADMIN REQUEST后,都要檢查REPCATLOG表是否為空,只有當(dāng)所有的REPCATLOG表都為空后,才能將復(fù)制組設(shè)置為NORMAL,發(fā)出下一條命令。
3.8 如果REPCATLOG表中有無(wú)法執(zhí)行的命令,可以APPLY或PURGE掉,再重新執(zhí)行命令。若只是其中一個(gè)節(jié)點(diǎn)上有遺留命令,則可在該節(jié)點(diǎn)上多執(zhí)行幾次APPLY。
3.9 當(dāng)出現(xiàn)死鎖現(xiàn)象時(shí),可以先嘗試中斷掉該ADMIN REQUEST對(duì)應(yīng)的任務(wù),重新刷新命令,若能繼續(xù)執(zhí)行,則恢復(fù)任務(wù),否則從V$SESSION 和V$LOCK中查出死鎖進(jìn)程,用ALTER SYSTEM KILL SESSION 將其殺掉。如果無(wú)法殺掉,則需查出類(lèi)型為'RQ'的分布式死鎖,根據(jù)SID查出對(duì)應(yīng)的后臺(tái)進(jìn)程,從操作系統(tǒng)中殺掉后臺(tái)進(jìn)程,最后再恢復(fù)任務(wù)和相關(guān)復(fù)制環(huán)境的狀態(tài)。
4 實(shí)際應(yīng)用
某地下水監(jiān)測(cè)系統(tǒng)由省級(jí)主站、市級(jí)分站和縣級(jí)分站組成,數(shù)據(jù)存儲(chǔ)采取省級(jí)數(shù)據(jù)中心和市級(jí)數(shù)據(jù)中心分布式存儲(chǔ),均采用Oracle數(shù)據(jù)庫(kù),以確保全省數(shù)據(jù)儲(chǔ)存的快速、穩(wěn)定、安全。各市分站只為本市所轄縣級(jí)分站提供存儲(chǔ)服務(wù),并將所有測(cè)報(bào)數(shù)據(jù)傳送匯總到省級(jí)主站數(shù)據(jù)中心,同時(shí)其為各市級(jí)分站數(shù)據(jù)實(shí)現(xiàn)異地備份,提供跨地市數(shù)據(jù)查詢,當(dāng)各地市分站數(shù)據(jù)出現(xiàn)故障時(shí),可從省級(jí)主站讀取數(shù)據(jù),恢復(fù)數(shù)據(jù)。
整個(gè)數(shù)據(jù)同步機(jī)制主要采用Oracle復(fù)制技術(shù)的可更新快照機(jī)制。整個(gè)分布式數(shù)據(jù)庫(kù)系統(tǒng)采用的是“一主多從”的結(jié)構(gòu)(如圖1),設(shè)置省級(jí)主站的數(shù)據(jù)庫(kù)系統(tǒng)為主數(shù)據(jù)庫(kù),各市分站的數(shù)據(jù)庫(kù)系統(tǒng)為從數(shù)據(jù)庫(kù)。使用Oracle系統(tǒng)中的增量復(fù)制技術(shù),定時(shí)或手動(dòng)進(jìn)行主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)的數(shù)據(jù)更新。從數(shù)據(jù)庫(kù)復(fù)制到主數(shù)據(jù)庫(kù)的是全部數(shù)據(jù),只要從數(shù)據(jù)庫(kù)中的數(shù)據(jù)有變化,就會(huì)反映到主數(shù)據(jù)庫(kù)中;主數(shù)據(jù)庫(kù)復(fù)制到從數(shù)據(jù)庫(kù)的是與本市分站相關(guān)的測(cè)報(bào)數(shù)據(jù)。
5 結(jié)束語(yǔ)
分布式數(shù)據(jù)庫(kù)系統(tǒng)適應(yīng)于地理上分散而管理上又有不同程度集中的大型信息系統(tǒng)的需求,Oracle高級(jí)復(fù)制機(jī)制提供了高可靠性、高可用性以及改善了系統(tǒng)的性能,同時(shí)也提供了很好的各數(shù)據(jù)中心數(shù)據(jù)同步實(shí)現(xiàn)方案。在具體應(yīng)用中,也還有許多比較復(fù)雜的問(wèn)題需要解決,需要逐步探索、深入研究。
參考文獻(xiàn)
[1]鄭振楣,于戈,郭敏.分布式數(shù)據(jù)庫(kù)[M].北京:科學(xué)出版社,1998
[2]丁鋮.Oracle8/8I數(shù)據(jù)庫(kù)系統(tǒng)原理[M].北京:人民郵電出版社,2001
[3]胡桂香.數(shù)據(jù)庫(kù)復(fù)制的設(shè)計(jì)和管理[J].電子工程師,2002,(5)
作者簡(jiǎn)介:李麗(1981-),女,漢族,河南新鄉(xiāng)人,焦作師范高等專(zhuān)科學(xué)校教師,本科學(xué)士學(xué)位,研究生學(xué)歷,研究方向:計(jì)算機(jī)應(yīng)用。