Ora2pg 把oracle數據導入到postgres

Ora2pg 使用總結

Ora2pg 使用總結 1

1 Ora2pg特性 1

2 Ora2pg支持的導出對象 2

3 Ora2pg數據類型轉換對照 2

4 Ora2pg 安裝 3

4.1 安裝需要的驅動包 3

4.2 下載並安裝Oracle 客戶端 3

4.3 安裝 DBI 4

4.4 安裝 DBD-Oracle客戶端 4

4.4.1 在當前用戶配置一下環境變量 4

4.4.2 安裝DBD-Oracle 4

4.5 安裝 Ora2pg 客戶端 4

4.6 ora2pg 參數說明 5

5 Ora2pg 使用案例 6

5.1 ora2pg 數據導入到pg案例 6

5.1.1 編寫配置案例 6

5.1.2 使用ora2pg 把數據下載到本地 7

5.1.3 查看文件的大小與行數 8

5.1.4 把數據導入到postgres中 8

5.1.5 校驗pg中數據的準確性 8

1 Ora2pg特性

1、導出整個數據庫模式(表、視圖、序列、索引),以及唯一性,主鍵、外鍵和檢查約束。
2、導出用戶和組的授權/權限。
3、導出篩選的表(通過制定表明)。
4、導出Oracle模式到一個PostgreSQL(7.3以後)模式中。
5、導出預定義函數、觸發器、程序、包和包體。
6、導出範圍和列表分區。
7、導出所有的數據或跟隨一個WHERE子句。
8、充分支持Oracle BLOB對象作爲PG的BYTEA。
9、導出Oracle視圖作爲PG表。
10、導出定義的Oracle用戶格式。
11、提供關於轉換PLSQL碼爲PLPGSQL的基本幫助(仍然需要手工完成)。
12、可在任何平臺上工作。
13、Ora2Pg盡力將Oracle數據庫轉換到PostgreSQL中,但是仍需一部分的手動工作。Oracle特定的PL/SQL代碼生成函數、過程 和觸發器時必須進行審查,以便匹配PostgreSQL的語法

2 Ora2pg支持的導出對象

這是允許導出的不同的格式,默認是TABLE:

table

提取所有包括索引、主鍵、唯一鍵、外鍵和檢查約束的表。

view

提取視圖。

grant

提取在所有對象中轉換爲pg組、用戶和權限的用戶。

sequence

提取所有的序列以及上一個位置。

tablespace

提取表空間。

trigger

提取通過動作觸發的被指定的觸發器。

function

提取函數。

proceduers

提取存儲過程。

package

提取包和包主體。

data

提取數據,生成insert語句。

copy

提取數據,生成copy語句。

partition

提取範圍和列表分區。

type

提取oracle用戶自定義的格式。(以下兩條是10.0新加的)

fdw

提取外部數據封裝表

partition

提取作爲快照刷新視圖所建立的視圖

3 Ora2pg數據類型轉換對照

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

4 Ora2pg 安裝

4.1 安裝需要的驅動包

yum install -y perf cpan

4.2 下載並安裝Oracle 客戶端

oracle 客戶端下載地址(下載basic/sqlplus/devel/jdbc後綴爲rpm文件即可)
https://www.oracle.com/database/technologies/instant-client/downloads.html
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
安裝下載的軟件包

scp -r rpm -ivh oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
scp -r rpm -ivh oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
scp -r rpm -ivh oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
測試客戶端

sqlplus64  username/password@ip:port/sid或service_name

4.3 安裝 DBI

cpan  install -y  DBI

4.4 安裝 DBD-Oracle客戶端

4.4.1 在當前用戶配置一下環境變量

export ORACLE_HOME=/usr/lib/oracle/19.3/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
19.3 是安裝的oracle客戶端的版本號

4.4.2 安裝DBD-Oracle

wget http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.74.tar.gz
tar -zxvf DBD-Oracle-1.74.tar.gz
cd DBD-Oracle-1.74 
perl Makefile.PL -l
make && make test
make install

4.5 安裝 Ora2pg 客戶端

wget https://github.com/darold/ora2pg/archive/v18.2.tar.gz
tar -zxvf v18.2.tar.gz
cd ora2pg-18.2/ 
perl Makefile.PL
make && make install

4.6 ora2pg 參數說明

# ora2pg --help
Usage: ora2pg [-dhpqv --estimate_cost --dump_as_html] [--option value]
-a | --allow str : 指定允許導出的對象列表,使用逗號分隔。也可以與 SHOW_COLUMN 選項一起使用。
-b | --basedir dir: 設置默認的導出目錄,用於存儲導出結果。
-c | --conf file : 設置非默認的配置文件,默認配置文件爲 /etc/ora2pg/ora2pg.conf。
-d | --debug : 使用調試模式,輸出更多詳細信息。
-D | --data_type STR : 通過命令行設置數據類型轉換。
-e | --exclude str: 指定導出時排除的對象列表,使用逗號分隔。也可以與 SHOW_COLUMN 選項一起使用。
-h | --help : 顯示幫助信息。
-g | --grant_object type : 導出指定類型的對象上的授權信息,取值參見 GRANT_OBJECT 配置項。
-i | --input file : 指定要導入的 Oracle PL/SQL 代碼文件,導入文件時不需要連接到 Oracle 數據庫。
-j | --jobs num : 設置用於發送數據到 PostgreSQL 的併發進程數量。
-J | --copies num : 設置用於從 Oracle 導出數據的併發連接數量。
-l | --log file : 設置日誌文件,默認爲 stdout。
-L | --limit num : 導出數據時,每次寫入磁盤之前在內存中緩衝的記錄數量,默認值爲 10000。
-m | --mysql : 導出 MySQL 數據庫。
-n | --namespace schema : 設置需要導出的 Oracle 模式。
-N | --pg_schema schema : 設置 PostgreSQL 中的搜索路徑 search_path。
-o | --out file : 設置導出的 SQL 文件的存儲路徑。默認值爲當前目錄下的 output.sql 文件。
-p | --plsql : 啓用 PLSQL 代碼到 PLPGSQL 代碼的轉換。
-P | --parallel num: 同時導出多個表,設置併發數量。
-q | --quiet : 不顯示進度條。
-s | --source DSN : 設置 Oracle DBI 數據源。
-t | --type export: 設置導出類型。該參數將會覆蓋配置文件中的導出類型(TYPE)。
-T | --temp_dir DIR: 爲多個同時運行的 ora2pg 腳本指定不同的臨時存儲目錄。
-u | --user name : 設置連接 Oracle 數據庫連接的用戶名。也可以使用 ORA2PG_USER 環境變量。
-v | --version : 顯示 Ora2Pg 版本信息並退出。
-w | --password pwd : 設置連接 Oracle 數據庫的用戶密碼。也可以使用 ORA2PG_PASSWD 環境變量。
--forceowner : 導入數據時,強制 ora2pg 將導入 PostgreSQL 的表和序列的擁有者設置爲連接 Oracle 數據庫時的用戶。如果設置爲指定的用戶名,所有導入的對象屬於該用戶。默認情況下,對象的擁有者爲連接 Pg 數據庫的用戶。
--nls_lang code: 設置 Oracle 客戶端的 NLS_LANG 編碼。
--client_encoding code: 設置 PostgreSQL 客戶端編碼。
--view_as_table str: 將視圖導出爲表,多個視圖使用逗號分隔。
--estimate_cost : 在 SHOW_REPORT 結果中輸出遷移成本評估信息。
--cost_unit_value minutes: 成本評估單位,使用分鐘數表示。默認值爲 5 分鐘,表示一個 PostgreSQL 專家遷移所需的時間。如果是第一次遷移,可以設置爲 10 分鐘。
 --dump_as_html : 生成 HTML 格式的遷移報告,只能與 SHOW_REPORT 選項一起使用。默認的報告是一個簡單的文本文件。
 --dump_as_csv : 與上個參數相同,但是生成 CSV 格式的報告。
 --dump_as_sheet : 生成遷移評估時,爲每個數據庫生成一行 CSV 記錄。
 --init_project NAME: 創建一個ora2pg 項目目錄結構。項目的頂級目錄位於根目錄之下。
 --project_base DIR : 定義ora2pg 項目的根目錄,默認爲當前目錄。
 --print_header : 與 --dump_as_sheet 一起使用,輸出 CSV 標題信息。
 --human_days_limit num : 設置遷移評估級別從 B 升到 C 所需的人工日數量。默認值爲 5 人工日。
 --audit_user LIST : 設置查詢 DBA_AUDIT_TRAIL 表時需要過濾的用戶名,多個用戶使用逗號分隔。該參數只能用於 SHOW_REPORT 和 QUERY 導出類型。
 --pg_dsn DSN : 設置在線導入時的 PostgreSQL 數據源。
 --pg_user name : 設置連接 PostgreSQL 的用戶名。
 --pg_pwd password : 設置連接 PostgreSQL 的用戶密碼。
 --count_rows : 在 TEST 方式下執行真實的數據行數統計。
 --no_header : 在導出文件中不添加 Ora2Pg 頭部信息。
 --oracle_speed : 用於測試 Oracle 發送數據的速度。不會真的處理或者寫入數據。
 --ora2pg_speed : 用於測試 Ora2Pg 發送轉換後的數據的速度。不會寫入任何數據。

5 Ora2pg 使用案例

5.1 ora2pg 數據導入到pg案例

5.1.1 編寫配置案例

# vim  ora2pg.conf
# oracle client 安裝地址
ORACLE_HOME /usr/lib/oracle/19.3/client64
# oracle connent info
ORACLE_DSN dbi:Oracle:host=ipaddress;sid=orcl;port=1521
ORACLE_USER username
ORACLE_PWD  password
# oracle schema
SCHEMA schemaname
# oracle type
TYPE TABLE COPY DATA
# 輸出的文件名字
OUTPUT output.sql
# 輸出的路徑(本地路徑)
OUTPUT_DIR ./
Ipaddress :鏈接oracle的IP地址
username : 鏈接oracle的用戶名
password : 鏈接oracle的密碼
schemaname : 鏈接oracle的schema信息

5.1.2 使用ora2pg 把數據下載到本地

# time ora2pg -c ora2pg.conf -a tablename
[========================>] 1/1 tables (100.0%) end of scanning. 
[> ] 0/1 tables (0.0%) end of scanning. 
[> ] 0/1 tables (0.0%) end of scanning. 
[========================>] 1/1 tables (100.0%) end of table export. 
[========================>] 541243/537749 rows (100.6%) Table tablename  (7959 recs/sec)
[========================>] 541243/537749 total rows (100.6%) - (68 sec., avg: 7959 recs/sec). 
[========================>] 537749/537749 rows (100.0%) on total estimated data (68 sec., avg: 7908 recs/sec)
[========================>] 541243/537749 rows (100.6%) Table tablename (8591 recs/sec) 
[========================>] 1082486/537749 total rows (201.3%) - (63 sec., avg: 17182 recs/sec). 
[========================>] 537749/537749 rows (100.0%) on total estimated data (63 sec., avg: 8535 recs/sec)
real 2m26.185s
user 2m9.606s
sys 0m1.153s
tablename:單表的名字

5.1.3 查看文件的大小與行數

# du -sh output.sql
79M output.sql
# wc -l output.sql
542914 output.sql

5.1.4 把數據導入到postgres中

# time psql -U postgres -d databasename -h 192.168.***.** -p 5432 -f output.sql
SET
SET
CREATE TABLE
CREATE INDEX
ALTER TABLE
SET
SET
BEGIN
ALTER SEQUENCE
ALTER SEQUENCE
COMMIT
real 0m10.196s
user 0m0.215s
sys 0m0.202s
databasename :數據庫的名字

5.1.5 校驗pg中數據的準確性

select count(*) from "public".tablename;
-- 541243
tablename : 表的名字

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章