Amazon Linux 2023 上で Ora2Pg 環境を構築する手順


はじめに

環境構築がひどく面倒な Ora2Pg を Amazon Linux 2023 で利用するための手順です。

Windows 環境の場合は以下を参照してください。

blog1.mammb.com

Windows の場合、テーブルのエクスポートが並列実行できないので、Linux で行うことをお勧めします。


oracle-instantclient のインストール

Oracle 21 だと、Ora2Pg がバージョン認識できなかったので、19 を使用します。

19 をインストールする場合は、事前に libnsl を入れておかないとエラーになるので、libnsl をインストールします。

sudo yum install -y libnsl

oracle-instantclient をインストールします。

cd /tmp/
curl -OL https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm
curl -OL https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm
curl -OL https://download.oracle.com/otn_software/linux/instantclient/1920000/oracle-instantclient19.20-devel-19.20.0.0.0-1.x86_64.rpm
sudo rpm -Uvh oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64.rpm
sudo rpm -Uvh oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64.rpm
sudo rpm -Uvh oracle-instantclient19.20-devel-19.20.0.0.0-1.x86_64.rpm

oracle-instantclient 向けの環境変数を設定します。

cd;
echo "export ORACLE_HOME=/usr/lib/oracle/19.20/client64/" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=/usr/lib/oracle/19.20/client64/lib" >> ~/.bashrc
echo "export TNS_ADMIN=/usr/lib/oracle/19.20/client64/network/admin" >> ~/.bashrc
echo "export PATH=/usr/sbin:$PATH:/usr/lib/oracle/19.20/client64/bin" >> ~/.bashrc
source ~/.bashrc

tnsnames.ora を作成しておきます。

自身の環境用のエンドポイントとSID定義(たいていORCL)を定義します。

export RDS_ORACLE_END_POINT=*****
export ORA_TNS_SID=*****

tnsnames.ora を作成します。

sudo mkdir -p $ORACLE_HOME/network/admin
cd $ORACLE_HOME/network/admin
sudo touch tnsnames.ora
sudo chmod -R 757 tnsnames.ora
sudo echo "${ORA_TNS_SID}=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ${RDS_ORACLE_END_POINT})(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ${ORA_TNS_SID})))" > tnsnames.ora

接続確認しておきましょう。

export ORA_USERNAME=*****
export ORA_PASSWORD=*****
/usr/lib/oracle/19.20/client64/bin/sqlplus -s ${ORA_USERNAME}/${ORA_PASSWORD}@${ORA_TNS_SID} <<< "select CURRENT_TIMESTAMP from dual;"

現在日時が表示されればOKです。


perl CPAN と必要モジュールのインストール

perl-CPAN をインストールします。

sudo yum install -y perl-CPAN
echo "export PERL_MM_USE_DEFAULT=1" >> ~/.bashrc
echo "export PERL_INSTALL_ROOT=/usr/lib64/perl5" >> ~/.bashrc
source ~/.bashrc

perl-DBI 他必要パッケージをインストールします。

sudo yum -y install perl-DBI
sudo yum -y install perl-YAML
sudo yum -y install gcc
source ~/.bashrc

Test::More モジュールを cpan でインストールします。

cpan
cpan[1]> look Test::More

perl Makefile.PL
sudo make
sudo make install

exit
exit

DBD::Oracle モジュールを cpan でインストールします。

cpan
cpan[1]> look DBD::Oracle

perl Makefile.PL
sudo make
sudo make install

exit
exit


Ora2Pg インストール

Github のリポジトリから Ora2Pg を取得してインストールします。

cd;
curl -OL https://github.com/darold/ora2pg/archive/refs/tags/v24.3.tar.gz

sudo gunzip v24.3.tar.gz
sudo tar xvf v24.3.tar
cd ora2pg-24.3/
sudo perl Makefile.PL
sudo sudo make
sudo make install
source ~/.bashrc


Ora2Pg の設定

Ora2Pg では設定ファイルを指定しない場合は、/etc/ora2pg/ora2pg.conf が自動的に使われます。

直接 /etc/ora2pg/ora2pg.conf を作成しても良いですが、/etc/ora2pg/ora2pg.conf.dist に生成された設定ファイルをコピーして編集しましょう。

cd;
cp /etc/ora2pg/ora2pg.conf.dist ora2pg.conf
vi /etc/ora2pg/ora2pg.conf

主に以下の項目を設定します。

# Set the Oracle home directory
ORACLE_HOME     /usr/lib/oracle/19.20/client64/

# Set Oracle database connection (datasource, user, password)
ORACLE_DSN      dbi:Oracle:host=<my-host>;sid=ORCL;port=1521
ORACLE_USER     <my-user>
ORACLE_PWD      <my-password>

# Oracle schema/owner to use
SCHEMA      <schema>

REPLACE_AS_BOOLEAN  NUMBER:1

PARALLEL_TABLES 4

REPLACE_AS_BOOLEAN では、Oracle の NUMBER(1,0) を boolean に変換する設定。

PARALLEL_TABLES でテーブルエクスポートの並列数を設定。


Ora2Pg によるエクスポート

テーブル定義のエクスポートは以下のように行います。

mkdir oracle-tables
/usr/local/bin/ora2pg -t TABLE -c ora2pg.conf -b oracle-tables

同様にシーケンスやViewなども同様になります。

mkdir oracle-sequence
mkdir oracle-views
ora2pg -t SEQUENCE -c ora2pg-kronos.conf -b oracle-sequence
ora2pg -t VIEW -c ora2pg-kronos.conf -b oracle-views

テーブルデータのエクスポートは以下のようになります。

mkdir oracle-data
/usr/local/bin/ora2pg -t COPY -c ora2pg.conf -b oracle-data

以下の要領で postgresql クライアントでデータ投入すれば良いです。

psql -U postgres < ~/oracle-data/output.sql


その他以下も参考にしてください。

https://blog1.mammb.com/entry/2023/08/11/090000