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