賈海軍

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