專案去O實踐

Anderson_Question發表於2021-08-03
現狀(自下而上)
1.Oracle資料庫,表,序列,儲存過程,檢視
2.ibatis框架,對映xml中的sql語句
3.應用中通過指定字串的形式獲取查詢結果
 
目標
1.置換資料庫為PG資料庫,遷移資料,表,序列,儲存過程,檢視
2.修改xml中的sql語句適配PG庫語法
3.應用層做出適配性的調整
方案
專案去O實踐
資料庫層
 
a.資料庫層,使用ORA2PG實現表,序列,儲存過程以及檢視的遷移,使用阿里的dataworks做資料遷移。
 
a.1 dataworks遷移資料時注意事項
a.1.1 遷移資料到目標庫的時候會出現“獲取表:public.XXX的欄位的元資訊時失敗. 請聯絡 DBA 核查該庫、表資訊. ”這種報錯,嘗試多次就可以了成功將資料入庫了。
a.1.2 遷移資料的時候需要將分割槽鍵設定為空,去O的原則是先做平移,然後逐步使用對應的特性。
 
a.2 ora2pg工具匯出表注意事項
a.2.1 核對表數量是否一致,在實際操作過程中發現凡是表名稱為*_TODAY的表都沒有被匯出,這裡需要注意,或採取遍歷的方式逐個核對匯出的表(匯出指令碼中create數量)和源資料庫中的表數量(通過查詢 USER_TABLES 表中使用者所有表數量)是否一致。
a.2.2 注意匯出的表結構中對於number的資料型別的轉換,工具預設會將其轉換為對應的bigint,float等等,需要將以下設定調整後就可以避免這類問題:
PG_NUMERIC_TYPE    0
PG_INTEGER_TYPE    0
DEFAULT_NUMERIC numeric
 
專案去O實踐
SQL語句層
 
b.xml調整需要注意的點主要是Oracle支援的語法但是PG不支援的語法需要做出調整。
b.1 不同資料型別通過string進行的比較運算PG是不支援的,需要針對語句進行調整。
b.2 dual表是Oracle特有的偽表,這個表是PG庫所沒有的,對應的sql中只需要去除dual表即可。
b.3 Oracle中涉及到的系統函式轉換為PG中對應函式,sysdate轉換為current_timestamp
b.4 序列呼叫方式調整,從序列名.nextval改為nextval(序列名)
 
專案去O實踐
應用層
c.應用層在獲取資料以及驅動等等位置需要做出對應更改。
c.1 驅動以及資料庫相關連線配置的調整
c.2 連線有效性驗證sql修改
c.3 應用中通過map獲取結果集中的列出現大小寫不統一的問題,修改對應的SQL設定對應的列別名
 
技術總結
1.專案立項之初就需要考慮專案各個層面的橫向遷移適配性,這個專案雖然使用的是ibatis相比使用hibernate的專案更靈活,但是相對應的橫向遷移能力也就受到了限制,在遷移的過程中很是痛苦。
2.SQL語句儘量不要使用某一資料庫提供的特殊語法,會導致語句遷移之後的可用性降低。
 
 
 
 
參考連結

相關文章