Oracle 遷移至 PostgreSQL工具之Ora2Pg

1. 描述

Ora2Pg是一個免費的工具,用于將Oracle數(shù)據(jù)庫遷移到PostgreSQL兼容的模式搔谴。它連接您的Oracle數(shù)據(jù)庫魁袜,自動掃描并提取它的結(jié)構(gòu)或數(shù)據(jù),然后生成可以裝載到PostgreSQL數(shù)據(jù)庫的SQL腳本敦第。Ora2Pg可以從逆向工程Oracle數(shù)據(jù)庫到大型企業(yè)數(shù)據(jù)庫遷移峰弹,或者簡單地將一些Oracle數(shù)據(jù)復制到PostgreSQL數(shù)據(jù)庫中。它非常容易使用芜果,并且不需要任何Oracle數(shù)據(jù)庫知識鞠呈,而不需要提供連接到Oracle數(shù)據(jù)庫所需的參數(shù)。

2. 安裝

2.1. 依賴環(huán)境要求

  1. perl版本5.10以上右钾;安裝依賴包:
yum install -y perl perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
  1. 安裝DBI
    下載地址:https://metacpan.org/release/DBI
tar -zxvf DBI-1.641.tar.gz
cd DBI-1.641
perl Makefile.PL
make
make install
  1. 安裝Oracle客戶端
    安裝Oracle的客戶端軟件蚁吝;步驟略
  2. 安裝DBD-Oracle
    下載地址:http://search.cpan.org/~pythian/DBD-Oracle-1.74/lib/DBD/Oracle.pm
tar -zxvf DBD-Oracle-1.74.tar.gz
# 加載環(huán)境變量;因為必須定義ORACLE_HOME環(huán)境變量;本例在postgres用戶下配置環(huán)境變量
source /home/postgres/.bashrc 
cd DBD-Oracle-1.74
perl Makefile.PL
make
make install
  1. 安裝DBD::Pg [可選]
    下載地址:http://search.cpan.org/~turnstep/DBD-Pg/
tar -zxvf DBD-Pg-1.32.tar.gz 
source /home/postgres/.bashrc 
cd DBD-Pg-1.32
perl Makefile.PL
make
make install

2.2安裝Ora2Pg

下載地址:https://sourceforge.net/projects/ora2pg/

[root@Postgres201 ~]# tar -zxvf ora2pg-18.2.tar.gz 
ora2pg-18.2/
ora2pg-18.2/INSTALL
ora2pg-18.2/LICENSE
ora2pg-18.2/MANIFEST
ora2pg-18.2/Makefile.PL
ora2pg-18.2/README
ora2pg-18.2/changelog
ora2pg-18.2/doc/
ora2pg-18.2/doc/Ora2Pg.pod
ora2pg-18.2/doc/ora2pg.3
ora2pg-18.2/lib/
ora2pg-18.2/lib/Ora2Pg.pm
ora2pg-18.2/lib/Ora2Pg/
ora2pg-18.2/lib/Ora2Pg/GEOM.pm
ora2pg-18.2/lib/Ora2Pg/MySQL.pm
ora2pg-18.2/lib/Ora2Pg/PLSQL.pm
ora2pg-18.2/packaging/
ora2pg-18.2/packaging/README
ora2pg-18.2/packaging/RPM/
ora2pg-18.2/packaging/RPM/ora2pg.spec
ora2pg-18.2/packaging/debian/
ora2pg-18.2/packaging/debian/create-deb-tree.sh
ora2pg-18.2/packaging/debian/ora2pg/
ora2pg-18.2/packaging/debian/ora2pg/DEBIAN/
ora2pg-18.2/packaging/debian/ora2pg/DEBIAN/control
ora2pg-18.2/packaging/debian/ora2pg/DEBIAN/copyright
ora2pg-18.2/packaging/slackbuild/
ora2pg-18.2/packaging/slackbuild/Ora2Pg.SlackBuild
ora2pg-18.2/packaging/slackbuild/Ora2Pg.info
ora2pg-18.2/packaging/slackbuild/README
ora2pg-18.2/packaging/slackbuild/doinst.sh
ora2pg-18.2/packaging/slackbuild/slack-desc
ora2pg-18.2/scripts/
ora2pg-18.2/scripts/ora2pg
ora2pg-18.2/scripts/ora2pg_scanner
[root@Postgres201 ~]# cd ora2pg-18.2
[root@Postgres201 ora2pg-18.2]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Ora2Pg

Done...
------------------------------------------------------------------------------
Please read documentation at http://ora2pg.darold.net/ before asking for help
------------------------------------------------------------------------------
Now type: make && make install
[root@Postgres201 ora2pg-18.2]# make && make install
cp lib/Ora2Pg.pm blib/lib/Ora2Pg.pm
cp lib/Ora2Pg/GEOM.pm blib/lib/Ora2Pg/GEOM.pm
cp lib/Ora2Pg/PLSQL.pm blib/lib/Ora2Pg/PLSQL.pm
cp lib/Ora2Pg/MySQL.pm blib/lib/Ora2Pg/MySQL.pm
cp scripts/ora2pg blib/script/ora2pg
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pg
cp scripts/ora2pg_scanner blib/script/ora2pg_scanner
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pg_scanner
Manifying blib/man3/ora2pg.3
Installing /usr/local/share/perl5/Ora2Pg.pm
Installing /usr/local/share/perl5/Ora2Pg/MySQL.pm
Installing /usr/local/share/perl5/Ora2Pg/GEOM.pm
Installing /usr/local/share/perl5/Ora2Pg/PLSQL.pm
Installing /usr/local/share/man/man3/ora2pg.3
Installing /usr/local/bin/ora2pg
Installing /usr/local/bin/ora2pg_scanner
Installing default configuration file (ora2pg.conf.dist) to /etc/ora2pg
Appending installation info to /usr/lib64/perl5/perllocal.pod

檢查所有軟件是否安裝成功?

[root@Postgres201 ~]# vi check.pl
#!/usr/bin/perl
use strict;
use ExtUtils::Installed;
my $inst= ExtUtils::Installed->new();
my @modules = $inst->modules();
foreach(@modules)
{
        my $ver = $inst->version($_) || "???";
        printf("%-12s --  %s\n", $_, $ver);  
}
exit;
[root@Postgres201 ~]# perl check.pl
DBD::Oracle  --  1.74
DBD::Pg      --  1.32
DBI          --  1.641
Ora2Pg       --  18.2
Perl         --  5.10.1

3. 小試牛刀

配置配置文件

  1. 導出表結(jié)構(gòu)ora2pg_table.conf
ORACLE_HOME /u01/app/oracle
ORACLE_DSN  dbi:Oracle:ora221
#ORACLE_DSN  dbi:Oracle:host=192.168.1.221;sid=orcl
ORACLE_USER lottu
ORACLE_PWD  li0924
SCHEMA  lottu
TYPE TABLE
PG_NUMERIC_TYPE    0
PG_INTEGER_TYPE    1
DEFAULT_NUMERIC float
SKIP    fkeys pkeys ukeys indexes checks
NLS_LANG    AMERICAN_AMERICA.UTF8
OUTPUT     table.sql
  1. 導出數(shù)據(jù)ora2pg_data.conf
ORACLE_HOME /u01/app/oracle
ORACLE_DSN  dbi:Oracle:ora221
#ORACLE_DSN  dbi:Oracle:host=192.168.1.221;sid=orcl
ORACLE_USER lottu
ORACLE_PWD  li0924
SCHEMA  lottu
TYPE COPY
PG_NUMERIC_TYPE    0
PG_INTEGER_TYPE    1
DEFAULT_NUMERIC float
SKIP    fkeys pkeys ukeys indexes checks
NLS_LANG    AMERICAN_AMERICA.UTF8
OUTPUT     data.sql

導出數(shù)據(jù)

[postgres@Postgres201 config]$ ora2pg -c ora2pg_table.conf 
[========================>] 2/2 tables (100.0%) end of scanning.     
[========================>] 2/2 tables (100.0%) end of table export.

[postgres@Postgres201 config]$ ora2pg -c ora2pg_data.conf 
[========================>] 2/2 tables (100.0%) end of scanning.     
[========================>] 4/1 rows (400.0%) Table DEPT (4 recs/sec)
[===================>     ] 4/5 total rows (80.0%) - (0 sec., avg: 4 recs/sec).
[========================>] 4/4 rows (100.0%) Table ORATAB (4 recs/sec)                       
[========================>] 8/5 total rows (160.0%) - (0 sec., avg: 8 recs/sec).
[========================>] 5/5 rows (100.0%) on total estimated data (1 sec., avg: 5 recs/sec)

導入Postgres數(shù)據(jù)庫中

[postgres@Postgres201 config]$ psql lottu lottu -f table.sql 
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
[postgres@Postgres201 config]$ psql lottu lottu -f data.sql 
SET
SET
BEGIN
COPY 4
COPY 4
COMMIT

FAQ:導出出現(xiàn)"Can't locate Time/HiRes.pm in"錯誤?

[root@Postgres201 ora2pg]# ora2pg -c ora2pg.conf
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/Ora2Pg.pm line 33.
BEGIN failed--compilation aborted at /usr/local/share/perl5/Ora2Pg.pm line 33.
Compilation failed in require at /usr/local/bin/ora2pg line 30.
BEGIN failed--compilation aborted at /usr/local/bin/ora2pg line 30.

解決方案

yum install -y perl-Time-HiRes

更多詳細查考http://ora2pg.darold.net/documentation.html#installation

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舀射,一起剝皮案震驚了整個濱河市窘茁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脆烟,老刑警劉巖山林,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邢羔,居然都是意外死亡驼抹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門拜鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框冀,“玉大人,你說我怎么就攤上這事敏簿∶饕玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诡右。 經(jīng)常有香客問我安岂,道長,這世上最難降的妖魔是什么帆吻? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任域那,我火速辦了婚禮,結(jié)果婚禮上猜煮,老公的妹妹穿的比我還像新娘次员。我一直安慰自己,他們只是感情好王带,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布淑蔚。 她就那樣靜靜地躺著,像睡著了一般愕撰。 火紅的嫁衣襯著肌膚如雪刹衫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天搞挣,我揣著相機與錄音带迟,去河邊找鬼。 笑死囱桨,一個胖子當著我的面吹牛仓犬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舍肠,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼搀继,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翠语?” 一聲冷哼從身側(cè)響起叽躯,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啡专,沒想到半個月后险毁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體制圈,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡们童,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲸鹦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慧库。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖馋嗜,靈堂內(nèi)的尸體忽然破棺而出齐板,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布甘磨,位于F島的核電站橡羞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏济舆。R本人自食惡果不足惜卿泽,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滋觉。 院中可真熱鬧签夭,春花似錦、人聲如沸椎侠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽我纪。三九已至慎宾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浅悉,已是汗流浹背璧诵。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仇冯,地道東北人之宿。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像苛坚,于是被迫代替她去往敵國和親比被。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • About:PostgreSQL About 《PostgreSQL 源碼分析系列》 PostgreSQL 源碼分...
    ty4z2008閱讀 8,168評論 1 40
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理泼舱,服務(wù)發(fā)現(xiàn)等缀,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復 [日期:2016-11-29] 來源:Linux社區(qū) 作...
    陽屯okyepd閱讀 3,359評論 0 7
  • 他是個擺地攤的小伙娇昙,就在田林路公交車站旁尺迂,清秀頎長,總是淺淺笑著冒掌,好像只能用笑來招呼來來往往的人們噪裕。老頭指了指桌上...
    lilo538閱讀 301評論 0 1
  • 喜馬拉雅——歲時隨地,聽我想聽 版本:ios V4.3.8 喜馬拉雅FM是在電臺APP中走得最成熟的一個股毫,內(nèi)容質(zhì)量...
    LJ說_LjNotes閱讀 588評論 0 50