- はじめに
- oracle-instantclient のインストール
- perl CPAN と必要モジュールのインストール
- Ora2Pg インストール
- Ora2Pg の設定
- Ora2Pg によるエクスポート
はじめに
環境構築がひどく面倒な Ora2Pg を Amazon Linux 2023 で利用するための手順です。
Windows 環境の場合は以下を参照してください。
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