ora2pg を使ってoracleのテーブル定義をpostgres用に変換してみた(windows)


背景

oracleに作成されたテーブルをpostgresに移動しようとしたところ、型の違いなどで単純にoracleのにテーブル作成したときのddl実行では移動させられなかった。
ora2pgというものを使えば、ある程度自動で変換してくれるとのことだったので、ora2pgを使ってみました。

本記事は、【windows】【データベース移行】oracleからpostgresqlへ
をもとに作成しています、リンク先の手順で、途中私が詰まってしまったところに対して
補足で解説を入れていきたいと思います。

手順

1.perl環境のインストール

Strawberry Perl for Windowsをインストール
この時32bitと64bitどちらを選択するかはoracleのbitに合わせる必要があります。
私は、oracleが32bitなのに64bitをインストールしてしまい、子1時間ほど苦戦しました。

コマンドプロンプトで

perl --version

を実行、バージョンが出てきたらOK

2.関連モジュールのインストール

コマンドプロンプトで以下を実行。

CPAN install Time-Hires
CPAN install DBI
CPAN install DBD::Oracle

私の環境ではproxyを通す必要があったのですが、proxyもうまく通せなかったので、
Strawberry Perl+Proxy接続環境でCPANモジュールをインストールする
を参考に、以下のモジュールを直接ダウンロードしてインストールしました。

Time-Hires
DBI
DBDOracle

3.環境変数の追加

以下の環境変数を追加

パス名:ORACLE_HOME
C:\oracle\product\11.2.0\client_1\
パス名:LD_LIBRARY_PATH
C:\oracle\product\11.2.0\client_1\LIB

※この部分リンク先の記事の設定値と異なります。

4.ora2pgのインストール

ora2pgをgitからzipファイルをダウンロードして適当な場所に解凍。
展開したディレクトリまで移動して、perlを使ってインストール

cd C:¥ora2pg-19.0
perl Makefile.PL
gmake
gmake install
ora2pg --version

5.ora2pgの設定

インストールが完了すると、展開したディレクトリ内に[ora2pg_dist.conf]ファイルが出来ているので、コピーして[ora2pg.conf]にリネーム、ファイルを開いて以下の設定を自分の環境に変更する。

ORACLE_HOME [windowsOSに通したパス]
ORACLE_DSN dbi:Oracle:host=[ホスト名]:sid=[sid名(XE等)]
ORACLE_USER [ユーザー名]
ORACLE_PWD [パスワード]
SHEMA [スキーマ名(通常はユーザー名と同じ)]

※ORACLE_HOMEは環境変数に指定したものが勝手に入っています。

設定が完了したら、以下のコマンドを実行して接続確認

ora2pg -c ora2pg.conf -t SHOW_VERSION
Oracle database 11g Release 11.2.0.1.0

6.ora2pgの実行

コマンドプロンプトでora2pg展開ディレクトリに移動し以下のコマンドを実行

ora2pg -c ora2pg.conf

そのまま放置しておくとディレクトリ直下にoutput.sqlというファイルが作成されていて、
その中にスクリプトが記載されていました、必要な部分だけ
postgresで実行して無事作成に成功しました。

参考URL

【windows】【データベース移行】oracleからpostgresqlへ

Strawberry Perl+Proxy接続環境でCPANモジュールをインストールする