ora2pg使用記錄
前言
這篇文章是我在學(xué)習(xí)使用ora2pg
過(guò)程中的學(xué)習(xí)記錄
,以便日后遺忘查閱;
諸君也可跟隨我的步伐了解一下ora2pg
,或可移步如下官方文檔參考學(xué)習(xí):Ora2Pg : Migrates Oracle to PostgreSQL (darold.net)
本文的ora2pg
安裝和使用記錄是在win10
系統(tǒng)下遷移遠(yuǎn)程O(píng)racle數(shù)據(jù)庫(kù)到遠(yuǎn)程PostgreSQL數(shù)據(jù)庫(kù)的應(yīng)用環(huán)境下進(jìn)行的,如果你的應(yīng)用場(chǎng)景不同,可簡(jiǎn)閱做思路參考!
目錄
-
ora2pg使用記錄
- 前言
- 目錄
-
初識(shí)ora2pg
-
一、ora2pg是什么?
- (一)、Ora2Pg能做的遷移動(dòng)作如下
- (二)、功能包括
-
二、ora2pg下載安裝及環(huán)境配置
- (一)、Perl下載安裝
-
(二)、Oracle客戶端或完整的Oracle安裝配置
- 1.1 安裝
- 1.2 配置
-
(三)、Ora2Pg安裝配置
- 1.1 安裝
-
1.2 配置(win10下配置)
- 1.2.1 配置前說(shuō)明
- 1.2.2 Oracle遷移到PostgreSQL環(huán)境配置
-
三、ora2pg參數(shù)說(shuō)明
- (一)、常用命令
- (二)、參數(shù)幫助說(shuō)明(直譯)
-
四、ora2pg配置項(xiàng)說(shuō)明
- (一)、常用配置項(xiàng)
- (二)、配置項(xiàng)幫助文檔
-
一、ora2pg是什么?
-
需求實(shí)驗(yàn)
-
實(shí)驗(yàn)一:批量導(dǎo)出Oracle中特定表到PostgreSQL的一個(gè)特定schema下
- (1)需求詳細(xì)說(shuō)明
- (2)實(shí)驗(yàn)過(guò)程
- (3)問(wèn)題總結(jié)
-
實(shí)驗(yàn)一:批量導(dǎo)出Oracle中特定表到PostgreSQL的一個(gè)特定schema下
初識(shí)ora2pg
一、ora2pg是什么?
Ora2Pg
- Oracle to PostgreSQL database schema converter(Oracle到PostgreSQL數(shù)據(jù)庫(kù)模式轉(zhuǎn)換器)
Ora2Pg
是一個(gè)開(kāi)源免費(fèi)的數(shù)據(jù)庫(kù)遷移工具,用于將Oracle
數(shù)據(jù)庫(kù)遷移到PostgreSQL
兼容的模式。它連接您的Oracle數(shù)據(jù)庫(kù),自動(dòng)掃描并提取其結(jié)構(gòu)或數(shù)據(jù),然后生成可以加載到PostgreSQL數(shù)據(jù)庫(kù)中的SQL腳本。Ora2Pg非常易于使用,除了提供連接到Oracle數(shù)據(jù)庫(kù)所需的參數(shù)外,不需要任何Oracle數(shù)據(jù)庫(kù)知識(shí)。
(一)、Ora2Pg能做的遷移動(dòng)作如下
TABLE with constraints, VIEW, MVIEW, TABLESPACE, SEQUENCE, INDEXES, TRIGGER, GRANT, FUNCTION, PROCEDURE, PACKAGE, PARTITION, TYPE, INSERT or COPY, FDW, QUERY, KETTLE, SYNONYM
(二)、功能包括
- Export full database schema (tables, views, sequences, indexes), with unique, primary, foreign key and check constraints.
【導(dǎo)出完整的數(shù)據(jù)庫(kù)架構(gòu)(表、視圖、序列、索引),具有唯一、主鍵、外鍵和檢查約束?!?- Export grants/privileges for users and groups.
【導(dǎo)出用戶和組的授予/權(quán)限?!?- Export range/list partitions and sub partitions.
【導(dǎo)出范圍/列表分區(qū)和子分區(qū)?!?- Export a table selection (by specifying the table names).
【導(dǎo)出選擇的表格(通過(guò)指定表格名稱)。】
- Export Oracle schema to a PostgreSQL 8.4+ schema.
【將Oracle模式導(dǎo)出為PostgreSQL 8.4+模式。】
- Export predefined functions, triggers, procedures, packages and package bodies.
【導(dǎo)出預(yù)定義的函數(shù)、觸發(fā)器、過(guò)程、包和包體。】
- Export full data or following a WHERE clause.
【導(dǎo)出完整數(shù)據(jù)或遵循WHERE子句。】
- Full support of Oracle BLOB object as PG BYTEA.
【完全支持Oracle BLOB對(duì)象作為PG BYTEA。】
- Export Oracle views as PG tables.
【將Oracle視圖導(dǎo)出為PG表?!?- Export Oracle user defined types.
【導(dǎo)出Oracle用戶定義的類型?!?- Provide some basic automatic conversion of PLSQL code to PLPGSQL.
【將Oracle表導(dǎo)出為外部數(shù)據(jù)包裝表?!?- Works on any platform.
【適用于任何平臺(tái)。】
- Export Oracle tables as foreign data wrapper tables.
【將Oracle表導(dǎo)出為外部數(shù)據(jù)包裝表。】
- Export materialized view.
【導(dǎo)出具體化視圖?!?- Show a report of an Oracle database content.
【顯示Oracle數(shù)據(jù)庫(kù)內(nèi)容的報(bào)告?!?- Migration cost assessment of an Oracle database.
【Oracle數(shù)據(jù)庫(kù)的遷移成本評(píng)估?!?- Migration difficulty level assessment of an Oracle database.
【Oracle數(shù)據(jù)庫(kù)的遷移難度級(jí)別評(píng)估?!?- Migration cost assessment of PL/SQL code from a file.
【從文件遷移PL/SQL代碼的成本評(píng)估?!?- Migration cost assessment of Oracle SQL queries stored in a file.
【存儲(chǔ)在文件中的Oracle SQL查詢的遷移成本評(píng)估?!?- Generate XML ktr files to be used with Penthalo Data Integrator (Kettle)
【生成要與Penthalo Data Integrator(Kettle)一起使用的XML ktr文件】
- Export Oracle locator and spatial geometries into PostGis.
【將Oracle定位器和空間幾何圖形導(dǎo)出到PostGis中?!?- Export DBLINK as Oracle FDW.
【將DBLINK導(dǎo)出為Oracle FDW?!?- Export SYNONYMS as views.
【將SYNONYMS導(dǎo)出為視圖?!?- Export DIRECTORY as external table or directory for external_file extension.
【將DIRECTORY導(dǎo)出為external_file擴(kuò)展名的外部表或目錄?!?- Dispatch a list of SQL orders over multiple PostgreSQL connections
【通過(guò)多個(gè)PostgreSQL連接調(diào)度SQL訂單列表】
- Perform a diff between Oracle and PostgreSQL database for test purpose.
【通過(guò)多個(gè)PostgreSQL連接調(diào)度SQL訂單列表】
- MySQL/MariaDB and Microsoft SQL Server migration.
【MySQL/MariaDB和Microsoft SQL Server遷移?!?
需要注意的是:Ora2Pg盡最大努力將您的Oracle數(shù)據(jù)庫(kù)自動(dòng)轉(zhuǎn)換為PostgreSQL,但仍有手動(dòng)工作要做。為函數(shù)、procedures、包和觸發(fā)器生成的Oracle特定PL/SQL代碼必須經(jīng)過(guò)審查,以匹配PostgreSQL語(yǔ)法。
二、ora2pg下載安裝及環(huán)境配置
(一)、Perl下載安裝
首先因?yàn)镺ra2Pg是Perl語(yǔ)言編寫(xiě)的,所以要使用這個(gè)工具,則必須為其搭建Perl運(yùn)行環(huán)境。注意:安裝版本要大于等于5.10
Perl下載地址:Strawberry Perl for Windows
下載好如下:
傻瓜式安裝即可,沒(méi)有特殊操作。
(二)、Oracle客戶端或完整的Oracle安裝配置
1.1 安裝
必須在系統(tǒng)上安裝Oracle Instant Client或完整的Oracle安裝程序。
進(jìn)行數(shù)據(jù)庫(kù)遷移工作這些應(yīng)該都已經(jīng)安裝了,這里不做贅述。
如果確實(shí)沒(méi)有安裝,這里推薦幾篇相關(guān)博文供參考:
- Oracle客戶端安裝教程(圖文)
- Oracle Client(客戶端) 安裝與配置
- oracle數(shù)據(jù)庫(kù)安裝(全步驟詳解)
- Oracle下載安裝教程—Oracle19c下載安裝(每一步)
注意:這里由于我的數(shù)據(jù)庫(kù)服務(wù)器都不在本機(jī),這里我使用的是Oracle客戶端進(jìn)行的接下來(lái)的操作。
如果你的Oracle數(shù)據(jù)庫(kù)在本機(jī),這里也推薦一篇文章以作參考!
[Windows下Ora2Pg(Oracle到PostgreSQL遷移工具)的安裝配置及使用教程](https://blog.csdn.net/qq_34272470/article/details/128128287#:~:text=使用Ora2Pg 1 1.cmd定位到解壓后的Ora2Pg目錄中,執(zhí)行下面的命令使用Perl解析Ora2Pg perl Makefile.PL 2 2.上面的命令執(zhí)行完成后,會(huì)有提示,按照提示執(zhí)行下面的命令即可 dmake,get DBD%3A%3AOracle 8 8.安裝DBD%3A%3AOracle驅(qū)動(dòng) install DBD%3A%3AOracle ... 更多項(xiàng)目)
1.2 配置
在使用ora2pg時(shí),我們需要配置Oracle客戶端(或Oracle)的ORACLE_HOME環(huán)境變量,值為客戶端安裝目錄。(這是必須的)
官方文檔:You need to have the Oracle client libraries installed and the ORACLE_HOME environment variable must be defined.
(三)、Ora2Pg安裝配置
Ora2Pg下載地址
- SOURCEFORGE:ora2pg download | SourceForge.net
- GitHub:Releases · darold/ora2pg (github.com)
下載好如下:
1.1 安裝
解壓到任意目錄即可!
1.2 配置(win10下配置)
1.2.1 配置前說(shuō)明
-
Ora2Pg
連接數(shù)據(jù)庫(kù)并進(jìn)行遷移動(dòng)作,DBI
Perl模塊是必須安裝的,并且其版本要大于1.614。 -
Ora2Pg
不僅能夠遷移Oracle數(shù)據(jù)庫(kù),還可以遷移MySQL、SQL Server等,只需要安裝對(duì)應(yīng)的Perl模塊即可。例如:遷移Oracle -
install DBD::Oracle
遷移MySQL -
install DBD::MySQL
遷移SQL Server -
install DBD::ODBC
有些
ora2pg
發(fā)行版可能還需要安裝Time::HiRes
Perl模塊 -
Ora2Pg
可以導(dǎo)出sql腳本供pg數(shù)據(jù)庫(kù)導(dǎo)入執(zhí)行,也可以直接導(dǎo)入到遠(yuǎn)程pg數(shù)據(jù)庫(kù)。要導(dǎo)入sql腳本你還需要安裝PostgreSQL客戶端(psql)
如果你想動(dòng)態(tài)直接導(dǎo)入到PostgreSQL,你至少還需要安裝
DBD::Pg
和Compress::Zlib
Perl模塊默認(rèn)情況下,
Ora2Pg
生成sql腳本供PostgreSQL客戶端導(dǎo)入執(zhí)行
1.2.2 Oracle遷移到PostgreSQL環(huán)境配置
-
通過(guò)cmd進(jìn)入到
Ora2Pg
安裝目錄,查看Perl版本(Perl版本要大于5.10
) -
將把
Ora2Pg.pm
安裝到Perl庫(kù)perl Makefile.PL gmake && gmake install
-
安裝
DBI
Perl模塊cpan get DBI install DBI
-
安裝
DBD::Oracle
Perl模塊官方文檔:Installing DBD::Oracle require that the three Oracle packages: instant-client, SDK and SQLplus are installed as well as the libaio1 library.
可以看到,安裝
DBD::Oracle
還需要Oracle SDK和SQLplus,如果你和我一樣安裝的是精簡(jiǎn)版Oracle客戶端,那么你還需要去官網(wǎng)下載安裝Oracle SDK和SQLplus。下載地址:Instant Client for Microsoft Windows (x64) 64-bit (oracle.com)
直接點(diǎn)擊這里下載的是最新版本的精簡(jiǎn)版客戶端、SQL*Plus、SDK
下載好如下三個(gè)壓縮包:
SQL*Plus、SDK的安裝是建立在精簡(jiǎn)版客戶端的基礎(chǔ)上的,你需要先安裝好精簡(jiǎn)版客戶端。
精簡(jiǎn)版客戶端安裝:精簡(jiǎn)版客戶端客戶端的安裝很簡(jiǎn)單,解壓到任意目錄即可!配置ORACLE_HOME環(huán)境變量。注意!注意!注意!安裝路徑上一定不要有空格或中文字符!否則在安裝
DBD::Oracle
的時(shí)候,會(huì)報(bào)錯(cuò)!SQL*Plus和SDK安裝:直接將壓縮包文件解壓精簡(jiǎn)版客戶端安裝目錄即可!
安裝好之后,還需要配置LD_LIBRARY_PATH環(huán)境變量(注意,精簡(jiǎn)版客戶端不安裝SDK是沒(méi)有sdk\lib的,安裝
DBD::Oracle
時(shí)會(huì)加載lib)官方文檔:If you are using Instant Client from ZIP archives, the LD_LIBRARY_PATH and ORACLE_HOME will be the same and must be set to the directory where you have installed the files. For example: /opt/oracle/instantclient_12_2/
做好這一切開(kāi)始安裝
DBD::Oracle
cpan get DBD::Oracle install DBD::Oracle
安裝完成之后再執(zhí)行一下:
install DBD::Oracle
,確定是否安裝成功,如下表示安裝成功!
三、ora2pg參數(shù)說(shuō)明
ora2pg可以使用命令行的方式進(jìn)行數(shù)據(jù)遷移,但是這種方式我暫未實(shí)驗(yàn),了解一些常用命令即可!
(一)、常用命令
ora2pg -c | --conf file : 設(shè)置非默認(rèn)的配置文件,默認(rèn)配置文件為 /etc/ora2pg/ora2pg.conf。(指定自定義配置文件路徑)
ora2pg -d | --debug : 使用調(diào)試模式,輸出更多詳細(xì)信息。
(二)、參數(shù)幫助說(shuō)明(直譯)
# ora2pg --help
Usage: ora2pg [-dhpqv --estimate_cost --dump_as_html] [--option value]
-a | --allow str : 指定允許導(dǎo)出的對(duì)象列表,使用逗號(hào)分隔。也可以與 SHOW_COLUMN 選項(xiàng)一起使用。
-b | --basedir dir: 設(shè)置默認(rèn)的導(dǎo)出目錄,用于存儲(chǔ)導(dǎo)出結(jié)果。
-c | --conf file : 設(shè)置非默認(rèn)的配置文件,默認(rèn)配置文件為 /etc/ora2pg/ora2pg.conf。
-d | --debug : 使用調(diào)試模式,輸出更多詳細(xì)信息。
-D | --data_type STR : 通過(guò)命令行設(shè)置數(shù)據(jù)類型轉(zhuǎn)換。
-e | --exclude str: 指定導(dǎo)出時(shí)排除的對(duì)象列表,使用逗號(hào)分隔。也可以與 SHOW_COLUMN 選項(xiàng)一起使用。
-h | --help : 顯示幫助信息。
-g | --grant_object type : 導(dǎo)出指定類型的對(duì)象上的授權(quán)信息,取值參見(jiàn) GRANT_OBJECT 配置項(xiàng)。
-i | --input file : 指定要導(dǎo)入的 Oracle PL/SQL 代碼文件,導(dǎo)入文件時(shí)不需要連接到 Oracle 數(shù)據(jù)庫(kù)。
-j | --jobs num : 設(shè)置用于發(fā)送數(shù)據(jù)到 PostgreSQL 的并發(fā)進(jìn)程數(shù)量。
-J | --copies num : 設(shè)置用于從 Oracle 導(dǎo)出數(shù)據(jù)的并發(fā)連接數(shù)量。
-l | --log file : 設(shè)置日志文件,默認(rèn)為 stdout。
-L | --limit num : 導(dǎo)出數(shù)據(jù)時(shí),每次寫(xiě)入磁盤(pán)之前在內(nèi)存中緩沖的記錄數(shù)量,默認(rèn)值為 10000。
-m | --mysql : 導(dǎo)出 MySQL 數(shù)據(jù)庫(kù)。
-n | --namespace schema : 設(shè)置需要導(dǎo)出的 Oracle 模式。
-N | --pg_schema schema : 設(shè)置 PostgreSQL 中的搜索路徑 search_path。
-o | --out file : 設(shè)置導(dǎo)出的 SQL 文件的存儲(chǔ)路徑。默認(rèn)值為當(dāng)前目錄下的 output.sql 文件。
-p | --plsql : 啟用 PLSQL 代碼到 PLPGSQL 代碼的轉(zhuǎn)換。
-P | --parallel num: 同時(shí)導(dǎo)出多個(gè)表,設(shè)置并發(fā)數(shù)量。
-q | --quiet : 不顯示進(jìn)度條。
-s | --source DSN : 設(shè)置 Oracle DBI 數(shù)據(jù)源。
-t | --type export: 設(shè)置導(dǎo)出類型。該參數(shù)將會(huì)覆蓋配置文件中的導(dǎo)出類型(TYPE)。
-T | --temp_dir DIR: 為多個(gè)同時(shí)運(yùn)行的 ora2pg 腳本指定不同的臨時(shí)存儲(chǔ)目錄。
-u | --user name : 設(shè)置連接 Oracle 數(shù)據(jù)庫(kù)連接的用戶名。也可以使用 ORA2PG_USER 環(huán)境變量。
-v | --version : 顯示 Ora2Pg 版本信息并退出。
-w | --password pwd : 設(shè)置連接 Oracle 數(shù)據(jù)庫(kù)的用戶密碼。也可以使用 ORA2PG_PASSWD 環(huán)境變量。
--forceowner : 導(dǎo)入數(shù)據(jù)時(shí),強(qiáng)制 ora2pg 將導(dǎo)入 PostgreSQL 的表和序列的擁有者設(shè)置為連接 Oracle 數(shù)據(jù)庫(kù)時(shí)的用戶。如果設(shè)置為指定的用戶名,所有導(dǎo)入的對(duì)象屬于該用戶。默認(rèn)情況下,對(duì)象的擁有者為連接 Pg 數(shù)據(jù)庫(kù)的用戶。
--nls_lang code: 設(shè)置 Oracle 客戶端的 NLS_LANG 編碼。
--client_encoding code: 設(shè)置 PostgreSQL 客戶端編碼。
--view_as_table str: 將視圖導(dǎo)出為表,多個(gè)視圖使用逗號(hào)分隔。
--estimate_cost : 在 SHOW_REPORT 結(jié)果中輸出遷移成本評(píng)估信息。
--cost_unit_value minutes: 成本評(píng)估單位,使用分鐘數(shù)表示。默認(rèn)值為 5 分鐘,表示一個(gè) PostgreSQL 專家遷移所需的時(shí)間。如果是第一次遷移,可以設(shè)置為 10 分鐘。
--dump_as_html : 生成 HTML 格式的遷移報(bào)告,只能與 SHOW_REPORT 選項(xiàng)一起使用。默認(rèn)的報(bào)告是一個(gè)簡(jiǎn)單的文本文件。
--dump_as_csv : 與上個(gè)參數(shù)相同,但是生成 CSV 格式的報(bào)告。
--dump_as_sheet : 生成遷移評(píng)估時(shí),為每個(gè)數(shù)據(jù)庫(kù)生成一行 CSV 記錄。
--init_project NAME: 創(chuàng)建一個(gè)ora2pg 項(xiàng)目目錄結(jié)構(gòu)。項(xiàng)目的頂級(jí)目錄位于根目錄之下。
--project_base DIR : 定義ora2pg 項(xiàng)目的根目錄,默認(rèn)為當(dāng)前目錄。
--print_header : 與 --dump_as_sheet 一起使用,輸出 CSV 標(biāo)題信息。
--human_days_limit num : 設(shè)置遷移評(píng)估級(jí)別從 B 升到 C 所需的人工日數(shù)量。默認(rèn)值為 5 人工日。
--audit_user LIST : 設(shè)置查詢 DBA_AUDIT_TRAIL 表時(shí)需要過(guò)濾的用戶名,多個(gè)用戶使用逗號(hào)分隔。該參數(shù)只能用于 SHOW_REPORT 和 QUERY 導(dǎo)出類型。
--pg_dsn DSN : 設(shè)置在線導(dǎo)入時(shí)的 PostgreSQL 數(shù)據(jù)源。
--pg_user name : 設(shè)置連接 PostgreSQL 的用戶名。
--pg_pwd password : 設(shè)置連接 PostgreSQL 的用戶密碼。
--count_rows : 在 TEST 方式下執(zhí)行真實(shí)的數(shù)據(jù)行數(shù)統(tǒng)計(jì)。
--no_header : 在導(dǎo)出文件中不添加 Ora2Pg 頭部信息。
--oracle_speed : 用于測(cè)試 Oracle 發(fā)送數(shù)據(jù)的速度。不會(huì)真的處理或者寫(xiě)入數(shù)據(jù)。
--ora2pg_speed : 用于測(cè)試 Ora2Pg 發(fā)送轉(zhuǎn)換后的數(shù)據(jù)的速度。不會(huì)寫(xiě)入任何數(shù)據(jù)。
四、ora2pg配置項(xiàng)說(shuō)明
ora2pg不僅可以使用命令行的方式進(jìn)行數(shù)據(jù)遷移,還可以通過(guò)自定義配置文件進(jìn)行數(shù)據(jù)遷移配置。
ora2pg安裝目錄下有一個(gè)默認(rèn)配置文件ora2pg.conf.dist
,你可以通過(guò)學(xué)習(xí)配置項(xiàng),來(lái)修改此配置文件的默認(rèn)值,來(lái)達(dá)到你想要的業(yè)務(wù)需求。
該文件是可自定義進(jìn)行配置項(xiàng)覆蓋的,也就是說(shuō)你可以在任意位置創(chuàng)建一個(gè)自定義配置文件,來(lái)增加自己的配置項(xiàng),而不修改默認(rèn)配置文件。
例如這樣:
(一)、常用配置項(xiàng)
注意:配置項(xiàng)和值之間用tab鍵隔開(kāi)
#設(shè)置Oracle主目錄:Oracle的安裝目錄(如果說(shuō)是Oracle客戶端,就是客戶端的路徑)
ORACLE_HOME D:\test\instantclient_21_11
#設(shè)置Oracle數(shù)據(jù)庫(kù)連接(數(shù)據(jù)源、用戶、密碼)連接遠(yuǎn)程的,需要配置遠(yuǎn)程數(shù)據(jù)庫(kù)ip和端口
ORACLE_DSN dbi:Oracle:host=127.0.0.1;sid=orcl;port=1521
#填入Oracle用戶名、密碼
ORACLE_USER username
ORACLE_PWD pwd***
#配置你想遷移的內(nèi)容,需要遷移什么內(nèi)容,就配置什么內(nèi)容,之間用“,”隔開(kāi)
TYPE TABLE,VIEW,SEQUENCE,TRIGGER,FUNCTION,PROCEDURE
#導(dǎo)出SQL目標(biāo)文件名稱
OUTPUT user.sql
#導(dǎo)出SQL目標(biāo)目錄
OUTPUT_DIR C:\test
#配置你要導(dǎo)出的Oracle數(shù)據(jù)庫(kù) 不配置的情況下默認(rèn)導(dǎo)出所有數(shù)據(jù)庫(kù)所有表
SCHEMA MY_Oracle_SCHEMA
#配置允許留下的表,這里可以使用正則表達(dá)式,示例表示遷移表名包含“BI_”的數(shù)據(jù)庫(kù)表
ALLOW .*BI_.*
#默認(rèn)情況下,Oracle模式不會(huì)導(dǎo)出到PostgreSQL數(shù)據(jù)庫(kù)中,所有對(duì)象都是在默認(rèn)的Pg命名空間下創(chuàng)建的。
#如果還要導(dǎo)出此架構(gòu)并在此命名空間下創(chuàng)建所有對(duì)象,請(qǐng)將export_schema指令設(shè)置為1。
#這將使用默認(rèn)的pg_catalog模式將導(dǎo)出SQL文件頂部的模式搜索路徑設(shè)置為schema指令中設(shè)置的模式名稱。
#如果要更改此路徑,請(qǐng)使用指令PG_SCHEMA。
EXPORT_SCHEMA 0
#在輸出文件開(kāi)始時(shí)啟用/禁用CREATE SCHEMA SQL順序。它在默認(rèn)情況下是啟用的,并關(guān)系TABLE導(dǎo)出類型。
CREATE_SCHEMA 1
#限制導(dǎo)出到哪一個(gè)架構(gòu)
PG_SCHEMA MY_PG_SCHEMA
#設(shè)置導(dǎo)出目標(biāo)pg數(shù)據(jù)庫(kù)
PG_DSN dbi:Pg:dbname=my_db;host=127.0.0.1;port=5432
#填入pg用戶名、密碼
PG_USER pg_username
PG_PWD pg_pwd***
(二)、配置項(xiàng)幫助文檔
更多配置項(xiàng)詳細(xì)說(shuō)明,請(qǐng)?jiān)斠?jiàn)Ora2Pg
官方文檔!
Ora2Pg : Migrates Oracle to PostgreSQL (darold.net)
需求實(shí)驗(yàn)
實(shí)驗(yàn)一:批量導(dǎo)出Oracle中特定表到PostgreSQL的一個(gè)特定schema下
(1)需求詳細(xì)說(shuō)明
匹配Oracle數(shù)據(jù)庫(kù)中所有表名包含"BI_"的數(shù)據(jù)表遷移到PostgreSQL的test_schema下。(遷移表結(jié)構(gòu)和數(shù)據(jù))
(2)實(shí)驗(yàn)過(guò)程
編寫(xiě)ora2pg.conf.dist
配置文件:
ORACLE_HOME D:\test\instantclient_21_11
ORACLE_DSN dbi:Oracle:host=127.0.0.1;sid=orcl;port=1521
ORACLE_USER username
ORACLE_PWD pwd***
TYPE TABLE,INSERT
ALLOW .*BI_.*
PG_SCHEMA test_schema
OUTPUT user.sql
OUTPUT_DIR C:\test
執(zhí)行遷移命令:
ora2pg -c C:\Users\zhao-XH\Desktop\ora2pg.conf.dist -d
導(dǎo)出sql腳本成功
在PostgreSQL客戶端分別執(zhí)行表結(jié)構(gòu)和數(shù)據(jù)插入sql腳本即可!
(3)問(wèn)題總結(jié)
遷移過(guò)程中要注意,字段的類型映射是否符合要求。官方給出的類型映射關(guān)系如下:
oracle類型 | postgresql類型 |
---|---|
date | timestamp |
long | text |
long raw | bytea |
clob | text |
nclob | text |
blob | bytea |
bfile | bytea |
raw | bytea |
rowid | oid |
float | double precision |
dec | decimal |
decimal | decimal |
double precision | double precision |
int | integer |
integer | integer |
real | real |
smallint | smallint |
binary_float | double precision |
binary_double | double precision |
tinestamp | timestamp |
xmltype | xml |
binary_integer | integer |
pls_integer | integer |
timestamp with time zone | timestamp with time zone |
timestamp with local time zone | timestamp with time zone |
如果類型映射不符合我們的要求,例如本次實(shí)驗(yàn),我想要NUMBER(1,0)類型進(jìn)行精度映射,而ora2pg工具考慮到效率問(wèn)題,默認(rèn)關(guān)閉NUMBER(p,s) -> numeric(p,s)的映射關(guān)系。采用了取整型的方式,這一點(diǎn)很顯然不是我想要的。查閱官方文檔,我們可以看出,要想開(kāi)啟NUMBER(p,s) -> numeric(p,s)的映射關(guān)系,需要將PG_INTEGER_TYPE配置項(xiàng)的值置為0即可!
官方文檔:
PG_NUMERIC_TYPE
If set to 1 replace portable numeric type into PostgreSQL internal type. Oracle data type NUMBER(p,s) is approximatively converted to real and float PostgreSQL data type. If you have monetary fields or don't want rounding issues with the extra decimals you should preserve the same numeric(p,s) PostgreSQL data type. Do that only if you need exactness because using numeric(p,s) is slower than using real or double.
PG_INTEGER_TYPE
If set to 1 replace portable numeric type into PostgreSQL internal type. Oracle data type NUMBER(p) or NUMBER are converted to smallint, integer or bigint PostgreSQL data type following the value of the precision. If NUMBER without precision are set to DEFAULT_NUMERIC (see below).
DEFAULT_NUMERIC
NUMBER without precision are converted by default to bigint only if PG_INTEGER_TYPE is true. You can overwrite this value to any PG type, like integer or float.
我們也可以設(shè)置配置項(xiàng)來(lái)進(jìn)行手動(dòng)映射。方法如下:
官方文檔:
If you're experiencing any problem in data type schema conversion with this directive you can take full control of the correspondence between Oracle and PostgreSQL types to redefine data type translation used in Ora2pg. The syntax is a comma-separated list of "Oracle datatype:Postgresql datatype". Here are the default list used:
DATA_TYPE VARCHAR2:varchar,NVARCHAR2:varchar,NVARCHAR:varchar,NCHAR:char,DATE:timestamp(0)...
The directive and the list definition must be a single line.
看到上述說(shuō)明,我們關(guān)注以下幾點(diǎn):
- 設(shè)置配置項(xiàng)時(shí),你沒(méi)有必要全部粘貼默認(rèn)映射再進(jìn)行更改,只需要修改不符合你映射要求的數(shù)據(jù)類型即可!
- 所有類型映射配置必須在一行上聲明,中間用","隔開(kāi)。
示范,例如官方文檔默認(rèn)將DATE:timestamp(0),而我需要DATE:timestamp。同時(shí)我需要開(kāi)啟精度映射。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-710179.html
那么上述配置文件更改如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710179.html
ORACLE_HOME D:\test\instantclient_21_11
ORACLE_DSN dbi:Oracle:host=127.0.0.1;sid=orcl;port=1521
ORACLE_USER username
ORACLE_PWD pwd***
TYPE TABLE,INSERT
ALLOW .*BI_.*
PG_SCHEMA test_schema
OUTPUT user.sql
OUTPUT_DIR C:\test
PG_INTEGER_TYPE 0
DATA_TYPE DATE:timestamp
到了這里,關(guān)于ora2pg使用記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!