如何使用Ora2Pg遷移Oracle數(shù)據(jù)庫(kù)到openGauss
瀏覽量: 次 發(fā)布日期:2023-10-17 07:35:23
如何使用Ora2Pg遷移Oracle數(shù)據(jù)庫(kù)到openGauss
ra2Pg介紹
Ora2Pg是一個(gè)將Oracle遷移至PostgreSQL的開(kāi)源工具,通過(guò)連接Oracle數(shù)據(jù)庫(kù),自動(dòng)掃描并提取其中的對(duì)象結(jié)構(gòu)及數(shù)據(jù),產(chǎn)生SQL腳本,通過(guò)手動(dòng)或自動(dòng)的方式將其應(yīng)用到PostgreSQL。
官方網(wǎng)站:
https://ora2pg.darold.net/
浦東數(shù)據(jù)恢復(fù)Ora2Pg優(yōu)秀特性支持導(dǎo)出數(shù)據(jù)庫(kù)絕大多數(shù)對(duì)象類型,包括表、視圖、序列、索引、外鍵、約束、函數(shù)、存儲(chǔ)過(guò)程等。提供PL/SQL到PL/PGSQL語(yǔ)法的自動(dòng)轉(zhuǎn)換,一定程度避免了人工修正。可生成遷移報(bào)告,包括遷移難度評(píng)估、人天估算。可選對(duì)導(dǎo)出數(shù)據(jù)進(jìn)行壓縮,節(jié)約磁盤(pán)開(kāi)銷。配置選項(xiàng)豐富,可自定義遷移行為。
Ora2Pg在openGauss的應(yīng)用
Ora2Pg主要語(yǔ)言是perl,使用Perl DBI模塊,通過(guò)DBD:Pg連接PostgreSQL目標(biāo)數(shù)據(jù)庫(kù),openGauss兼容PostgreSQL的通信協(xié)議以及絕大部分語(yǔ)法,因此只需作部分命名上的修改,Ora2Pg同樣可應(yīng)用于openGauss。
Ora2Pg使用示例
對(duì)于對(duì)象結(jié)構(gòu),Ora2Pg將其DDL語(yǔ)句導(dǎo)出到SQL文件中,對(duì)于表數(shù)據(jù),則既可以以INSERT或COPY命令導(dǎo)出到文件,也支持直接導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù),不需要產(chǎn)生中間SQL文件。
為了完成上述過(guò)程,Ora2Pg工具同時(shí)支持命令行和一鍵式腳本的方式完成遷移。命令行方式通過(guò)Ora2Pg二進(jìn)制分布執(zhí)行各條命令,來(lái)完成對(duì)應(yīng)的步驟;一鍵式腳本通過(guò)創(chuàng)建遷移項(xiàng)目,分別得到導(dǎo)出導(dǎo)入腳本以及遷移目錄模板,腳本集成了若干Ora2Pg命令以及導(dǎo)入SQL文件所需的psql命令(openGauss為gsql),用戶只需要執(zhí)行兩個(gè)腳本即可完成遷移。本次主要演示腳本的方式。
1. 依賴安裝
Ora2Pg語(yǔ)言為perl,故需安裝所需perl模塊。
安裝DBI、DBD:Pg、DBD:Oracle,Ora2Pg依賴這些軟件去連接數(shù)據(jù)庫(kù)。
安裝DBD:Oracle,需要先安裝Oracle Instant Client或者本地已安裝Oracle數(shù)據(jù)庫(kù)。
2. Ora2Pg安裝并創(chuàng)建遷移項(xiàng)目
源碼路徑:
https://github.com/darold/ora2pg
創(chuàng)建遷移項(xiàng)目后會(huì)在當(dāng)前目錄下生成oramig目錄模板,如下所示。其中主要包含兩個(gè)腳本export_schema.sh和import_all.sh,后續(xù)導(dǎo)出和導(dǎo)入即使用這兩個(gè)腳本。schema和sources目錄存放各對(duì)象的DDL語(yǔ)句,區(qū)別在于schema存放PL/SQL語(yǔ)法轉(zhuǎn)化為PL/PGSQL后的語(yǔ)句, sources目錄存放轉(zhuǎn)化前PL/SQL的語(yǔ)句,data目錄存放表數(shù)據(jù)文件,config目錄包含配置文件ora2pg.conf,reports目錄存放遷移報(bào)告。
至此您已可以使用Ora2Pg命令,以下是使用該命令時(shí)允許指定的部分命令行參數(shù),這些參數(shù)都可以在ora2pg.conf設(shè)置,指定配置文件時(shí),命令行選項(xiàng)指定的值會(huì)覆蓋配置文件中的對(duì)應(yīng)值。
3. 配置Ora2Pg
ora2pg.conf文件包含所有配置選項(xiàng),通過(guò)配置項(xiàng)可以自定義遷移時(shí)的行為。這里簡(jiǎn)單介紹幾個(gè)常用的配置項(xiàng)。
ORACLE_HOME:設(shè)置環(huán)境變量ORACLE_HOME,DBD:Oracle模塊使用該變量查找所需的Oracle庫(kù)。設(shè)置方式在依賴安裝中已涉及。
ORACLE_DSN:該參數(shù)以標(biāo)準(zhǔn)DBI DSN形式設(shè)置數(shù)據(jù)源名稱,例如:
或者
第二種方式需要在$
ORACLE_HOME/network/admin/tnsnames.ora 文件或者環(huán)境變量 TNS_ADMIN 指定目錄下的 tnsnames.ora 文件中定義 SID。
ORACLE_USER, ORACLE_PWD:這兩個(gè)參數(shù)用于定義Oracle數(shù)據(jù)庫(kù)連接的用戶名和密碼。請(qǐng)注意,如果可以的話,以O(shè)racle超級(jí)管理員身份登錄,以避免在數(shù)據(jù)庫(kù)掃描時(shí)遇到權(quán)限問(wèn)題,以及丟失內(nèi)容。
PG_DSN:設(shè)置目標(biāo)數(shù)據(jù)庫(kù)名稱,如下為openGauss示例,連接IP為localhost,端口為5432,名稱為mydb的數(shù)據(jù)庫(kù)。
PG_USER,PG_PWD:設(shè)置目標(biāo)數(shù)據(jù)庫(kù)的用戶、密碼。請(qǐng)注意,這里使用的用戶需要有遠(yuǎn)程連接openGauss的權(quán)限,以及對(duì)對(duì)應(yīng)數(shù)據(jù)庫(kù)的讀寫(xiě)權(quán)限,具體是運(yùn)行Ora2Pg所在的機(jī)器和該用戶需要在openGauss的遠(yuǎn)程訪問(wèn)白名單里。
SCHEMA:此參數(shù)用于設(shè)置要導(dǎo)出的schema。如下,將提取APPS下的對(duì)象。
ORA_INITIAL_COMMAND:該參數(shù)可用于在連接之后向Oracle發(fā)送初始命令。例如,在讀取對(duì)象前關(guān)閉訪問(wèn)限制策略,或設(shè)置一些會(huì)話參數(shù)。
TYPE:設(shè)置要導(dǎo)出的對(duì)象類型,包括表、視圖、序列、索引、外鍵、約束、函數(shù)、存儲(chǔ)過(guò)程等,默認(rèn)為T(mén)ABLE。如下,將導(dǎo)出普通表和視圖。
更多更詳細(xì)的配置項(xiàng)說(shuō)明,可查看官網(wǎng):
https://ora2pg.darold.net/documentation.html
連接測(cè)試:配置好Oracle數(shù)據(jù)庫(kù)的DSN之后,可執(zhí)行以下命令測(cè)試數(shù)據(jù)庫(kù)的連接。
以上命令將顯示Oracle數(shù)據(jù)庫(kù)的版本。
4. 執(zhí)行遷移腳本
本次演示的配置如下,以system用戶連接目標(biāo)數(shù)據(jù)庫(kù)
修改export_schema.sh中導(dǎo)出類型,本次遷移導(dǎo)出表和函數(shù)。
執(zhí)行導(dǎo)出腳本,等待遷移完成。結(jié)束后在schema和source的子目錄下生成對(duì)應(yīng)類型的DDL文件,并在末尾給出導(dǎo)出表數(shù)據(jù)的命令。
同時(shí)reports目錄下也生成html格式的遷移報(bào)告。
執(zhí)行導(dǎo)入腳本之前需要做如下準(zhǔn)備:
1. 先在openGauss庫(kù)中創(chuàng)建數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)下創(chuàng)建用戶,把mydb屬主設(shè)為該用戶。(import_all.sh中使用PostgreSQL特有的createuser和createdb創(chuàng)建用戶和數(shù)據(jù)庫(kù))
2. 為了使用openGauss命令行工具gsql,需要將數(shù)據(jù)庫(kù)的bin和lib加在操作系統(tǒng)的環(huán)境變量PATH和LD_LIBRARY_PATH中。
3. 將import_all.sh里的psql修改為gsql。
4. 當(dāng)使用普通用戶導(dǎo)入數(shù)據(jù)時(shí),可增加一個(gè)執(zhí)行該腳本的選項(xiàng),指定用戶密碼,避免頻繁輸入密碼。
執(zhí)行導(dǎo)入腳本,表示使用用戶testuser登錄名為mydb的數(shù)據(jù)庫(kù),ip和端口分別是127.0.0.1和5432,-f選項(xiàng)表示跳過(guò)用戶和數(shù)據(jù)庫(kù)是否需要?jiǎng)?chuàng)建的檢查。
執(zhí)行后會(huì)交互式提示是否導(dǎo)入各對(duì)象結(jié)構(gòu)及數(shù)據(jù),如下所示。(其中的-w是手動(dòng)修改import_all.sh腳本,添加密碼選項(xiàng))
對(duì)于表的索引和約束,可選擇延遲導(dǎo)入,即在導(dǎo)入數(shù)據(jù)之后。
登錄openGauss數(shù)據(jù)庫(kù)查看遷移結(jié)果。
Ora2Pg不足
Ora2Pg對(duì)PL/SQL和PL/PGSQL的語(yǔ)法轉(zhuǎn)換處理采用正則表達(dá)式和文本替換的方式,先天設(shè)計(jì)不足,很難覆蓋所有的語(yǔ)法,目前僅支持部分轉(zhuǎn)換。因此,Ora2Pg可以滿足SQL簡(jiǎn)單的應(yīng)用遷移,對(duì)于復(fù)雜的語(yǔ)法,并不能完全保證轉(zhuǎn)換的正確性,需要對(duì)生成的SQL語(yǔ)句進(jìn)行核對(duì),必要時(shí)需要人工修正。
更多內(nèi)容請(qǐng)參考:
. 超融合怎么用,如何高效運(yùn)用超融合技術(shù)
. raid1壞了一個(gè)硬盤(pán)如何恢復(fù),raid1第一塊硬盤(pán)壞怎么辦
. 硬盤(pán)數(shù)據(jù)恢復(fù),當(dāng)數(shù)據(jù)丟失,如何找回寶貴信息?
. 移動(dòng)硬盤(pán)燈亮但不讀取無(wú)法識(shí)別怎么導(dǎo)出數(shù)據(jù),移動(dòng)硬盤(pán)燈亮但不讀取,如何成功導(dǎo)出數(shù)據(jù)?
. 如何查看oracle錯(cuò)誤日志,Oracle數(shù)據(jù)庫(kù)錯(cuò)誤日志查看指南
. 手機(jī)被重置怎么找回原來(lái)的數(shù)據(jù),手機(jī)被重置后如何找回原來(lái)的數(shù)據(jù)
. 數(shù)據(jù)庫(kù)當(dāng)前時(shí)間怎么表示,數(shù)據(jù)庫(kù)中如何表示當(dāng)前時(shí)間
. 打開(kāi)數(shù)據(jù)庫(kù),如何打開(kāi)數(shù)據(jù)庫(kù)
. 怎么恢復(fù)已刪微信好友,微信已刪好友如何恢復(fù)?全方位攻略助你找回失聯(lián)好友
. 硬盤(pán)數(shù)據(jù)恢復(fù)后文件夾亂了,硬盤(pán)數(shù)據(jù)恢復(fù)后文件夾亂序,如何快速整理?
. 恢復(fù)回收站已刪除東西,如何恢復(fù)回收站已刪除的東西?——全方位數(shù)據(jù)恢復(fù)指南
. 怎么恢復(fù)手機(jī)的原來(lái)的數(shù)據(jù),手機(jī)數(shù)據(jù)丟失?教你如何恢復(fù)原來(lái)的數(shù)據(jù)
. oracle如何恢復(fù)刪除的數(shù)據(jù),Oracle數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)的恢復(fù)方法詳解
. 如何計(jì)算機(jī)硬盤(pán)數(shù)據(jù)恢復(fù)
. 被勒索病毒加密了怎么辦,遭遇勒索病毒加密,如何應(yīng)對(duì)與恢復(fù)數(shù)據(jù)?