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 : 表的名字