今回の投稿ではOra2PgをCentOS8で使用できる状態にするまでの構築手順を紹介します。
Ora2PgはOracleやMySQLデータベースに格納されているデータをPostgreSQLで再現させることのできるデータマイグレーションツールです。
Ora2Pgを使用するために必要なインストーラー、パッケージのインストールおよびサーバで必要な設定を網羅しておりますので、Ora2Pgの環境構築が上手くできない方は参考にしてください。
本手順は2019年1月18日にリリースされたOra2Pg V20.0を利用しています。
構築環境
CentOS Linux release 8.1.1911
初期構築状態の状態(ソフトウェアの選択:サーバー(GUI 使用))
インターネット接続可能
インストーラー
Ora2Pgを利用するために事前にダウンロードしておきたいインストーラー
■Oracle Instant Client
https://www.oracle.com/technetwork/jp/topics/index-099943-ja.html
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-jdbc-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
■DBD-Oracle
https://metacpan.org/release/DBD-Oracle
DBD-Oracle-1.80.tar.gz
■Ora2Pg
https://github.com/darold/ora2pg/releases
ora2pg-20.0.zip
■DynaLoader.pm
https://sourceforge.net/projects/perlce/files/perlce/perl-582-1/DynaLoader.pm/download?use_mirror=tenet&download=&failedmirror=kent.dl.sourceforge.net
DynaLoader.pm
サーバの設定
-既存インストールパッケージのアップデートを実施する。
# dnf upgrade
-SELINUXを無効化する。
# vi /etc/selinux/config
以下の通り、内容を編集し上書き保存する。
【前】
SELINUX=enforcing
【後】
#SELINUX=enforcing
SELINUX=Disabled
-Development Toolsをインストールする。
# dnf groupinstall “Development Tools”
-SELINUXの無効化設定を反映させるためにサーバを再起動する。
# shutdown -r now
Perl系パッケージをインストールする
-Perl系パッケージをインストールする。
# dnf install -y perl-ExtUtils-MakeMaker perl-DBI perl-CPAN perl-open
-libnslをインストールする。
# dnf install libnsl
インストーラーの配置
-インストーラー配置用ディレクトリを作成する。
# mkdir /tmp/ora2pg
※2020/3/23 追記
上記のようにtmpディレクトリに配置した場合に、tmpディレクトリに配置したインストーラーが時間が経過した際に消えてしまい、ora2pgが動作しなくなるという残念な結果に。
対策として /usr/local/src にインストーラーを配置し、そこで作業します。
/tmpでは作業せず、/usr/local/src 上で実施してください。
-インストーラーを以下ディレクトリに配置する。
/usr/local/src
-WinSCP等のファイル転送ツールでOra2PgをインストールするCentOS8サーバにインストーラーを転送する。
Oracle Instant Clientインストール
-Oracle Instant Clientをインストールする。
# cd /usr/local/src
# rpm -ivh oracle-instantclient12.2-basic-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
-Oracle環境変数を設定する。
# vi ~/.bash_profile
以下の内容で保存する。
export LD_LIBRARY_PATH=’/usr/lib/oracle/12.2/client64/lib’
export ORACLE_HOME=’/usr/lib/oracle/12.2/client64′
export C_INCLUDE_PATH=’/usr/include/oracle/12.2/client64′
-環境変数設定を反映させる。
# source ~/.bash_profile
DBD-Oracleのインストール
-DBD-Oracle-1.80.tar.gzを解凍する。
# tar zxvf DBD-Oracle-1.80.tar.gz
-解凍したディレクトリへ移動する。
# cd ./DBD-Oracle-1.80
-DynaLoader.pmをDBD-Oracle-1.80ディレクトリにコピーする。
# cp ../DynaLoader.pm ./.
-Makefileを作成する。
# perl Makefile.PL
-Makefileでインストールする。
# make install
-DBIモジュールをインストールする。
# cpan DBI
-DBD::Oracleモジュールをインストールする。
# cpan DBD::Oracle
Ora2Pgのインストール
-ora2pg-20.0.zipを解凍する。
# cd /usr/local/src
# unzip ora2pg-20.0.zip
-解凍したディレクトリへ移動する。
# cd ./ora2pg-20.0
-Makefileを作成する。
# perl Makefile.PL
-Ora2Pgをインストールする。
# make && make install
Ora2Pgの設定
-Ora2Pgの設定ファイルがあるディレクトリへ移動する。
# cd /etc/ora2pg
-ora2pg.conf.distをコピーする。
# cp ora2pg.conf.dist ora2pg.conf
※ora2pg.conf.distを実行しようとすると以下エラーメッセージで怒られます。
FATAL: you must set ORACLE_DSN in ora2pg.conf or use a DDL input file.
Aborting export…
-ora2pg.confを編集する。
# vi ora2pg.conf
以下の通り、内容を編集し上書き保存する。
【前】
ORACLE_DSN dbi:Oracle:host=mydb.mydom.fr;sid=SIDNAME;port=1521
ORACLE_USER system
ORACLE_PWD manager
【後】
ORACLE_DSN dbi:Oracle:host=orahost.local;sid=ORCL;port=1521
ORACLE_USER system
ORACLE_PWD ***********
SCHEMA test
←検証用にTESTスキーマを作成したので今回はこのスキーマからデータをエクスポートします。
Ora2Pgの実行
-Ora2Pgを実行する。
# ora2pg -c /etc/ora2pg/ora2pg.conf
カレントディレクトリにoutput.sqlが生成されます。
output.sqlを実行することでPostgreSQL上にOracleデータベースのデータを復元することができます。
PostgreSQLの準備ができていないので次回以降の投稿でOra2Pgの使い方をもう少し詳しく紹介できればと思います。
ちなみに今回はエクスポートのタイプをTABLE(デフォルト値)として出力したため、
output.sqlの中身は以下のようになります。
— Generated by Ora2Pg, the Oracle database Schema converter, version 20.0
— Copyright 2000-2019 Gilles DAROLD. All rights reserved.
— DATASOURCE: dbi:Oracle:host=orahost.local;sid=ORCL;port=1521
SET client_encoding TO ‘UTF8’;
\set ON_ERROR_STOP ON
CREATE TABLE emp (
empno varchar(10) NOT NULL,
empname varchar(50),
empnamekana varchar(50),
gender_f varchar(3),
birth_day timestamp,
phone_number varchar(15),
mail varchar(50),
postal_code varchar(15),
address1 varchar(90),
address2 varchar(80)
) ;
ALTER TABLE emp ADD PRIMARY KEY (empno);
公式
Ora2Pg : Migrates Oracle to PostgreSQL
エラー特集(Ora2Pg実行時)
Ora2Pgの構築手順は複雑に思えます。(少なくとも私には)
Ora2Pgの環境を整える際に遭遇したエラーについて簡単ではありますが記載していきます。
-libnsl.so.1に関するエラー
# ora2pg -c /etc/ora2pg/ora2pg.conf
install_driver(Oracle) failed: Can’t load ‘/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so’ for module DBD::Oracle: libnsl.so.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 193.
at (eval 14) line 3.
Compilation failed in require at (eval 14) line 3.
Perhaps a required shared library or dll isn’t installed where expected
at /usr/local/share/perl5/Ora2Pg.pm line 1491.
上記エラーは以下のコマンドで対処する。
# dnf install lib
-Firewalldの問題
# ora2pg -c /etc/ora2pg/ora2pg.conf
WARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11
DBI connect(‘host=XXX.XXX.XXX.XXX;sid=ORCL;port=1521′,’soe’,…) failed: ORA-12543: TNS:destination host unreachable (DBD ERROR: OCIServerAttach) at /usr/local/share/perl5/Ora2Pg.pm line 1624.
FATAL: 12543 … ORA-12543: TNS:destination host unreachable (DBD ERROR: OCIServerAttach)
Aborting export…
上記エラーはOracleデータベースサーバー側のFirewalldの問題だったため、ポートを開放して解決。
コメント