Oracle适配遷移高斯資料庫簡介
在國産資料庫系統切換的大背景下,使用關系型的Oracle資料庫的系統可選擇替換為華為的高斯資料庫。高斯資料庫屬于分布式、多模型資料庫,基于PostgreSQL開源資料庫且遵循了SQL相關标準開發的資料庫,具備高性能、高可靠性、高擴充性。相比而言,兩者資料庫在資料存儲、核心結構、資料類型、系統函數功能等方面及部分SQL文法均存在一定的差異性。這些差異存在客觀造成資料庫對象建立、存儲過程編譯、SQL解析執行等環節一定差異,無法完全相容。
Oracle遷移高斯資料庫流程及工具
1.遷移工具
UGO:異構資料庫結構遷移。是資料對象遷移工具,該功能主要有,移前資料庫對象相容性評估、遷移過程中SQL文法轉換配置、以及資料庫對象遷移同步、遷移後資料庫對象驗證。該工具可将源資料庫的DDL、DML、DCL和業務程式中封裝的資料庫SQL一鍵自動轉換為GasussDB的SQL文法,提高轉化率、最大化降低資料庫遷移成本。該工具主要通過預遷移評估、結構遷移兩大核心功能,實作主流商用資料庫到GaussDB的自動化搬遷。
DRS:資料實時遷移服務。在UGO完成資料庫對象遷移後,可使用該工具實作存量、增量資料遷移。
2.遷移工具
使用Oracle的資料庫系統可采取三部分進行遷移:結構遷移、資料遷移、應用遷移。如下圖1所示。
結構遷移:使用UGO評估資料庫并擷取轉換後的異構資料庫表結構。
資料遷移:通過華為雲管理頁面使用資料複制服務DRS進行全量資料遷移并進行完整性校驗。
應用遷移:定位DAO層業務代碼,使用異構資料庫結構遷移平台UGO進行文法轉換,根據轉換結果調整文法。
Oracle遷移高斯庫雙向同步方案
Oracle庫遷移高斯庫大概有三種方式:一次性全量切換,確定gauss同步至oracle;oracle與gauss雙向同步;應用測雙寫改造。這裡簡介一下DRS雙向同步方案。
資料遷移方案在保證源庫與目标庫資料一緻、安全性的前提下,可以考慮采用“全量鋪底、增量同步、雙向同步、階段遷移”遷移政策,實作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語句
文末了,我邀請你進入我們的軟體測試學習交流群,大家可以一起探讨交流軟體測試,共同學習軟體測試技術、面試等軟體測試方方面面,了解測試行業的最新趨勢,助你快速進階Python自動化測試/測試開發,穩住目前職位同時走向高薪之路。
最後:
1)關注+私信回複:“測試”,可以免費領取一份10G軟體測試工程師面試寶典文檔資料。以及相對應的視訊學習教程免費分享!