李海浩
(中國人民解放軍91413 部隊,河北 秦皇島 066000)
隨著船舶設(shè)備軟件的飛速發(fā)展,數(shù)據(jù)庫已經(jīng)成為其組織和管理數(shù)據(jù)的必需成員。由于Oracle 數(shù)據(jù)庫相對其他數(shù)據(jù)庫顯現(xiàn)出穩(wěn)定性好、安全性高、數(shù)據(jù)處理性能強等優(yōu)點,逐漸成為船舶設(shè)備軟件數(shù)據(jù)庫的首選。Oracle 數(shù)據(jù)庫高可用方案往往需要資深的數(shù)據(jù)庫管理工程師的配合與維護,而船舶設(shè)備軟件的操作船員無法實現(xiàn)相關(guān)維護。根據(jù)Oracle 數(shù)據(jù)庫的高可用方案的功能與使用方法,結(jié)合船舶設(shè)備的使用特性,提出了一套適用于船舶設(shè)備軟件的Oracle 數(shù)據(jù)庫方案,對船舶設(shè)備軟件數(shù)據(jù)庫的應(yīng)用具有一定的借鑒意義。
高可用性有兩種不同的含義,在廣義環(huán)境中是指整個系統(tǒng)的高可用性,在狹義方面一般指主機、服務(wù)的冗余。高可用性不僅包含了系統(tǒng)本身故障、應(yīng)用層的故障、網(wǎng)絡(luò)故障、人為操作的錯誤等,還包含數(shù)據(jù)的冗余、容災(zāi)及計劃的維護時間等。
RAC 通過不同的節(jié)點使用一個或多個Oracle 實例與一個數(shù)據(jù)庫連接,該數(shù)據(jù)庫存放于多個節(jié)點的公用存儲上,通過高速緩存合并技術(shù)使得集群中的每個節(jié)點都可以通過高速集群互聯(lián)高效的同步其內(nèi)存高速緩存,從而最大限度的降低磁盤IO,并自動并行處理及均勻分布負(fù)載,當(dāng)其中一個節(jié)點發(fā)生故障時,可以自動容錯和恢復(fù)能力來實現(xiàn)節(jié)點的故障切換,從而保證數(shù)據(jù)庫長時間的高效可用。
Data Guard 一般包括兩套數(shù)據(jù)庫環(huán)境,一臺主要數(shù)據(jù)庫,一臺備用數(shù)據(jù)庫,與RAC 不同的是只有一個節(jié)點處于活動狀態(tài),所有應(yīng)用都連接到主服務(wù)器上,只有當(dāng)主服務(wù)器發(fā)生故障才考慮切換到備用服務(wù)器。Oracle Data Guard 可以實現(xiàn)數(shù)據(jù)庫主機及存儲的完全冗余保護,該冗余甚至可以跨地域做成容災(zāi)保護,是Oracle 主推的容災(zāi)產(chǎn)品。在這種模式下,主數(shù)據(jù)庫必須運行在歸檔模式下,以保證備用節(jié)點的數(shù)據(jù)一致性,因此該特性并不適合數(shù)據(jù)倉庫。
Oracle 數(shù)據(jù)泵方案利用Oracle 數(shù)據(jù)泵技術(shù),結(jié)合操作系統(tǒng)腳本與計劃任務(wù),搭建一套適用于船舶設(shè)備軟件使用環(huán)境的數(shù)據(jù)庫方案。該方案以O(shè)racle 10g 數(shù)據(jù)庫與Solaris 10 操作系統(tǒng)為例進行數(shù)據(jù)泵的搭建。
Oracle 10g 的數(shù)據(jù)泵技術(shù)能夠幫助用戶將數(shù)據(jù)庫的數(shù)據(jù)和元數(shù)據(jù)快速移動到另一個Oracle 數(shù)據(jù)庫中。數(shù)據(jù)泵導(dǎo)出是使用EXPDP 工具將數(shù)據(jù)庫對象的數(shù)據(jù)或元數(shù)據(jù)導(dǎo)出到轉(zhuǎn)儲文件中;數(shù)據(jù)泵導(dǎo)入是使用IMPDP 工具將轉(zhuǎn)儲文件中的數(shù)據(jù)或元數(shù)據(jù)導(dǎo)入到Oracle 數(shù)據(jù)庫中。數(shù)據(jù)泵導(dǎo)入導(dǎo)出可以再數(shù)據(jù)庫用戶之間、數(shù)據(jù)庫之間進行數(shù)據(jù)的移動。
使用兩臺數(shù)據(jù)庫服務(wù)器,分別安裝Oracle 10g 數(shù)據(jù)庫,每臺服務(wù)器擁有獨立的存儲,一臺高配置的服務(wù)器作為主數(shù)據(jù)庫服務(wù)器,另外一臺作為備用數(shù)據(jù)庫服務(wù)器。
數(shù)據(jù)泵方案的基本內(nèi)容如下:
(1)將主數(shù)據(jù)庫導(dǎo)入到備用數(shù)據(jù)庫的命令形成腳本,在備用數(shù)據(jù)庫所在操作系統(tǒng)通過計劃任務(wù)定期運行,而不需要對主數(shù)據(jù)庫服務(wù)器進行任何配置;
(2)在完成主數(shù)據(jù)庫導(dǎo)入到備用數(shù)據(jù)庫操作后,使用EXPDP 工具將備用數(shù)據(jù)庫導(dǎo)出到備用數(shù)據(jù)庫服務(wù)器本地文件系統(tǒng);
(3)每一天夜間對主數(shù)據(jù)庫進行數(shù)據(jù)泵導(dǎo)出,導(dǎo)到主數(shù)據(jù)庫服務(wù)器本地文件系統(tǒng),在主備數(shù)據(jù)都出現(xiàn)故障時恢復(fù)數(shù)據(jù)使用;
(4)當(dāng)系統(tǒng)管理員需要對數(shù)據(jù)庫進行及時備份時,可以直接調(diào)用備份腳本;
(5)編寫主數(shù)據(jù)庫自動啟動腳本,使主數(shù)據(jù)庫服務(wù)器開機后自動啟動數(shù)據(jù)庫服務(wù),并啟動數(shù)據(jù)庫監(jiān)聽;
(6)編寫主數(shù)據(jù)庫自動關(guān)閉腳本,使主數(shù)據(jù)庫服務(wù)器關(guān)機時自動關(guān)閉數(shù)據(jù)庫服務(wù);
(7)編寫備用數(shù)據(jù)庫自動啟動腳本,使備用數(shù)據(jù)庫服務(wù)器開機后自動啟動數(shù)據(jù)庫服務(wù),但不啟動備用數(shù)據(jù)庫的監(jiān)聽程序;
(8)編寫備份數(shù)據(jù)庫自動關(guān)閉腳本,是備用數(shù)據(jù)庫服務(wù)器關(guān)機時自動關(guān)閉數(shù)據(jù)庫服務(wù)。
備用數(shù)據(jù)庫同步與備份腳本如圖1 所示:
在使用主數(shù)據(jù)庫時,主數(shù)據(jù)庫的監(jiān)聽程序處于啟動狀態(tài)。當(dāng)發(fā)生故障時,關(guān)閉主數(shù)據(jù)庫的監(jiān)聽程序,啟動備用數(shù)據(jù)庫的監(jiān)聽程序,令備用數(shù)據(jù)庫對外提供服務(wù)。
上述備用數(shù)據(jù)庫從主數(shù)據(jù)庫中同步數(shù)據(jù)的腳本運行周期需要適當(dāng)?shù)剡x取。不同的數(shù)據(jù)庫環(huán)境同步的時間是不相同的,從幾分鐘到幾十分鐘不等。如果在一次同步尚未結(jié)束時,又開始了另一個同步操作,雖然不會出現(xiàn)錯誤,但會出現(xiàn)排隊現(xiàn)象,主數(shù)據(jù)庫的性能也會降低。選擇同步的周期可以根據(jù)使用數(shù)據(jù)庫的頻率和新增數(shù)據(jù)的重要性來選取。
另外,數(shù)據(jù)泵方案使用的是Oracle 數(shù)據(jù)庫的邏輯備份工具,解決的是數(shù)據(jù)庫數(shù)據(jù)失效的問題,對于物理文件的恢復(fù)不具有解決能力
測試環(huán)境的主數(shù)據(jù)庫機器選擇Sun Fire V490 服務(wù)器、雙核1500MHz 的CPU、8G 內(nèi)存,備數(shù)據(jù)庫機器選擇Dell OPTIPLEX780 臺式機、2926MHz 的CPU、2G 內(nèi)存。使用Quest Spotlight On Oracle 測試工具監(jiān)視Oracle 數(shù)據(jù)庫服務(wù)性能,包括CPU、內(nèi)存、網(wǎng)絡(luò)的使用情況;Benchmark Factory 測試工具測試數(shù)據(jù)庫性能和擴展性,在非生產(chǎn)環(huán)境下模擬成千上萬用戶在實際數(shù)據(jù)庫上的事務(wù)處理。
(1)在備用數(shù)據(jù)庫上運行腳本,一次將主數(shù)據(jù)庫scott 用戶的所有對象導(dǎo)入備用數(shù)據(jù)庫。結(jié)果:導(dǎo)入成功,耗時4 分鐘。
(2)在備用數(shù)據(jù)庫上運行腳本,僅將主數(shù)據(jù)庫scott 用戶的表數(shù)據(jù)導(dǎo)入備用數(shù)據(jù)庫,導(dǎo)入數(shù)據(jù)量500M。結(jié)果:由于備用數(shù)據(jù)庫在做改變時不斷寫歸檔日志,當(dāng)歸檔日志空間未滿時,耗時3 分鐘;當(dāng)歸檔日志空間已滿時,不能完成導(dǎo)入。
(3)將備用數(shù)據(jù)庫改為非歸檔模式,在備用數(shù)據(jù)庫上運行腳本,僅將主數(shù)據(jù)庫scott 用戶的表數(shù)據(jù)導(dǎo)入備用數(shù)據(jù)庫,導(dǎo)入數(shù)據(jù)量為500M。結(jié)果:導(dǎo)入成功,備用數(shù)據(jù)庫在做改變時不再寫歸檔日志,耗時2 分鐘。
(4)在主數(shù)據(jù)服務(wù)器上運行腳本,將主數(shù)據(jù)庫scott 用戶的表數(shù)據(jù)導(dǎo)出到主數(shù)據(jù)庫服務(wù)器文件系統(tǒng),即生成dump 文件。結(jié)果:導(dǎo)出成功,耗時小于2 分鐘。
(5)聯(lián)機重做日志設(shè)置為3 組,每組3 各成員,每個成員50M。聯(lián)機重做日志在備用數(shù)據(jù)庫所在操作系統(tǒng)上設(shè)置計劃任務(wù),每3 分鐘同步一次。結(jié)果:運行2 天后,聯(lián)機重做日志寫入出現(xiàn)故障。
(6)聯(lián)機重做日志設(shè)置為7 組,每組3個成員,每個成員200M。聯(lián)機重做日志在備用數(shù)據(jù)庫所在操作系統(tǒng)上設(shè)置計劃任務(wù),每5 分鐘同步一次。結(jié)果:運行8×24 小時,正常運行。
數(shù)據(jù)泵方案能夠滿足功能以及特定的性能需求,操作簡單。數(shù)據(jù)泵方案的同步過程會不斷的修改備用數(shù)據(jù)庫,產(chǎn)生大量重做日志,如果重做日志的組數(shù)較少,會導(dǎo)致一組日志尚未寫完,又一個寫操作已經(jīng)來臨,可能導(dǎo)致重做日志寫失敗使重做日志損壞。因此備用數(shù)據(jù)庫要指定多組重做日志組,每組的成員不能太少,如果備用數(shù)據(jù)庫處于歸檔模式,很快歸檔空間就會裝滿導(dǎo)致數(shù)據(jù)庫無法啟動,因此備用數(shù)據(jù)庫處于非歸檔模式。
通過對Oracle 數(shù)據(jù)泵方案的測試,此方案得到了驗證。Oracle 數(shù)據(jù)泵方案能夠有效的滿足數(shù)據(jù)庫高可用性,同時兼顧方便船員的使用,充分考慮了不同的使用環(huán)境、不同使用需求,提高了設(shè)備軟件數(shù)據(jù)庫的可用性、可維護性。此方案在應(yīng)用時,用戶應(yīng)當(dāng)根據(jù)具體需求,考慮調(diào)整同步的周期、數(shù)據(jù)庫日志的配置以及對應(yīng)的備份策略等方面的問題。
[1]呂海波.Oracle 內(nèi)核技術(shù)揭密[M].機械工業(yè)出版社,2014,09:113-149.
[2]林樹澤,李淵.Oracle 數(shù)據(jù)庫進階——高可用、性能優(yōu)化和備份恢復(fù)[M].北京:清華大學(xué)出版社,2011.