如何使用Ora2Pg遷移Oracle數據庫到openGauss
瀏覽量: 次 發布日期:2023-10-17 07:35:23
如何使用Ora2Pg遷移Oracle數據庫到openGauss
ra2Pg介紹
Ora2Pg是一個將Oracle遷移至PostgreSQL的開源工具,通過連接Oracle數據庫,自動掃描并提取其中的對象結構及數據,產生SQL腳本,通過手動或自動的方式將其應用到PostgreSQL。
官方網站:
https://ora2pg.darold.net/
浦東數據恢復Ora2Pg優秀特性支持導出數據庫絕大多數對象類型,包括表、視圖、序列、索引、外鍵、約束、函數、存儲過程等。提供PL/SQL到PL/PGSQL語法的自動轉換,一定程度避免了人工修正。可生成遷移報告,包括遷移難度評估、人天估算。可選對導出數據進行壓縮,節約磁盤開銷。配置選項豐富,可自定義遷移行為。
Ora2Pg在openGauss的應用
Ora2Pg主要語言是perl,使用Perl DBI模塊,通過DBD:Pg連接PostgreSQL目標數據庫,openGauss兼容PostgreSQL的通信協議以及絕大部分語法,因此只需作部分命名上的修改,Ora2Pg同樣可應用于openGauss。
Ora2Pg使用示例
對于對象結構,Ora2Pg將其DDL語句導出到SQL文件中,對于表數據,則既可以以INSERT或COPY命令導出到文件,也支持直接導入到目標數據庫,不需要產生中間SQL文件。
為了完成上述過程,Ora2Pg工具同時支持命令行和一鍵式腳本的方式完成遷移。命令行方式通過Ora2Pg二進制分布執行各條命令,來完成對應的步驟;一鍵式腳本通過創建遷移項目,分別得到導出導入腳本以及遷移目錄模板,腳本集成了若干Ora2Pg命令以及導入SQL文件所需的psql命令(openGauss為gsql),用戶只需要執行兩個腳本即可完成遷移。本次主要演示腳本的方式。
1. 依賴安裝
Ora2Pg語言為perl,故需安裝所需perl模塊。
安裝DBI、DBD:Pg、DBD:Oracle,Ora2Pg依賴這些軟件去連接數據庫。
安裝DBD:Oracle,需要先安裝Oracle Instant Client或者本地已安裝Oracle數據庫。
2. Ora2Pg安裝并創建遷移項目
源碼路徑:
https://github.com/darold/ora2pg
創建遷移項目后會在當前目錄下生成oramig目錄模板,如下所示。其中主要包含兩個腳本export_schema.sh和import_all.sh,后續導出和導入即使用這兩個腳本。schema和sources目錄存放各對象的DDL語句,區別在于schema存放PL/SQL語法轉化為PL/PGSQL后的語句, sources目錄存放轉化前PL/SQL的語句,data目錄存放表數據文件,config目錄包含配置文件ora2pg.conf,reports目錄存放遷移報告。
至此您已可以使用Ora2Pg命令,以下是使用該命令時允許指定的部分命令行參數,這些參數都可以在ora2pg.conf設置,指定配置文件時,命令行選項指定的值會覆蓋配置文件中的對應值。
3. 配置Ora2Pg
ora2pg.conf文件包含所有配置選項,通過配置項可以自定義遷移時的行為。這里簡單介紹幾個常用的配置項。
ORACLE_HOME:設置環境變量ORACLE_HOME,DBD:Oracle模塊使用該變量查找所需的Oracle庫。設置方式在依賴安裝中已涉及。
ORACLE_DSN:該參數以標準DBI DSN形式設置數據源名稱,例如:
或者
第二種方式需要在$
ORACLE_HOME/network/admin/tnsnames.ora 文件或者環境變量 TNS_ADMIN 指定目錄下的 tnsnames.ora 文件中定義 SID。
ORACLE_USER, ORACLE_PWD:這兩個參數用于定義Oracle數據庫連接的用戶名和密碼。請注意,如果可以的話,以Oracle超級管理員身份登錄,以避免在數據庫掃描時遇到權限問題,以及丟失內容。
PG_DSN:設置目標數據庫名稱,如下為openGauss示例,連接IP為localhost,端口為5432,名稱為mydb的數據庫。
PG_USER,PG_PWD:設置目標數據庫的用戶、密碼。請注意,這里使用的用戶需要有遠程連接openGauss的權限,以及對對應數據庫的讀寫權限,具體是運行Ora2Pg所在的機器和該用戶需要在openGauss的遠程訪問白名單里。
SCHEMA:此參數用于設置要導出的schema。如下,將提取APPS下的對象。
ORA_INITIAL_COMMAND:該參數可用于在連接之后向Oracle發送初始命令。例如,在讀取對象前關閉訪問限制策略,或設置一些會話參數。
TYPE:設置要導出的對象類型,包括表、視圖、序列、索引、外鍵、約束、函數、存儲過程等,默認為TABLE。如下,將導出普通表和視圖。
更多更詳細的配置項說明,可查看官網:
https://ora2pg.darold.net/documentation.html
連接測試:配置好Oracle數據庫的DSN之后,可執行以下命令測試數據庫的連接。
以上命令將顯示Oracle數據庫的版本。
4. 執行遷移腳本
本次演示的配置如下,以system用戶連接目標數據庫
修改export_schema.sh中導出類型,本次遷移導出表和函數。
執行導出腳本,等待遷移完成。結束后在schema和source的子目錄下生成對應類型的DDL文件,并在末尾給出導出表數據的命令。
同時reports目錄下也生成html格式的遷移報告。
執行導入腳本之前需要做如下準備:
1. 先在openGauss庫中創建數據庫,并在該數據庫下創建用戶,把mydb屬主設為該用戶。(import_all.sh中使用PostgreSQL特有的createuser和createdb創建用戶和數據庫)
2. 為了使用openGauss命令行工具gsql,需要將數據庫的bin和lib加在操作系統的環境變量PATH和LD_LIBRARY_PATH中。
3. 將import_all.sh里的psql修改為gsql。
4. 當使用普通用戶導入數據時,可增加一個執行該腳本的選項,指定用戶密碼,避免頻繁輸入密碼。
執行導入腳本,表示使用用戶testuser登錄名為mydb的數據庫,ip和端口分別是127.0.0.1和5432,-f選項表示跳過用戶和數據庫是否需要創建的檢查。
執行后會交互式提示是否導入各對象結構及數據,如下所示。(其中的-w是手動修改import_all.sh腳本,添加密碼選項)
對于表的索引和約束,可選擇延遲導入,即在導入數據之后。
登錄openGauss數據庫查看遷移結果。
Ora2Pg不足
Ora2Pg對PL/SQL和PL/PGSQL的語法轉換處理采用正則表達式和文本替換的方式,先天設計不足,很難覆蓋所有的語法,目前僅支持部分轉換。因此,Ora2Pg可以滿足SQL簡單的應用遷移,對于復雜的語法,并不能完全保證轉換的正確性,需要對生成的SQL語句進行核對,必要時需要人工修正。
更多內容請參考: