Ora2Pg 是一个免费工具,用于将 Oracle 或者 MySQL 数据库迁移到 PostgreSQL。它通过连接 Oracle 数据库,执行自动扫描并且提取数据库的结构和数据,然后生成相应的 SQL 脚本。这些脚本可以用于将数据库结构和数据导入 PostgreSQL 之中。
Ora2Pg 可以用于各种场景,小到 Oracle 数据库的反向工程,大到大型企业数据库迁移,或者简单地将一些 Oracle 数据复制到 PostgreSQL 数据库。它非常简单易用,甚至不需要任何 Oracle 数据库的相关知识,只需要提供连接到 Oracle 数据库的配置参数。
Ora2Pg 由一个 Perl 脚本(ora2pg)以及一个 Perl 模块(Ora2Pg.pm)组成,唯一需要做的事情就是修改它的配置文件 ora2pg.conf,设置连接 Oracle 数据库的 DSN 和一个可选的模式名称。完成之后,只需要设置导出的类型:TABLE(包括约束)、VIEW、MVIEW、TABLESPACE、SEQUENCE、INDEXES、TRIGGER、GRANT、FUNCTION、PROCEDURE、PACKAGE、PARTITION、TYPE、INSERT 或 COPY、FDW、QUERY、KETTLE 以及 SYNONYM。
默认情况下,Ora2Pg 导出一个文件,可以通过 psql 客户端将文件加载到 PostgreSQL 数据库;但是也可以在配置文件中设置一个数据库的 DSN,直接导入 PostgreSQL 数据库。通过 ora2pg.conf 中的配置选项,可以控制导出的内容和方式。
下面介绍ora2pg是如何迁移表数据的:
1. 安装依赖包
要求:perl版本5.8以上
# 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-22.1.tar.bz2
# cd ora2pg-22.1
# perl Makefile.PL
# make
# make install
默认安装在/usr/local/bin/目录下
3. 编辑配置文件

# vi ora2pg_tab_1.conf

ORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_DSN dbi:Oracle:host=x.x.x.x;sid=PROD;port=xxx
ORACLE_USER xxxxxxx
ORACLE_PWD xxxx
LOGFILE /tmp/test.log
USER_GRANTS 0
SCHEMA xxxx
EXPORT_SCHEMA 0
#TYPE TABLE
PARALLEL_TABLES 4
JOBS 4
PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC float
SKIP fkeys pkeys ukeys indexes checks
NLS_LANG AMERICAN_AMERICA.UTF8
OUTPUT output.sql
LIMIT 100000
PG_DSN dbi:Pg:dbname=xxxx;host=x.x.x.x;port=xxx
PG_USER xxx
PG_PWD xxxxxx
PG_SCHEMA xxx
LOG_ON_ERROR 0
BLOB_LIMIT 100
TRUNCATE_TABLE 1
DISABLE_SEQUENCE 1
PG_VERSION 12
EMPTY_LOB_NULL
ORA_INITIAL_COMMAND
IMPORT imp_tab_1.conf
CREATE_SCHEMA 1
COMPILE_SCHEMA 0
debug 1
# vi imp_tab_1.conf
allow tablename
4. 执行导入
5. 查看导入日志
# tail -111f tmp/test.log
可以看到当前导入速度

导入完成,可以看到平均速度

注意事项:
迁移数据之前一定要确保源端和目标端的表名、表结构都完全一致,否则导入会失败。
开并行需谨慎,需要根据机器CPU的当前使用情况来确定。如果只导入单表,可以将PARALLEL_TABLES参数为调整为1。
配置文件中的用户需要对表有相关使用权限,建议导数时使用高权限用户。
TRUNCATE_TABLE参数会清空目标端表中现有数据,需要根据实际情况谨慎使用。

更多精彩干货分享
点击下方名片关注
IT那活儿





