目前國產(chǎn)化浪潮的浪花兒是一浪高過一浪,感覺比后浪都猛。作為IT技術(shù)界的文藝青年,怎能錯過這海天盛筵。今天給大家?guī)淼氖莖racle遷移到postgresql遷移過程評估及對應(yīng)階段的方法和工具介紹,畢竟工欲善其事,必先利其器,下面開始今天的分享。
遷移工作之前,需要全面評估需選定的應(yīng)用程序或數(shù)據(jù)庫。一般老司機都是選擇較低挑戰(zhàn)性,較低風(fēng)險的業(yè)務(wù)庫進行遷移,在遷移過程中不斷踩坑,填坑,積累使用PostgreSQL的經(jīng)驗,以此總結(jié)出適合自己的遷移路線和遷移方法。作為規(guī)劃遷移的第一步,需要估算從現(xiàn)有數(shù)據(jù)庫遷移到PostgreSQL的難易程度(哪些對象能從oracle百分百遷移到PostgreSQL,哪些只有一部分),這些都是有對應(yīng)工具可以預(yù)估支撐的,請接著往下看。
安裝Orcfce擴展包
我們可以安裝一個擴展Orafce,Orafce在PostgreSQL中實現(xiàn)了Oracle的某些功能。例如,如果習(xí)慣于在Oracle中的DATE函數(shù),則此擴展名允許我們使用這些函數(shù)。有關(guān)Orafce的信息,可以訪問:https : //github.com/orafce/orafce。
以下是安裝了該擴展后的一些示例:
postgres-# dn
List of schemas
Name | Owner
--------------+----------
dbms_alert | postgres
dbms_assert | postgres
dbms_output | postgres
dbms_pipe | postgres
dbms_random | postgres
dbms_utility | postgres
oracle | postgres
plunit | postgres
plvchr | postgres
plvdate | postgres
plvlex | postgres
plvstr | postgres
plvsubst | postgres
public | postgres
utl_file | postgres
(15 rows)
postgres-# df dbms_random.*
List of functions
Schema | Name | Result data type | Argument data types | Type
-------------+------------+------------------+---------------------------------------------+------
dbms_random | initialize | void | integer | func
dbms_random | normal | double precision | | func
dbms_random | random | integer | | func
dbms_random | seed | void | integer | func
dbms_random | seed | void | text | func
dbms_random | string | text | opt text, len integer | func
dbms_random | terminate | void | | func
dbms_random | value | double precision | | func
dbms_random | value | double precision | low double precision, high double precision | func
(9 rows)
使用AWS Schema Conversion Tool生成遷移評估報告
AWS Schema ConversionTool是亞馬遜推出的一款強大的遷移工具,它可以幫助我們實現(xiàn)數(shù)據(jù)的遷移,還有一些代碼和數(shù)據(jù)類型的轉(zhuǎn)換。同時它可生成遷移報告。
表自動轉(zhuǎn)換達到85%以上。而約束和索引均能達到100%自動轉(zhuǎn)換。
這里可以看到包和存儲過程。工具自動轉(zhuǎn)換只能完成10%,剩下的需要手動修改。
點擊save,會生成一個excel列表,該列表展示了一些無法自動遷移的信息,例如包、觸發(fā)器,此類需要手工修改。
此類工作也可以使用Ora2PG來實現(xiàn)遷移工作量的評估。這類工具的作用都是對元數(shù)據(jù)進行遷移和改造。
也可以保存成.sql腳本
執(zhí)行遷移完的效果如下所示:
元數(shù)據(jù)遷移完成之后,即可對數(shù)據(jù)進行遷移工作了。元數(shù)據(jù)遷移需要注意不要導(dǎo)入索引和約束、觸發(fā)器。進行數(shù)據(jù)遷移,包括全量遷移時,可以使用AWSSchema Conversion Tool或者ora2PG工具。
對于大數(shù)據(jù)量的表,建議采用sqluldr2工具。sqluldr2在大數(shù)據(jù)量導(dǎo)出方面速度超快,能導(dǎo)出億級數(shù)據(jù)為excelcsv文件。使用sqluldr2可以輸出到多個文件中,指定行數(shù)分割或者按照文件大小分割。增加并發(fā)性。然后使用psql工具對CSV文件進行導(dǎo)入。導(dǎo)入完成之后,再創(chuàng)建索引,約束、觸發(fā)器。
數(shù)據(jù)遷移完成之后需要對數(shù)據(jù)做對比驗證,目前主流的方法是HASH算法,也可以使用MD5算法。以測試數(shù)據(jù)為例,分別在Oracle和PG中執(zhí)行以下命令:
Oracle
WITH foo AS (SELECT stragg(lower(standard_hash(id||name|| to_char(price,fm999999990.999999999), MD5)) order by lower(standard_hash(id||name||to_char(price,fm999999990.999999999), MD5)) asc) AS total_md5 from hello ) SELECT lower(standard_hash(total_md5, MD5)) AS md5 FROM foo; |
PostgreSQL
WITH foo AS (select string_agg(md5(id||name||to_char(price,fm999999990.999999999)) order by md5(id||name||to_char(price,fm999999990.999999999)) asc) AS total_md5 FROM hello) SELECT md5(total_md5) AS md5 FROM foo; |
以上得到2個庫中表的MD5值,如果一致則數(shù)據(jù)一致。
整個數(shù)據(jù)遷移完成之后,就需要對存儲過程,觸發(fā)器、函數(shù)等代碼進行改造,根據(jù)前面報告提示的點進行修改。
特殊處理
AWS SchemaConversionTool或者ora2PG工具不能完全無損遷移,需要根據(jù)評估報告和遷移測試,對轉(zhuǎn)換不徹底的,進行適當(dāng)?shù)氖止ば薷模瑥臏y試來看,重點還是在語法兼容性上,已知的一些問題有:
存儲過程、函數(shù)目前的pg版本(12)不支持OUT參數(shù),需要用INOUT代替;
存儲過程中游標(biāo)定義的語法轉(zhuǎn)換有誤,需要人工修改
某些情況下SELECT會被錯誤的轉(zhuǎn)換為PERFORM
分區(qū)表只支持rang、list,不支持Hash分區(qū)
Sequence的訪問方式變化
Sequencesare fully supported, but all call to sequence_name.NEXTVAL orsequence_name.CURRVAL will be transformed intoNEXTVAL(sequence_name) or CURRVAL(sequence_name).
Oracle同義詞轉(zhuǎn)為View
DBLINK轉(zhuǎn)為FDW
JOB不支持,在PG中需要改為外部CRONTAB
物化視圖轉(zhuǎn)為物化視圖快照,僅在完全刷新的時候更新
此時搭建好,可以提供給應(yīng)用測試環(huán)境進行測試。在測試過程中遇到問題,需要修改SQL代碼。當(dāng)然也可以從Oracle中創(chuàng)建SPA任務(wù),捕捉全量的SQL,找到下面相關(guān)語法的SQL,提交給開發(fā)人員修改。
表連接 | Oracle | Postgresql |
(+) | √ | ╳ |
查詢 | Oracle | Postgresql |
unique | √ | ╳ |
connect by | √ | ╳ |
insert all into | √ | ╳ insert into values |
merge into | √ | ╳ upsert |
遷移之后有一些SQL語句性能會下降,我們需要捕捉到性能下降的SQL,查找引起性能下降的原因,并進行針對性優(yōu)化,將性能問題最大程度排除在上線前,以免上線后引起性能問題,影響業(yè)務(wù)的正常使用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/130201.html
摘要:摘要第九屆中國數(shù)據(jù)庫技術(shù)大會,阿里云數(shù)據(jù)庫產(chǎn)品專家蕭少聰帶來以阿里云如何打破遷移上云的壁壘為題的演講。于是,阿里云給出了上面的解決方案。 摘要: 2018第九屆中國數(shù)據(jù)庫技術(shù)大會,阿里云數(shù)據(jù)庫產(chǎn)品專家蕭少聰帶來以阿里云如何打破Oracle遷移上云的壁壘為題的演講。Oracle是指數(shù)據(jù)庫管理系統(tǒng),面對Oracle遷移上云的壁壘,阿里云如何能夠打破它呢?本文提出了Oracle 到云數(shù)據(jù)庫P...
摘要:作者譚峰張文升出版日期年月頁數(shù)頁定價元本書特色中國開源軟件推進聯(lián)盟分會特聘專家撰寫,國內(nèi)多位開源數(shù)據(jù)庫專家鼎力推薦。張文升中國開源軟件推進聯(lián)盟分會核心成員之一。 很高興《PostgreSQL實戰(zhàn)》一書終于出版,本書大體上系統(tǒng)總結(jié)了筆者 PostgreSQL DBA 職業(yè)生涯的經(jīng)驗總結(jié),本書的另一位作者張文升擁有豐富的PostgreSQL運維經(jīng)驗,目前就職于探探科技任首席PostgreS...
摘要:打開多個窗口一個數(shù)據(jù)庫連接打開多個窗口用于查看數(shù)據(jù)表及數(shù)據(jù)進入工具首選項數(shù)據(jù)庫對象查看器勾選自動凍結(jié)對象查看器窗口即可。顯示行號進入工具首選項代碼編輯器行裝訂線勾選顯示行數(shù)即可。 Oracle SQL Developer 個人使用記錄 以下簡稱 SQL Developer 對我Java開發(fā)來說,這個工具已經(jīng)足夠使用了,雖然還有很多缺點,但夠用就行,相對于我來說的優(yōu)點: 整體UI還算舒...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20