項目去O實踐


現狀(自下而上)
1.Oracle數據庫,表,序列,存儲過程,視圖
2.ibatis框架,映射xml中的sql語句
3.應用中通過指定字符串的形式獲取查詢結果
 
目標
1.置換數據庫為PG數據庫,遷移數據,表,序列,存儲過程,視圖
2.修改xml中的sql語句適配PG庫語法
3.應用層做出適配性的調整
方案
數據庫層
 
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
 
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(序列名)
 
應用層
c.應用層在獲取數據以及驅動等等位置需要做出對應更改。
c.1 驅動以及數據庫相關連接配置的調整
c.2 連接有效性驗證sql修改
c.3 應用中通過map獲取結果集中的列出現大小寫不統一的問題,修改對應的SQL設置對應的列別名
 
技術總結
1.項目立項之初就需要考慮項目各個層面的橫向遷移適配性,這個項目雖然使用的是ibatis相比使用hibernate的項目更靈活,但是相對應的橫向遷移能力也就受到了限制,在遷移的過程中很是痛苦。
2.SQL語句盡量不要使用某一數據庫提供的特殊語法,會導致語句遷移之后的可用性降低。
 
 
 
 
參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM