【Ora2Pg】PostgreSQLへOracleのテーブルをマイグレーションしよう

ora2pg_postgresql_import Linux

以前の投稿でOra2PgをCentOS8にインストールしました。
今回の投稿ではインストールしたOra2Pgを使用してOracleのテーブルをPostgreSQLへマイグレーションしていきたいと思います。
Ora2Pgの構築が住んでいない場合は以前の投稿を参照してください。

環境情報

■CentOS8
Ora2Pg Version:20.0

■RHEL7.4
Oracle Database Version:12.2

■Windows Server 2016
PostgreSQL Version:12.2

Oracle Databaseへの接続情報入力

前回の復習も踏まえて、まずは/etc/ora2pg/ora2pg.confの設定を見ていきます。
見るべきところは以下の項目です。
「 # Set Oracle database connection (datasource, user, password)」の下にあります。

ORACLE_DSN  host,sid,portの項目にOracleデータベースへの接続情報を入力します。ORACLE_USER  エクスポートするOracleユーザを指定します。
ORACLE_PWD  Oracleユーザのパスワードを入力します。

私が構築したOracleデータベースですと以下のように記載します。

ORACLE_DSN      dbi:Oracle:host=orahost.local;sid=ORCL;port=1521
ORACLE_USER     system
ORACLE_PWD      **********
SCHEMA           test

SCHEMAという項目を追加しました。
SCHEMAを指定することでOra2Pgからマイグレーションする対象データを絞ります。

Ora2Pgの実行

以下のようにora2pg –c /etc/ora2pg/ora2pg.confでエクスポートを実行することができます。
次手順でOra2Pgを使用してOracleデータベースからデータをエクスポートしますが他にもオプションを使用してエクスポートします。

# ora2pg -c /etc/ora2pg/ora2pg.conf

[========================>] 1/1 tables (100.0%) end of scanning.[========================>] 1/1 tables (100.0%) end of table export.

Oracleデータベースからテーブル構造とデータをエクスポート

テーブル構造をエクスポートするには以下を入力し、[Enter]を押下します。

# ora2pg -c /etc/ora2pg/ora2pg.conf -t TABLE -o output_table.sql
~実行結果~
[========================>] 1/1 tables (100.0%) end of scanning.[========================>] 1/1 tables (100.0%) end of table export.

テーブルのデータをエクスポートするには以下を入力し、[Enter]を押下します。

# ora2pg -c /etc/ora2pg/ora2pg.conf -t COPY -o output_data.sql
~実行結果~
[========================>] 1/1 tables (100.0%) end of scanning.[========================>] 50/50 rows (100.0%) Table EMP (50 recs/sec)[========================>] 50/50 total rows (100.0%) - (1 sec., avg: 50 recs/sec).
[========================>] 50/50 rows (100.0%) on total estimated data (1 sec., avg: 50 recs/sec)

上記のOra2Pgコマンドを実行するとカレントディレクトリに output_table.sqlとoutput_data.sqlがエクスポートされます。
エクスポートしたSQLファイルをPostgreSQLデータベース上で実行するとマイグレーション完了となります。

上記では以下オプションを指定しております。

-t でエクスポートするTYPE を変更しています。
  TABLEを指定することでテーブル構造をエクスポートします。
  COPYを指定することでコピーステートメントとしてデータをエクスポートします。

-o でエクスポートされるSQLファイルの名前を変更しています。

永続的に変更しておきたいのであれば(例えばエクスポート形式をTABLEにしたいなど)
ora2pg.confの内容を書き換えて保存します。

オプション -t は赤枠の「TABLE」の部分を指します。
このTYPEを変更することでエクスポートするデータを制御します。

オプション -o は赤枠の「output.sql」となっている部分を指します。
赤枠の通り、-oを省略する場合は「output.sql」としてSQLファイルが生成されます。

PostgreSQLデータベースへのインポート

前項でエクスポートした output_table.sqlとoutput_data.sql をPostgreSQLデータベースにインポートします。
特殊な手順を用いることはなく、ほかのSQLファイルを実行するようにPostgreSQLデータベースにログインし、SQLファイルを実行します。

Ora2PgでエクスポートしたデータをインポートするデータベースをPostgreSQL上に作成しておきます。

# create database ora2pg;

SQLファイルを配置したディレクトリに移動し、作成したデータベース ora2pgにログインします。

> cd .\desktop
> psql -U postgres -d ora2pg
ユーザー postgres のパスワード:

output_table.sql をインポートします。

# \i output_table.sql
~出力結果~
SET
CREATE TABLE
ALTER TABLE

output_data.sql をインポートします。

# \i output_data.sql
~出力結果~
BEGIN
COPY 50
COMMIT

データベースora2pgにテーブルが存在するか確認します。

# select * from emp;

思いっきり文字化けしていますね。
でもご安心ください、文字化けを解消する手はありますので。
(手順は後日投稿します。)

PgAdmin4から見てみましょう。

PgAdmin4から確認すると文字化け等はなく問題なさそうですね。

※本データはツールで生成した架空のデータとなります。実際の人物、団体とは一切関係ございません。

以下、PostgreSQLデータベースへのインポートの流れです。

ora2pgでエクスポートしたSQLファイルをPostgreSQLにインポートする。

今回の投稿は如何だったでしょうか。
今回は1テーブルのみでしたが実際の作業となると何十~何百テーブルをエクスポートし、インポートしないといけません。
インポート時は外部キーやプライマリキーなどを考慮し、テーブルをインポートする順番にも気を遣う必要があります。
今回紹介したのは基礎中の基礎なのでもう少し詳細なOra2Pgの使い方を別で投稿していきたいと考えています。(需要があれば。)

コメント

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