【Ora2Pg_V20.0】CentOS8にインストールしてみた

Linux

今回の投稿では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の問題だったため、ポートを開放して解決。

コメント

タイトルとURLをコピーしました