SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows で Oracle から PostgreSQL への移行ツール [ora2pg] で移行を実施してみる

without comments

先日の投稿では、Windows で Oracle から PostgreSQL への移行ツール [ora2pg] をインストールしてみる ということで、ツールの実行環境を整えるところまでを実施してみました。

今回の投稿では、実際の移行を実施してみたいと思います。

ora2pg を実行するためには、構成ファイルを作成する必要があることは前回記載しました。
Microsoft の Github でサンプルが構成されており ora2pg.conf.pdf から確認することができます。
そのほかのサンプルについては、次のファイルにも記載されています。

Oracle のサンプルスキーマである HR を使用したマイグレーションを行う場合の設定例が記載されていますので、ファーストステップとしてはこのドキュメントの変更箇所を参考にするとよいかと思います。
それでは実際に移行用のファイルを作成しようと思いますが、Windows 環境で実行する場合は、Windows 10 / Windows Server 2019 で使用することができる「ワールドワイド言語で Unicode UTF-8 を使用」を有効化した方がよさそうです。
(コントロールパネルの地域の設定から変更することができる項目です)
image
日本語が含まれているデータの場合、上記の UTF-8 対応の設定を行っているウィンドウからでないと、次のエラーが発生して、日本語周りの取り込みでエラーになる可能性があります。

psql:C:/Ora2pg/output/COPY_output.sql:282: ERROR:  invalid byte sequence for encoding "SJIS": 0x8d 0x22

日本語環境の Windows の場合はコンソールの言語が CP932 になっており、psql の接続時には Shift-JIS がデフォルトのエンコードとして使用されますが、上記の設定を行った場合は、psql からの接続は UTF-8  で対応ができそうです。
SQL ファイルの中に「\encoding utf8 」を記載して回避はできそうですが、最新の OS であれば、地域設定から UTF-8 に設定をした方が手っ取り早いかもしれません。
(そもそもとして、Linux で実行環境を構築した方が良いのかもしれませんが…。)

ora2pg による移行

ora2pg.conf に Oracle への接続情報やどの種類の情報をエクスポートするかを記載したら、次のようなコマンドで sql ファイルの生成を行います。
(-b のアウトプット先は任意の指定をします)

ora2pg -b c:\ora2pg\Output

 
構成ファイルの内容で Oracle に接続ができる状態になっていれば、次のようなログがコンソールに出力され、
image
指定したディレクトリにファイルが生成されます。

conf に COPY を指定した場合は、データの COPY ステートメントが設定されているファイルが出力されるようになっていますので、スキーマだけでなくデータについてもこのツールで移行することが可能です。
image
このファイルを psql 経由で PostgreSQL に実行すれば移行を行うことができるようになっています。

psql -f "C:\Ora2pg\output\TABLE_output.sql" "host=xxxxx port=5432 dbname=hr user=xxxxxx password=xxxxxx sslmode=require"

 
今回は Azure Database for PostgreSQL に対して HR スキーマのテーブルを移行してみたのですが、サンプルスキーマについては正常に移行することができていそうでした。

image
 

Azure Database Migration Service を使用した移行

Azure の DMS でもテーブルについてはスキーマを含めた形で移行ができるようになっています。
Azure Database for PostgreSQL でのスキーマの設定

Azure Database Migration Service で PostgreSQL のテーブル スキーマを作成することもできます。 このサービスでは、接続されている Oracle ソースのテーブル スキーマにアクセスし、互換性のあるテーブル スキーマを Azure Database for PostgreSQL に作成します。 Azure Database Migration Service によるスキーマの作成とデータの移動が完了したら、Azure Database for PostgreSQL のスキーマ形式を検証して確認してください。
重要
Azure Database Migration Service によって作成されるのはテーブル スキーマだけです。ストアド プロシージャ、パッケージ、インデックスなど、他のデータベース オブジェクトは作成されません。
また、全体の読み込みを実行するため、ターゲット データベース内の外部キーはドロップしてください。 外部キーのドロップに使用できるスクリプトについては、ここの記事の「サンプル スキーマを移行する」セクションを参照してください。 Azure Database Migration Service を使い、全体の読み込みと同期を実行します。

大規模な環境については ora2pg では、テーブル以外のスキーマを移行し、テーブルについては DMS で移行を行うということが可能です。
手順については、上述のドキュメントに記載されている内容に即して、作業をすれば問題ないかと思います。
現時点の制限事項については Oracle から Azure DB for PostgreSQL-Single Server へのオンライン移行に関する既知の問題と移行の制限事項 に記載されています。
現状 Oracle → PostgreSQL への移行については、ハイブリッドモード を使用することができないため、DMS と移行元の Oracle をどのように接続するかが最初に検討する必要のある内容となりますが、DMS と Oracle が接続できれば、次のようにどのテーブルを移行対象とするかを選択することができるようになります。
image
移行先の PostgreSQL にテーブルが存在しない場合は、移行時に自動的に作成されデータの移行が開始されます。

データの移行についてはオンライン移行となっていますので、初回は全体の同期が行われますが、以降は増分データ同期が行われます。
サンプルスキーマをベースにして少し触ってみただけですが、Oracle から PostgreSQL に移行する際にツールを使用した移行方法の基本的な流れがなんとなくわかりました。

Written by Masayuki.Ozawa

3月 5th, 2020 at 6:33 pm

Posted in Oracle,PostgreSQL

Tagged with ,

Leave a Reply