目前國(guó)產(chǎn)化浪潮的浪花兒是一浪高過(guò)一浪,感覺(jué)比后浪都猛。作為IT技術(shù)界的文藝青年,怎能錯(cuò)過(guò)這海天盛筵。今天給大家?guī)?lái)的是oracle遷移到postgresql遷移過(guò)程評(píng)估及對(duì)應(yīng)階段的方法和工具介紹,畢竟工欲善其事,必先利其器,下面開(kāi)始今天的分享。
遷移工作之前,需要全面評(píng)估需選定的應(yīng)用程序或數(shù)據(jù)庫(kù)。一般老司機(jī)都是選擇較低挑戰(zhàn)性,較低風(fēng)險(xiǎn)的業(yè)務(wù)庫(kù)進(jìn)行遷移,在遷移過(guò)程中不斷踩坑,填坑,積累使用PostgreSQL的經(jīng)驗(yàn),以此總結(jié)出適合自己的遷移路線和遷移方法。作為規(guī)劃遷移的第一步,需要估算從現(xiàn)有數(shù)據(jù)庫(kù)遷移到PostgreSQL的難易程度(哪些對(duì)象能從oracle百分百遷移到PostgreSQL,哪些只有一部分),這些都是有對(duì)應(yīng)工具可以預(yù)估支撐的,請(qǐng)接著往下看。
安裝Orcfce擴(kuò)展包
我們可以安裝一個(gè)擴(kuò)展Orafce,Orafce在PostgreSQL中實(shí)現(xiàn)了Oracle的某些功能。例如,如果習(xí)慣于在Oracle中的DATE函數(shù),則此擴(kuò)展名允許我們使用這些函數(shù)。有關(guān)Orafce的信息,可以訪問(wèn):https : //github.com/orafce/orafce。
以下是安裝了該擴(kuò)展后的一些示例:
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生成遷移評(píng)估報(bào)告
AWS Schema ConversionTool是亞馬遜推出的一款強(qiáng)大的遷移工具,它可以幫助我們實(shí)現(xiàn)數(shù)據(jù)的遷移,還有一些代碼和數(shù)據(jù)類型的轉(zhuǎn)換。同時(shí)它可生成遷移報(bào)告。
表自動(dòng)轉(zhuǎn)換達(dá)到85%以上。而約束和索引均能達(dá)到100%自動(dòng)轉(zhuǎn)換。
這里可以看到包和存儲(chǔ)過(guò)程。工具自動(dòng)轉(zhuǎn)換只能完成10%,剩下的需要手動(dòng)修改。
點(diǎn)擊save,會(huì)生成一個(gè)excel列表,該列表展示了一些無(wú)法自動(dòng)遷移的信息,例如包、觸發(fā)器,此類需要手工修改。
此類工作也可以使用Ora2PG來(lái)實(shí)現(xiàn)遷移工作量的評(píng)估。這類工具的作用都是對(duì)元數(shù)據(jù)進(jìn)行遷移和改造。
也可以保存成.sql腳本
執(zhí)行遷移完的效果如下所示:
元數(shù)據(jù)遷移完成之后,即可對(duì)數(shù)據(jù)進(jìn)行遷移工作了。元數(shù)據(jù)遷移需要注意不要導(dǎo)入索引和約束、觸發(fā)器。進(jìn)行數(shù)據(jù)遷移,包括全量遷移時(shí),可以使用AWSSchema Conversion Tool或者ora2PG工具。
對(duì)于大數(shù)據(jù)量的表,建議采用sqluldr2工具。sqluldr2在大數(shù)據(jù)量導(dǎo)出方面速度超快,能導(dǎo)出億級(jí)數(shù)據(jù)為excelcsv文件。使用sqluldr2可以輸出到多個(gè)文件中,指定行數(shù)分割或者按照文件大小分割。增加并發(fā)性。然后使用psql工具對(duì)CSV文件進(jìn)行導(dǎo)入。導(dǎo)入完成之后,再創(chuàng)建索引,約束、觸發(fā)器。
數(shù)據(jù)遷移完成之后需要對(duì)數(shù)據(jù)做對(duì)比驗(yàn)證,目前主流的方法是HASH算法,也可以使用MD5算法。以測(cè)試數(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個(gè)庫(kù)中表的MD5值,如果一致則數(shù)據(jù)一致。
整個(gè)數(shù)據(jù)遷移完成之后,就需要對(duì)存儲(chǔ)過(guò)程,觸發(fā)器、函數(shù)等代碼進(jìn)行改造,根據(jù)前面報(bào)告提示的點(diǎn)進(jìn)行修改。
特殊處理
AWS SchemaConversionTool或者ora2PG工具不能完全無(wú)損遷移,需要根據(jù)評(píng)估報(bào)告和遷移測(cè)試,對(duì)轉(zhuǎn)換不徹底的,進(jìn)行適當(dāng)?shù)氖止ば薷模瑥臏y(cè)試來(lái)看,重點(diǎn)還是在語(yǔ)法兼容性上,已知的一些問(wèn)題有:
存儲(chǔ)過(guò)程、函數(shù)目前的pg版本(12)不支持OUT參數(shù),需要用INOUT代替;
存儲(chǔ)過(guò)程中游標(biāo)定義的語(yǔ)法轉(zhuǎn)換有誤,需要人工修改
某些情況下SELECT會(huì)被錯(cuò)誤的轉(zhuǎn)換為PERFORM
分區(qū)表只支持rang、list,不支持Hash分區(qū)
Sequence的訪問(wèn)方式變化
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)為物化視圖快照,僅在完全刷新的時(shí)候更新
此時(shí)搭建好,可以提供給應(yīng)用測(cè)試環(huán)境進(jìn)行測(cè)試。在測(cè)試過(guò)程中遇到問(wèn)題,需要修改SQL代碼。當(dāng)然也可以從Oracle中創(chuàng)建SPA任務(wù),捕捉全量的SQL,找到下面相關(guān)語(yǔ)法的SQL,提交給開(kāi)發(fā)人員修改。
表連接 | Oracle | Postgresql |
(+) | √ | ╳ |
查詢 | Oracle | Postgresql |
unique | √ | ╳ |
connect by | √ | ╳ |
insert all into | √ | ╳ insert into values |
merge into | √ | ╳ upsert |
遷移之后有一些SQL語(yǔ)句性能會(huì)下降,我們需要捕捉到性能下降的SQL,查找引起性能下降的原因,并進(jìn)行針對(duì)性優(yōu)化,將性能問(wèn)題最大程度排除在上線前,以免上線后引起性能問(wèn)題,影響業(yè)務(wù)的正常使用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/130201.html
摘要:摘要第九屆中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì),阿里云數(shù)據(jù)庫(kù)產(chǎn)品專家蕭少聰帶來(lái)以阿里云如何打破遷移上云的壁壘為題的演講。于是,阿里云給出了上面的解決方案。 摘要: 2018第九屆中國(guó)數(shù)據(jù)庫(kù)技術(shù)大會(huì),阿里云數(shù)據(jù)庫(kù)產(chǎn)品專家蕭少聰帶來(lái)以阿里云如何打破Oracle遷移上云的壁壘為題的演講。Oracle是指數(shù)據(jù)庫(kù)管理系統(tǒng),面對(duì)Oracle遷移上云的壁壘,阿里云如何能夠打破它呢?本文提出了Oracle 到云數(shù)據(jù)庫(kù)P...
摘要:作者譚峰張文升出版日期年月頁(yè)數(shù)頁(yè)定價(jià)元本書特色中國(guó)開(kāi)源軟件推進(jìn)聯(lián)盟分會(huì)特聘專家撰寫,國(guó)內(nèi)多位開(kāi)源數(shù)據(jù)庫(kù)專家鼎力推薦。張文升中國(guó)開(kāi)源軟件推進(jìn)聯(lián)盟分會(huì)核心成員之一。 很高興《PostgreSQL實(shí)戰(zhàn)》一書終于出版,本書大體上系統(tǒng)總結(jié)了筆者 PostgreSQL DBA 職業(yè)生涯的經(jīng)驗(yàn)總結(jié),本書的另一位作者張文升擁有豐富的PostgreSQL運(yùn)維經(jīng)驗(yàn),目前就職于探探科技任首席PostgreS...
摘要:打開(kāi)多個(gè)窗口一個(gè)數(shù)據(jù)庫(kù)連接打開(kāi)多個(gè)窗口用于查看數(shù)據(jù)表及數(shù)據(jù)進(jìn)入工具首選項(xiàng)數(shù)據(jù)庫(kù)對(duì)象查看器勾選自動(dòng)凍結(jié)對(duì)象查看器窗口即可。顯示行號(hào)進(jìn)入工具首選項(xiàng)代碼編輯器行裝訂線勾選顯示行數(shù)即可。 Oracle SQL Developer 個(gè)人使用記錄 以下簡(jiǎn)稱 SQL Developer 對(duì)我Java開(kāi)發(fā)來(lái)說(shuō),這個(gè)工具已經(jīng)足夠使用了,雖然還有很多缺點(diǎn),但夠用就行,相對(duì)于我來(lái)說(shuō)的優(yōu)點(diǎn): 整體UI還算舒...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20