天天看點

測試開發新技能:Oracle到高斯資料庫的無縫遷移

作者:Atstudy網校

Oracle适配遷移高斯資料庫簡介

在國産資料庫系統切換的大背景下,使用關系型的Oracle資料庫的系統可選擇替換為華為的高斯資料庫。高斯資料庫屬于分布式、多模型資料庫,基于PostgreSQL開源資料庫且遵循了SQL相關标準開發的資料庫,具備高性能、高可靠性、高擴充性。相比而言,兩者資料庫在資料存儲、核心結構、資料類型、系統函數功能等方面及部分SQL文法均存在一定的差異性。這些差異存在客觀造成資料庫對象建立、存儲過程編譯、SQL解析執行等環節一定差異,無法完全相容。

測試開發新技能:Oracle到高斯資料庫的無縫遷移

Oracle遷移高斯資料庫流程及工具

1.遷移工具

UGO:異構資料庫結構遷移。是資料對象遷移工具,該功能主要有,移前資料庫對象相容性評估、遷移過程中SQL文法轉換配置、以及資料庫對象遷移同步、遷移後資料庫對象驗證。該工具可将源資料庫的DDL、DML、DCL和業務程式中封裝的資料庫SQL一鍵自動轉換為GasussDB的SQL文法,提高轉化率、最大化降低資料庫遷移成本。該工具主要通過預遷移評估、結構遷移兩大核心功能,實作主流商用資料庫到GaussDB的自動化搬遷。

DRS:資料實時遷移服務。在UGO完成資料庫對象遷移後,可使用該工具實作存量、增量資料遷移。

2.遷移工具

使用Oracle的資料庫系統可采取三部分進行遷移:結構遷移、資料遷移、應用遷移。如下圖1所示。

測試開發新技能:Oracle到高斯資料庫的無縫遷移

結構遷移:使用UGO評估資料庫并擷取轉換後的異構資料庫表結構。

資料遷移:通過華為雲管理頁面使用資料複制服務DRS進行全量資料遷移并進行完整性校驗。

應用遷移:定位DAO層業務代碼,使用異構資料庫結構遷移平台UGO進行文法轉換,根據轉換結果調整文法。

Oracle遷移高斯庫雙向同步方案

Oracle庫遷移高斯庫大概有三種方式:一次性全量切換,確定gauss同步至oracle;oracle與gauss雙向同步;應用測雙寫改造。這裡簡介一下DRS雙向同步方案。

資料遷移方案在保證源庫與目标庫資料一緻、安全性的前提下,可以考慮采用“全量鋪底、增量同步、雙向同步、階段遷移”遷移政策,實作Oracle到高斯資料庫的穩步切換。遷移方案圖如下圖所示:

測試開發新技能:Oracle到高斯資料庫的無縫遷移

全量鋪底:在初次Oracle同步至高斯庫資料,可以基于全量線上遷移方式,将目前Oracle庫資料全量同步至高斯庫。線上遷移過程中,服務可能會産生短暫中斷或者不中斷,對使用方無感覺,可以滿足系統實時性要求;

增量同步:增量同步可使用源庫與目标庫在操作某一方的資料後保持同步;

雙向同步:增量同步即可支援Oracle到gauss,也可支援gauss到oracle的同步;

階段遷移:若系統級别高,表量上千,可以考慮上圖中分批次的遷移方式,以解耦後的每個微服務進行遷移。先遷移影響小的微服務,待穩定運作之後,再遷移其餘微服務。

資料一緻性校驗

資料全量同步後,需要進行資料一緻性校驗,該環節可以使用DRS提供的“一緻性比對”功能操作,一方面可以對源庫與目标庫選中的表的表層級字段做校驗,另一方面可以對源庫與目标庫的表内容進行對比。總之,全量遷移+增量同步、反向增量同步等操作均需要資料一緻性校驗。

Oracle遷移高斯資料庫經驗總結

Oracle資料庫涉及表、索引、序列、視圖、存儲過程、觸發器等結構遷移。遷移過程中由于個别結構不能相容GaussDB資料庫,需要在遷移前做進一步處理。此外,資料同步遇到的特殊問題進行了解決。

結構遷移問題處理

1.觸發器問題

Oracle資料庫下使用的觸發器不能相容GaussDB庫,是以遷移前需要進行改造,不能一次性完全遷移。

a.觸發器中long類型可修改為bigint、number或numeric;所有的表結構名和字段名均需大寫。

b.高斯庫下不支援updating函數,是以,Oracle觸發器用到updating函數的需要進行統一改造。

2.序列問題

a.序列通常用法是替代Oracle沒有自增主鍵而用。但Gauss的序列cache是session端的,是以會導緻sequence不連續。比如cache是100,連接配接池中A連接配接拿到1-100,連接配接池B拿到101-200,但連接配接池A的沒用完,連接配接池B用完了sequence。等連接配接池A再次使用sequence的時候,會先将沒用完的繼續使用,但是sequence已經是200了,結果反而出現了<100的sequence出現。建議sequence改為1。

b.oracle序列最大支援9999999999999999999;而高斯最大序列值為9223372036854775807

例如:

CREATE SEQUENCE[TABLE_NAME]MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT BY 1 START WITH 275974021 CACHE 1 NO CYCLE

3.存儲過程

Oracle下的存儲過程在高斯環境已完全不适用,需要将邏輯上卷到應用層面。

4.無主鍵表

結構遷移時,針對無主鍵表的遷移,建議增加主鍵之後再遷移。如果直接遷移,可能在資料同步層面存在一定的風險,需要進行一緻性驗證。

5.内置函數

Oracle有的内置函數在高斯庫不存在,通過DRS同步之後,會預設給高斯庫schema為“dsc_ora_ext”下建立一個同功能函數。

如:oracle下有内置函數sys_guid();同步之後會變為dsc_fn_sys_guid()。

資料同步問題處理

1.BigDecimal格式問題

問題描述:Oracle下表結構中的數值類型字段預設顯示目前精度,而Gauss庫下預設展示表結構數值類型字段的原始精度(涉及到精度自動以0補全)。

解決方法:系統級層面通過更改配置來校正

Set behavior_compat_options=“hide_tailing_zero”

2.Encoding‘UTF-8’無法轉換

問題描述:Oracle庫中有的表存在空串情況,Oracle中可以通過char(0)或位元組的方式寫入字元\u0000,但Gauss系列無法寫入字元\u0000,導緻oracle2Gauss出現異常。

解決方法:DRS運維端增加如下配置:

全量:sync.datamove.replicator.standardizeStringType=true

增量:sync.increment.replicator.standardizeStringType=true

3.Java heap space問題

問題描述:一次性全量同步的資料涉及到資料量大的情況,DRS同步過程中,報錯service DATAMOVE failed,cause by:javaheap space;

解決方法:運維管理端增加如下配置:

sync.tungstenEnv.OPS_FULL_INCRE_MAX=10240

sync.datamove.replicator.fetchSize=100

常用sql語句

測試開發新技能:Oracle到高斯資料庫的無縫遷移

文末了,我邀請你進入我們的軟體測試學習交流群,大家可以一起探讨交流軟體測試,共同學習軟體測試技術、面試等軟體測試方方面面,了解測試行業的最新趨勢,助你快速進階Python自動化測試/測試開發,穩住目前職位同時走向高薪之路。

最後:

1)關注+私信回複:“測試”,可以免費領取一份10G軟體測試工程師面試寶典文檔資料。以及相對應的視訊學習教程免費分享!

繼續閱讀