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