ora2pg是一款可以方便將oracle內的數據導出並轉換成pgsql格式的工具。它支持導出表,視圖,序列等,十分強大,下面介紹它的安裝與使用:
安裝ora2pg需要以下三個軟件支持
1)、DBD::Oracle
2)、DBI
3)、Ora2pg
要求:perl版本5.8以上
查看perl版本
perl -v
1、首先安裝依賴包
yum install perl-DBI perl-DBD-Pg perl-ExtUtils-MakeMaker gcc
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
source /home/oracle/.bash_profile
perl Makefile.PL -l
make
make install
2、安裝 ora2pg包
下載地址:https://sourceforge.net/projects/ora2pg/files/?source=navbar
解壓文件
tar -jxvf ora2pg-18.2.tar.bz2
cd ora2pg-18.2
perl Makefile.PL
make
make install
/usr/local/bin/目錄下
3、配置
ORACLE_DSN dbi:Oracle:host=192.168.0.153;sid=orcl
ORACLE_USER system
ORACLE_PWD highgo
SCHEMA TEST (注意要大寫,否則匹配不到)
TYPE TABLE DATA 設置導出的內容
allow emp 導出TEEST下面的emp表
如果需要讓數據自動導入到PostgreSQL中,則需要同時配置關於連接PostgreSQL的相關信息,配置類似上面Oracle的配置,如下:
PG_DSN dbi:Pg:dbname=test_db;host=192.168.100.106;port=5432
PG_USER test
PG_PWD highg
4、使用
ora2pg -c /etc/ora2pg.conf
vim /etc/ora2pg/ora2pg.conf
-d | --debug :啓用詳細輸出。
-h | --help :打印出簡單的幫助信息。
-v | --version :顯示Ora2Pg的版本。
-c | --conf file :使用另一個替代的配置文件,默認是/etc/ora2pg/ora2pg.conf。
-l | --log file :使用一個日誌文件,默認是標準輸出。
-o | --out file :指定導出的SQL腳本文件的路徑,默認是當前目錄下。
-t | --type export :指定導出格式。覆蓋配置文件中指定的TYPE。
-p | --plsql :啓用PLSQL到PLPSQL碼的轉換。
-s | --source dsn :設置Oracle DBI數據源。
-u | --user user :設置連接Oracle的用户名。
-w | --password pass :設置Oracle用户密碼。
-n | --namespace schema :設置用於提取的Oracle模式名稱。
-b | --basedir dir :設置默認的輸出文件目錄,輸出的文件將被保存到該目錄。
-x | --xtable relname :用於顯示給定表的列名,僅在TYPE為SHOW_COLUMN時使用。
-f | --forceowner :如果設置為1將促使Ora2Pg設置表和序列的所有者。如果將其值設置為一個用户名會被設定為對象的所有者。
--nls_lang code :設置Oracle NLS_LANG客户端編碼。
--client_encoding code :設置PostgreSQL客户端編碼。
-i | --input_file file :文件包含在沒有Oracle數據庫連接發起時Oracle PL/SQL代碼的轉換。
如果出現以下錯誤
請不要驚慌,耐心等待即可
5、將導出的文件導入pgsql數據庫
首先創建一個test_db數據庫,再創建一個test用户,在test_db數據庫下以超級用户創建一個schema,並將該schema的權限者設為test,最後以test用户在test_db數據庫下導入數據腳本:
$ psql
postgres=# CREATE DATABASE test_db;
postgres=# CREATE USER test password ‘highgo’;
postgres=# \c test_db
test_db=# CREATE schema test authorization test;
test_db=# \c test_db test
test_db=> \i /root/output.SQL