简 介

公众号 BigDataTechnology 后台回复: ora2pg 赠送ora2pg参数解释中文版以及安装集成包。
在现在开源工具中、去O化最好的工具就是ora2pg了,在当下的去O环境中,使用面也是比较广泛。
其功能性也很全面。支持oracle多种object的迁移如:TABLE with constraints, VIEW, MVIEW, TABLESPACE, SEQUENCE,INDEXES, TRIGGER, GRANT, FUNCTION, PROCEDURE, PACKAGE, PARTITION, TYPE,INSERT or COPY, FDW, QUERY, KETTLE, SYNONYM。

安装

本文模拟oracle 12c迁移到postgresql-16,以下对应的包都通用,除了oracle客户端工具需要悬着和oracle版本号对应的,其他均可以保持一致,ora2pg的安装节点不需要依赖oracle或pg的server
下载ora2pg

wget https://github.com/darold/ora2pg/archive/refs/tags/v24.3.tar.gz
  • 1.

安装依赖

yum install -y  perl-ExtUtils-MakeMaker perl-ExtUtils-CBuilder  perl-CPAN   perl-ExtUtils-eBuilder
yum install perl-CPAN -y 
yum install perl perl-devel make gcc gcc-c++ -y
yum install perl-Test-Tester -y
yum install   perl-Time-HiRes perl-tests  cpan perl-Time-HiRes    -y
yum install -y libaio libaio-devel glibc libnsl
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

安装oracle 客户端

rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.2-basiclite-12.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.2-jdbc-12.2.0.1.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

如果该节点有安装过相应的rpm包,安装无法进行覆盖,可以尝试重建安装该包或者升级

rpm --rebuilddb oracle-instantclient12.2-tools-12.2.0.1.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient12.2-tools-12.2.0.1.0-1.x86_64.rpm
  • 1.
  • 2.

编辑环境变量
ORACLE_HOME使用find 指令查找对应的client安装的路径,按照以下规格进行填写

export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export PATH=$ORACLE_HOME/bin:$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_USERID=system/system@vm111:1521/orcl

source /etc/profile
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

安装DBD包
DBI-1.643\DBD-Oracle-1.90\DBD-Pg-3.18.0\ora2pg-24.3
讲对应的包上传到同一路径下
版本号对应,直接copy批量执行以下脚本

for file in *.tar.gz; do
  tar -zxvf "$file"
done

cd DBI-1.643/
perl Makefile.PL  
make && make test && make install 

cd ../DBD-Oracle-1.90
perl Makefile.PL -l
make
make install
cd ../DBD-Pg-3.18.0
perl Makefile.PL
make && TEST_SIGNATURE=1 make test   && make install 

cd ../ora2pg-24.3/
perl Makefile.PL
make && make install
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

topic:在安装DBD-Oracle-1.90,可能会出现找不到对应的demo.mk文件,主要是环境变量配置有误,检查ORACLE_HOME环境变量是否准确。也可以使用以下指令用于指定

perl Makefile.PL -m /usr/share/oracle/12.2/client64/demo/demo.mk
	make && make test && make install
  • 1.
  • 2.

检验安装是否完成

ora2pg --help
  • 1.

使用以下脚本检验DBD包安装是否完成。

perl 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;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

ora2pg使用教程_oracle

配置前oracle需要知道的信息

查看Oracle字符集
SELECT value
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';

查看sid 
SELECT name
FROM v$database;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

ora2pg使用教程_oracle_02

ora2pg安装之后会在 /etc/ora2pg/路径下给出配置参数列表ora2pg.conf.dist。

公众号 BigDataTechnology 后台回复: ora2pg 赠送ora2pg参数解释中文版以及安装集成包

ora2pg使用教程_perl_03

ora2pg需要使用

需要配置导出DDL的ddl.conf文本 和导出data的data.conf配置参数

ora2pg.ddl 配置如下,

RACLE_HOME /usr/lib/oracle/12.2/client64
ORACLE_DSN dbi:Oracle:host=10.0.0.112;sid=orcl;port=1521
ORACLE_USER system
ORACLE_PWD 123456
NLS_NCHAR AL32UTF8
SCHEMA DIP
USER_GRANTS 1 
DEBUG 1
ORA_INITIAL_COMMAND commit 
EXPORT_SCHEMA 1 
CREATE_SCHEMA 1
COMPILE_SCHEMA 0 
TYPE copy
SKIP fkeys ukeys checks 
DISABLE_COMMENT 0 
EXTERNAL_TO_FDW 1 
TRUNCATE_TABLE 0 
USE_TABLESPACE 0 
REORDERING_COLUMNS 0 
CONTEXT_AS_TRGM 0 
FTS_INDEX_ONLY 1 
USE_UNACCENT 0 
USE_LOWER_UNACCENT 0 
DATADIFF 0 
DATADIFF_UPDATE_BY_PKEY 0 
DATADIFF_DEL_SUFFIX _del 
DATADIFF_UPD_SUFFIX _upd 
DATADIFF_INS_SUFFIX _ins 
DATADIFF_WORK_MEM 256 MB 
DATADIFF_TEMP_BUFFERS 512 MB 
KEEP_PKEY_NAMES 0 
PKEY_IN_CREATE 0 
FKEY_ADD_UPDATE never 
FKEY_DEFERRABLE 0 
DEFER_FKEY 0 
DROP_FKEY 0 
DISABLE_SEQUENCE 0 
DISABLE_TRIGGERS 1 
PRESERVE_CASE 0 
INDEXES_RENAMING 0 
USE_INDEX_OPCLASS 0 
PREFIX_PARTITION 0 
PREFIX_SUB_PARTITION 1 
RENAME_PARTITION 1
PARTITION_EXPORT 1
DISABLE_PARTITION 0 
WITH_OID 0 
ORA_RESERVED_WORDS audit,comment,references 
USE_RESERVED_WORDS 0 
DISABLE_UNLOGGED 1 
PG_DSN dbi:Pg:dbname=postgres;host=10.0.0.141;port=5432
PG_USER postgres
PG_PWD postgres
PG_VERSION 16.2 
OUTPUT ddl.sql 
OUTPUT_DIR /home/postgres/output/ 
FILE_PER_CONSTRAINT 0 
FILE_PER_INDEX 0 
FILE_PER_FKEYS 0 
PG_VERSION 16
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.

ora2pg.data配置将TYPE 的值改为copy,虽然其支持insert 导出 但是copy的效率会更高

RACLE_HOME /usr/lib/oracle/12.2/client64
ORACLE_DSN dbi:Oracle:host=10.0.0.112;sid=orcl;port=1521
ORACLE_USER system
ORACLE_PWD 123456
NLS_NCHAR AL32UTF8
SCHEMA DIP
USER_GRANTS 1 
DEBUG 1
ORA_INITIAL_COMMAND commit 
EXPORT_SCHEMA 1 
CREATE_SCHEMA 1
COMPILE_SCHEMA 0 
TYPE TABLE,PARTITION
SKIP fkeys ukeys checks 
DISABLE_COMMENT 0 
EXTERNAL_TO_FDW 1 
TRUNCATE_TABLE 0 
USE_TABLESPACE 0 
REORDERING_COLUMNS 0 
CONTEXT_AS_TRGM 0 
FTS_INDEX_ONLY 1 
USE_UNACCENT 0 
USE_LOWER_UNACCENT 0 
DATADIFF 0 
DATADIFF_UPDATE_BY_PKEY 0 
DATADIFF_DEL_SUFFIX _del 
DATADIFF_UPD_SUFFIX _upd 
DATADIFF_INS_SUFFIX _ins 
DATADIFF_WORK_MEM 256 MB 
DATADIFF_TEMP_BUFFERS 512 MB 
KEEP_PKEY_NAMES 0 
PKEY_IN_CREATE 0 
FKEY_ADD_UPDATE never 
FKEY_DEFERRABLE 0 
DEFER_FKEY 0 
DROP_FKEY 0 
DISABLE_SEQUENCE 0 
DISABLE_TRIGGERS 1 
PRESERVE_CASE 0 
INDEXES_RENAMING 0 
USE_INDEX_OPCLASS 0 
PREFIX_PARTITION 0 
PREFIX_SUB_PARTITION 1 
RENAME_PARTITION 1
PARTITION_EXPORT 1
DISABLE_PARTITION 0 
WITH_OID 0 
ORA_RESERVED_WORDS audit,comment,references 
USE_RESERVED_WORDS 0 
DISABLE_UNLOGGED 1 
PG_DSN dbi:Pg:dbname=postgres;host=10.0.0.141;port=5432
PG_USER postgres
PG_PWD postgres
PG_VERSION 16.2 
OUTPUT ddl.sql 
OUTPUT_DIR /home/postgres/output/ 
FILE_PER_CONSTRAINT 0 
FILE_PER_INDEX 0 
FILE_PER_FKEYS 0 
PG_VERSION 16
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.

执行ora2pg,一次导出对应的DDL和DATA

ora2pg -c ora2pg.ddl 
ora2pg -c ora2pg.data
  • 1.
  • 2.

ora2pg使用教程_oracle_04

公众号 BigDataTechnology 后台回复: ora2pg 赠送ora2pg参数解释中文版以及安装集成包