賈海軍
摘要:近年來,隨著110指揮中心的業(yè)務(wù)發(fā)展,接、處警數(shù)據(jù)量急劇上升,老舊數(shù)據(jù)庫服務(wù)器已經(jīng)不滿足實際工作需要,亟需將大量數(shù)據(jù)遷移到一臺高性能數(shù)據(jù)庫服務(wù)器上,同時也要滿足數(shù)據(jù)不丟失、操作簡單、停機時間短等實際要求。Oracle GoldenGate(OGG)是一種基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制軟件,它通過解析源數(shù)據(jù)庫在線日志或歸檔日志獲得數(shù)據(jù)的增刪改變化,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫,實現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫同步。
關(guān)鍵詞:Oracle GoldenGate;數(shù)據(jù)庫;數(shù)據(jù)遷移
中圖分類號:TP311 文獻標(biāo)識碼:A DOI:10.3969/j.issn.1003-6970.2015.05.031
0 引言
110接處警指揮應(yīng)用系統(tǒng)是110報警服務(wù)臺中的重要組成部分,系統(tǒng)主要由接警、處警、反饋和數(shù)據(jù)庫系統(tǒng)組成,其中數(shù)據(jù)庫系統(tǒng)使用Oracle數(shù)據(jù)庫。由于系統(tǒng)常年不間斷運行,積累了大量接處警數(shù)據(jù),系統(tǒng)硬件性能已經(jīng)不滿足應(yīng)用需求,多次出現(xiàn)故障致使110程序卡機,給110系統(tǒng)正常運行帶來重大隱患。同時,鑒于各業(yè)務(wù)部門數(shù)據(jù)共享需求增加,需要實時抽取數(shù)據(jù)庫數(shù)據(jù),也給110數(shù)據(jù)庫造成巨大壓力。為了解決上述問題,我們計劃將現(xiàn)有的110接處反數(shù)據(jù)庫系統(tǒng)遷移到新的高性能服務(wù)器上,建立新的接處反數(shù)據(jù)庫系統(tǒng),將其和原有的數(shù)據(jù)庫系統(tǒng)和備庫系統(tǒng)以GoldenGate方式進行數(shù)據(jù)同步,形成一對多的數(shù)據(jù)同步模式,其中包括110主業(yè)務(wù)庫,110備庫,110查詢統(tǒng)計業(yè)務(wù)庫和數(shù)據(jù)推送中間庫等多層次數(shù)據(jù)同步的架構(gòu)。并在遷移過程中重新存儲表及索引的數(shù)據(jù),以解決表碎片,高水位等問題,針對大表將創(chuàng)建分區(qū)表以解決數(shù)據(jù)庫的性能問題。
1 設(shè)計思路
由于是同構(gòu)遷移,比較常用的數(shù)據(jù)庫遷移方式如下:
通過遷移方案的對比,我們選擇了停機時間最小回退簡單且能對表及索引進行重組的GoldenGate數(shù)據(jù)庫遷移方案。
采用這種方式的好處是:
一、業(yè)務(wù)連續(xù)性得到保證:原有數(shù)據(jù)庫不需要停機,業(yè)務(wù)不需要中斷。
二、應(yīng)用測試可以隨時進行:新的數(shù)據(jù)庫可以隨時進行業(yè)務(wù)測試,看業(yè)務(wù)系統(tǒng)與新平臺數(shù)據(jù)庫之間是否有需要修改的地方。
三、業(yè)務(wù)切換瞬間完成:待一切測試工作完成,只需要將應(yīng)用程序指向新數(shù)據(jù)庫,就可以完成數(shù)據(jù)庫的升級和遷移。
2 Oracle GoldenGate(OGG)技術(shù)簡介
Oracle GoldenGate是一種非插入性的基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制軟件,它通過解析源數(shù)據(jù)庫在線日志或歸檔日志獲得數(shù)據(jù)的增刪改變化,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫,實現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫同步、雙活。
GoldenGate主要包含Manager進程、Extract進程、Pump進程、Replicat進程。
Manager進程是GoldenGate的控制進程,它主要作用有以下幾個方面:啟動、監(jiān)控、重啟GoldenGate的其他進程,報告錯誤及時間,分配數(shù)據(jù)存儲空間,發(fā)布閥值報告等。
Extract進程運行在數(shù)據(jù)庫源端,負(fù)責(zé)從源端數(shù)據(jù)表或日志中捕獲數(shù)據(jù)。Extract進程利用其內(nèi)在的checkpoint機制,周期性地檢查并記錄其讀寫的位置,通常是寫入到本地的trail文件。這種機制是為了保證如果Extract進程終止或者操作系統(tǒng)宕機,重啟Extract進程后,GoldenGate能夠恢復(fù)到以前的狀態(tài),從上一個斷點處繼續(xù)往下運行,而不會有任何數(shù)據(jù)損失。
Pump進程運行在數(shù)據(jù)庫源端,其作用非常簡單。如果源端使用了本地trail文件,那么Pump進程就會把Trail文件以數(shù)據(jù)塊的形式通過TCP/IP協(xié)議發(fā)送到目標(biāo)端。Pump進程本質(zhì)是Extract進程的一種特殊形式,如果不使用Trail文件,那么Extract進程在抽取完數(shù)據(jù)后,直接投遞到目標(biāo)端。
與Pump進程相對應(yīng)的叫Server Collector進程,這個進程不需要引起我們關(guān)注,因為在實際操作過程中無需對其進行任何配置,它運行在目標(biāo)端,任務(wù)就是把Extract/Pump進程投遞過來的數(shù)據(jù)塊重新組裝成Trail文件。
Replicat進程運行在目標(biāo)端,是數(shù)據(jù)投遞的最后一站,負(fù)責(zé)讀取目標(biāo)端Trail文件中的內(nèi)容,并將解析其解析為DML或DDL語句,然后應(yīng)用到目標(biāo)數(shù)據(jù)庫中。
3 遷移方案
3.1 源數(shù)據(jù)庫的準(zhǔn)備
1、數(shù)據(jù)庫版本,Patch檢查
查源庫的數(shù)據(jù)庫版本號,以及該數(shù)據(jù)庫所實施的Patch,以保證遷移后的數(shù)據(jù)庫與源庫保持一致。
2、數(shù)據(jù)庫檢查
對源庫進行GoldenGate安裝前的檢查,檢查內(nèi)容包括:
1)、不支持的數(shù)據(jù)類型。2)、當(dāng)前運行的JOB。3)、當(dāng)前運行的觸發(fā)器。4)、回收站的功能是否關(guān)閉。5)、是否存在無主鍵,無唯一約束的表。6)、sequence檢查。
3、數(shù)據(jù)庫備份
檢查數(shù)據(jù)庫備份情況,確認(rèn)數(shù)據(jù)庫的備份是否有效,并根據(jù)數(shù)據(jù)庫備份的實際情況,制定數(shù)據(jù)庫遷移前的數(shù)據(jù)庫備份策略與方法。
3.2 目標(biāo)數(shù)據(jù)庫的準(zhǔn)備
新數(shù)據(jù)庫服務(wù)器配置為Oraclelog RAC數(shù)據(jù)庫,Oracle版本為10.2.0.4。數(shù)據(jù)庫的存儲邏輯卷管理將使用Oracle的ASM。
3.3 應(yīng)用層的準(zhǔn)備
由于數(shù)據(jù)庫進行了遷移,且相應(yīng)的主機名以及IP地址都可能發(fā)生改變,故應(yīng)用系統(tǒng)以及連接到數(shù)據(jù)庫的相關(guān)應(yīng)用系統(tǒng)都要做相應(yīng)數(shù)據(jù)連接的修改,使業(yè)務(wù)程序能夠隨時連接到新的RAC數(shù)據(jù)庫。
3.4 切換邏輯與流程設(shè)計
由于涉及到兩套數(shù)據(jù)庫的數(shù)據(jù)切換,因此,需要根據(jù)業(yè)務(wù)特點,仔細(xì)設(shè)計切換操作的流程和順序,提供可靠的回退機制。
3.5 創(chuàng)建Linux RAC數(shù)據(jù)庫
在兩臺服務(wù)器上安裝Oracle RAC數(shù)據(jù)庫,其版本以及相關(guān)Patch將與110報警服務(wù)窗口系統(tǒng)的數(shù)據(jù)庫保持一致。數(shù)據(jù)庫文件將放置在由OracleASM管理的存儲上。
1、Linux服務(wù)器的配置步驟如下:
(1)為兩臺服務(wù)器配置存儲空間
主機層需要準(zhǔn)備硬盤空間,以存放數(shù)據(jù)庫數(shù)據(jù)文件,存儲歸檔文件以及GoldenGate數(shù)據(jù)抓取文件。
(2)在服務(wù)器上安裝Linux操作系統(tǒng)。
(3)配置主機參數(shù)和網(wǎng)絡(luò)環(huán)境。
2、Oracle 10g RAC安裝步驟如下:
(1)兩臺服務(wù)器上安裝Oracle10g集群軟件;
(2)兩臺服務(wù)器上安裝Oracle數(shù)據(jù)庫軟件;
(3)為安裝的Oracle 10g集群軟件實施相關(guān)補?。?/p>
(4)在Oracle RAC數(shù)據(jù)庫上創(chuàng)建ASM;
(5)在Oracle RAC數(shù)據(jù)庫上創(chuàng)建RAC數(shù)據(jù)庫。
3、Oracle 10g RAC分區(qū)表的建立。
(1)在新安裝的數(shù)據(jù)庫按照源庫創(chuàng)建相應(yīng)的用戶;
(2)在新安裝的數(shù)據(jù)庫按照源庫創(chuàng)建相應(yīng)的表,并根據(jù)用戶的需求把110接處警指揮應(yīng)用系統(tǒng)的業(yè)務(wù)表進行分區(qū)優(yōu)化和索引重建。
3.6 GoldenGate軟件安裝和配置
在源數(shù)據(jù)庫服務(wù)器上(Linux RAC)和目標(biāo)數(shù)據(jù)庫服務(wù)器上(Linux RAC)分別安裝GoldenGate軟件。為了保證GoldenGate軟件在RAC數(shù)據(jù)庫上能夠切換,請將RAC數(shù)據(jù)庫上的Goldengate軟件安裝在共享存儲上。
1、數(shù)據(jù)庫準(zhǔn)備
(1)在兩個數(shù)據(jù)庫上創(chuàng)建數(shù)據(jù)庫用戶ggs;
(2)配置數(shù)據(jù)庫為SUPPLEMENTAL和FORCE LOGGING;
(3)清空數(shù)據(jù)庫回收站;
(4)關(guān)閉10g回收站功能;
(5)在兩套主機安裝GoldenGate軟件;
(6)設(shè)置LD LIBRARY PATH環(huán)境變量;
(7)配置checkpoint表;
(8)數(shù)據(jù)庫打開歸檔。
2、GoldenGate配置
(1)配置GLOBALS文件;
(2)配置MGR;
(3)配置extract進程;
(4)配置pump進程;
(5)配置replicat進程。
3.7 目標(biāo)數(shù)據(jù)庫初始化,進行源庫到目標(biāo)庫的同步
1、啟動源庫(Linux RAC)上的extract和pump進程;
2、獲取并記錄源庫(Linux RAC)當(dāng)前的SCN號;
3、數(shù)據(jù)導(dǎo)出:以FLASHBACK SCN為參數(shù),使用expdp導(dǎo)出源庫(linuxRAC)數(shù)據(jù);
4、數(shù)據(jù)導(dǎo)入:在目標(biāo)庫(linux RAC)上使用impdp導(dǎo)入數(shù)據(jù);
5、禁用目標(biāo)庫(lilnux RAC)trigger和job;
6、以aftercsn參數(shù),啟動目標(biāo)庫(linux RAC)的replicate進程;
7、觀察進程狀態(tài)以及數(shù)據(jù)復(fù)制情況。
3.8 業(yè)務(wù)系統(tǒng)在RAC數(shù)據(jù)庫上進行驗證和測試
1、確認(rèn)數(shù)據(jù)同步已經(jīng)完成(并正在繼續(xù));
2、在目標(biāo)數(shù)據(jù)庫上(Linux RAC)進行數(shù)據(jù)驗證和對比;
3、在目標(biāo)數(shù)據(jù)庫上(Linux RAC)進行業(yè)務(wù)測試。
3.9 業(yè)務(wù)系統(tǒng)正式遷移到RAC數(shù)據(jù)庫
經(jīng)驗證數(shù)據(jù)同步正常,將數(shù)據(jù)庫切換至新環(huán)境。
1、停止連接源庫(Linux RAC)上的應(yīng)用;
2、停止源庫(linux RAC)上的extract、pump進程;
3、確認(rèn)目標(biāo)庫上replicate進程達到EOF狀態(tài),停止目標(biāo)庫(linux RAC)上replicate進程;
4、目標(biāo)庫(linux RAC)上重建sequence;
5、禁用源庫(linux)上trigger和job;
6、啟動目標(biāo)庫(linuxRAC)上的extract、pump進程;
7、啟用目標(biāo)庫(linux RAC)上trigger和job;
8、啟動源庫(Linux RAC)上的replicat進程;
9、啟動連接目標(biāo)庫(linuxRAC)上的應(yīng)用,進行數(shù)據(jù)驗證。
4 回退方案
當(dāng)原數(shù)據(jù)庫遷移到新環(huán)境的數(shù)據(jù)庫后,
如果由此次遷移影響業(yè)務(wù)正常進行,且短時間內(nèi)未找到解決辦法。將數(shù)據(jù)庫由連接目標(biāo)庫(linux RAC)上的應(yīng)用切換回源庫(Linux RAC)。
數(shù)據(jù)庫層要做相應(yīng)配置,使其能夠滿足GoldenGate運行要求。
1、停止連接目標(biāo)庫(hnux RAC)上的應(yīng)用;
2、停止目標(biāo)庫(linux RAC)上的extract、pump進程;
3、停止源庫(Linux RAC)上的replicat進程;
4、源庫(Linux RAC)重建sequence;
5、禁用目標(biāo)庫(1imux RAC)上trigger和job;
6、啟動源庫(Linux RAC)的extract、pump進程;
7、啟用源庫(Linux RAC)的trigger和job;
8、啟動目標(biāo)庫(linux RAC)上的replicate進程;
9、啟動連接源庫(Linux RAC)的應(yīng)用,進行數(shù)據(jù)驗證。
5 結(jié)語
Oracel數(shù)據(jù)庫在業(yè)內(nèi)應(yīng)用非常廣泛,老舊服務(wù)器的硬件升級更新也是每名數(shù)據(jù)庫管理員面臨的實際問題。如何安全快捷方便地對大型數(shù)據(jù)庫進行遷移,是一個需要長期研究的課題。本文針對具體工程實踐,提出了一種切實可行的工作思路,并在實施中進行了驗證,取得了很好的效果,對數(shù)據(jù)遷移中涉及到的數(shù)據(jù)安全性、業(yè)務(wù)連續(xù)性、易用性、可回退性等都做了周密的考慮,具有一定的可移植性。