概要
记录一下自己安装ora2pg 工具的过程
用到的工具
linux: centos7
ora2pg: 24.1
DBD-oracle: 1.8.3
DBD::Pg
DBI-1.641
oracle-instantclient 12.1.basic, devel,jdbc,sqlplus
postgresql: 13
软件安装
1.1 安装perl 依赖,如果有不需要再次安装
yum install -y gcc
yum install -y perl perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum install perl-CPAN
1.2 安装DBI
yum install -y perl-DBI
或
perl -MCPAN -e 'install DBI'
或者tar安装 下载地址:https://metacpan.org/release/DBI
tar -zxvf DBI-1.641.tar.gz
cd DBI-1.641
perl Makefile.PL
make
make install
1.3 安装ora2pg 下载地址 :https://sourceforge.net/projects/ora2pg/
tar -zxvf ora2pg-24.1.tar.gz
cd ora2pg-24.1
perl Makefile.PL
make
make install
1.4 安装DBD::Oracle
- 1.4.1 安装Oracle 客户端
rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.1-jdbc-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
- 1.4.2配置Oracle 客户端环境变量
export ORACLE_HOME=/usr/lib/oracle/12.1/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/profile
- 1.4.3 安装DBD::Oracle
- 下载地址:http://search.cpan.org/~pythian/DBD-Oracle-1.74/lib/DBD/Oracle.pm
必须定义ORACLE_HOME、LD_LIBRARY_PATH环境变量
tar -zxvf DBD-Oracle-1.74.tar.gz 加载环境变量;
cd DBD-Oracle-1.74
perl Makefile.PL
make
make install
1.5 安装DBD::Pg
注意: 安装pg 前必须安装pgsql 客户端或者服务
下载地址:http://search.cpan.org/~turnstep/DBD-Pg/
或者
perl -MCPAN -e 'install DBD::Pg'
- 1.5.1 安装postgresql
yum -y install postgresql13
psql -V
配置环境变量
export POSTGRES_HOME=/usr/pgsql-13
export POSTGRES_INCLUDE=$POSTGRES_HOME/include
export POSTGRES_LIB=$POSTGRES_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH:$POSTGRES_HOME/bin:$PATH
1.6 检查安装情况
# 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;
# perl check.pl
1.7 ora2pg配置文件信息
linux 一般后缀为.conf window下后缀为 xxx.conf.dist
# 设置Oracle主目录:Oracle的安装目录 // 这个目录可能是需要连接的数据库所在目录
ORACLE_HOME D:\Oracle\product\11.2.0\dbhome_1
# 设置Oracle数据库连接(数据源、用户、密码)
ORACLE_DSN dbi:Oracle:host=127.0.0.1;sid=orcl;port=1521
ORACLE_USER xxx
ORACLE_PWD xxx
# 要使用的 Oracle 模式/所有者
SCHEMA xmgl
# EXPORT SECTION(导出类型和过滤器)
# 导出类型。值可以是以下关键字:
# TABLE 导出表、约束、索引...
#PACKAGE 导出包
# INSERT 从表中导出数据作为 INSERT 语句
# COPY 将表中的数据导出为 COPY 语句
# VIEW 导出视图
# GRANT 导出授权
# SEQUENCE 导出序列
# TRIGGER 导出触发器
# FUNCTION 导出函数
# PROCEDURE 导出程序
# TABLESPACE 导出表空间(仅限 PostgreSQL >= 8)
# TYPE 导出用户定义的 Oracle 类型
# PARTITION 导出范围或列表分区 (PostgreSQL >= v8.4)
# FDW 导出表作为外部数据包装表
# MVIEW 将物化视图导出为快照刷新视图
# QUERY 从文件转换 Oracle SQL 查询。
# KETTLE 生成 Kettle 使用的 XML ktr 模板文件。
# DBLINK 生成 oracle 外部数据包装服务器以用作 dblink。
# SYNONYM 将 Oracle 的同义词导出为其他模式对象的视图。
# DIRECTORY 将 Oracle 的目录导出为 external_file 扩展对象。
# LOAD 通过多个 PostgreSQl 连接调度查询列表。
# TEST 执行 Oracle 和 PostgreSQL 数据库之间的差异。
# TEST_COUNT 只在 Oracle 和 PostgreSQL 表之间执行行计数。
# TEST_VIEW 对视图返回的行数两边进行计数
# TEST_DATA 对两边的行进行数据验证检查。
# 需要迁移什么内容,就配置什么内容
TYPE TABLE,VIEW,SEQUENCE,TRIGGER,FUNCTION,PROCEDURE,DATA
#设置从哪个对象导出
#ALLOW zkrwb
#此字段为导入PG时候需要的schema字段,如果上述配置导出的时候导出了oracle的schema,那么这个字段可删除掉不进行配置,如果没有导出Oracle的schema,需要在导入到PG的时候导入新的schema,那么则需要手动提前创建PG的schema,并在此处进行配置
PG_SCHEMA xmgl
#导出的字符格式,一般不需要动
NLS_LANG AMERICAN_AMERICA.UTF8
# 导出文件存储位置
OUTPUT ora2pg_output1108.sql
# 必须写入所有转储文件的基本目录
# OUTPUT_DIR /var/tmp
ora2pg 导出
#此命令执行的时候会进行当前schema 下的全表扫描并导出所有的表结构
ora2pg -c ora2pg_table.conf
#此命令执行的时候会进行当前schema下的指定的表名进行扫描,并导出表结构
ora2pg -c ora2pg_table.conf -a 'TABLE[表名,表名,表名]'
pgsql导出语句
# -h pg 的host, -p 端口, -U 用户名, -d database, -f 前面导出的数据文件路径和名称
psql -h xxx -p xxx -U xxx -d xxx -f /tmp/data.sql