您的位置:首页 > 数据库 > Oracle

使用ora2pg完成从oracle到postgresql的迁移工作

2016-03-10 15:03 513 查看
使用Ora2Pg实现从oracle平台往postgres平台的迁移
ora2pg这个软件是通过perl语言来实现数据库的连接与同步的
PERL语言一直是90年代开发CGI程序的首选语言。因为那个时代Python/Ruby/PHP这类相对“高级”的脚本语言尚属幼年或着根本没有出生;而用C/C++来开发CGI,灵活性则又太差。PERL以其快速的开发周期,灵活的语法定义和能充分扩展模块机制,在那个Web应用才刚刚开始的火热年代,领尽了风骚。
Web开发,不外乎两点,一为版面,一为内容。
论版面,PERL的CGI模块功能强大,又简单易用,短短数行,便能动态生成HTML网页。
而论内容,那么必然会用到数据库,用数据库来管理内容。PERL对数据库的支持广而且全,几乎所有的主流数据库都有与之相应的PERL模块支持。为了开发可在不同数据库上移植的PERL应用,DBI(DataBase Interface)模块应运而生,使用这个模块,应用只需使用统一的接口便能操作不同的数据库,真正实现了可移植;当然,这个DBI也配备有相应的开关来支持不同数据库的各种特性,每一个数据库都能单独成文,本篇暂不涉及这此点。
DBI只是个抽象层,要实现支持不同的数据库,则需要在DBI之下,编写针对不同数据库的驱动。对MySql来说,有DBD::Mysql, 而对Oracle来说,则是DBD::Oracle。其中的DBD这是DataBase Driver之简写。

查看perl的版本
perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
Copyright 1987-2009, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

安装DBI
tar xvf DBI-1.627.tar
cd DBI-1.627
perl Makefile.PL
make
make test
make install

安装DBD:oracle
cd /tmp
tar zxf DBD-Oracle-1.64.tar
cd DBD-Oracle-1.64
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
perl Makefile.PL
make
make test
make install

安装DBD:pg
export POSTGRES_HOME=/usr/local/pgsql
export POSTGRES_INCLUDE=/usr/local/pgsql/include
export POSTGRES_LIB=/usr/local/pgsql/lib

检查验证系统中安装了哪些Perl modules

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);
}

[03:05:49 root(db)@enmorep ~]# perl perl.pl
DBD::Oracle -- 1.74
DBI -- 1.627
Perl -- 5.10.1

安装Ora2Pg软件
tar -zxvf ora2pg-12.1.tar.gz
make
make install
cd /etc/ora2pg/
cat ora2pg.conf.dist

ORACLE_HOME /u01/app/oracle/product/11.2.0/db
ORACLE_DSN dbi:Oracle:host=10.211.55.4;sid=enmo
ORACLE_USER system
ORACLE_PWD oracle
SCHEMA SCOTT
TYPE TABLE DATA
PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC float
SKIP fkeys pkeys ukeys indexes checks
NLS_LANG AMERICAN_AMERICA.UTF8
PG_DSN dbi:Pg:dbname=test;host=127.0.0.1;port=5432
PG_USER kiwi
PG_PWD kiwi
OUTPUT output.sql

这儿我们需要注意的是,他只同步的是表的数据,所以我们要先创建好表的定义才行

[20:04:22 root(db)@enmorep ora2pg]# ora2pg -c table.conf
[========================>] 5/5 tables (100.0%) end of scanning.
[> ] 0/5 tables (0.0%) end of scanning.
[========================>] 5/5 tables (100.0%) end of table export.
[========================>] 0/0 rows (100.0%) Table BONUS (0.0 recs/sec)
[> ] 0/24 rows (0.0%) on total data (avg: 0.0 recs/sec)
[========================>] 4/4 rows (100.0%) Table DEPT (4.0 recs/sec)
[====> ] 4/24 rows (16.7%) on total data (avg: 4.0 recs/sec)
[========================>] 14/14 rows (100.0%) Table EMP (14.0 recs/sec)
[==================> ] 18/24 rows (75.0%) on total data (avg: 18.0 recs/sec)
[========================>] 5/5 rows (100.0%) Table SALGRADE (5.0 recs/sec)
[=======================> ] 23/24 rows (95.8%) on total data (avg: 23.0 recs/sec)
[========================>] 1391776/1 rows (139177600.0%) Table TEST (4256.2 recs/sec)
[========================>] 24/24 rows (100.0%) on total data (avg: 0.1 recs/sec)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: