TOP>企業情報>コラム>技術情報>EDB Migration ToolkitでOracle Databaseから簡単移行

EDB Migration ToolkitでOracle Databaseから簡単移行

EDB Postgres

昨今、仮想インフラやクラウドの利用増加に伴い、Oracle Databaseからの置き換え先としてEDB Postgresを採用する企業が増えています。本記事では、EDB Postgresに標準実装されているデータベース移行ツール「EDB Migration Toolkit」を使ったOracle DatabaseからEDB Postgresへの移行方法についてご紹介します。


EDB Postgresの採用傾向


EDB Postgresは企業向けデータベースに求められる機能を強化する形でPostgreSQLを進化させたデータベースです。サブスクリプション・ライセンスと呼ばれる年単位のサポート付き使用権で提供されており、ビジネス規模やシステム負荷に応じて必要な数のライセンスを購入することができます。また、データベースサーバに割り当てられたCPUコアをライセンス対象としているため、仮想インフラやクラウド環境で利用しやすく、図1にあるように当社のお客様実績では、仮想環境が約半数を占めています。また、データベースサーバに8コア以上を割り当てているシステムが全体の46%を占めており、EDB Postgresがさまざまな規模のシステムで利用されていることが分かります。

図1:EDB Postgresの稼働環境と利用CPUコア数

図1:EDB Postgresの稼働環境と利用CPUコア数

主要エディションである「EDB Postgres Enterprise」はバックアップや監視など運用に必要なツール群の提供に加え、Oracle Databaseとの高い互換性※1を持っています。当社の調査ではSQLやPL/SQLに対する互換性は図2にあるようにそれぞれ90%、85%という高い割合であることを確認しています。また、当社のお客様事例ではOracle Databaseで作られた約1,400本のストアドプログラムのうち、書き換えが必要なのはわずか50本で、全体の97%が再利用可能という結果が得られた実績があります。

図2:EDB Postgres Enterpriseの特長とOracleプログラムの互換性

図2:EDB Postgres Enterpriseの特長とOracleプログラムの互換性

このOracle Databaseとの高い互換性によって、移行にかかるコストと工数を小さく抑えながらOracle Databaseのノウハウが有効活用できる点が評価され、コストメリットの大きいOracle Database Enterprise Editionからの置き換え先としてEDB Postgresを採用する企業が増えているのです。

図3:移行元のデータベース

図3:移行元のデータベース

※1 SQLやPL/SQL構文をはじめ、トランザクション制御、各種ユーティリティなどOracle Database互換を中心としたEDB Postgresのエンタープライズ向け機能の資料をこちらよりダウンロードいただけます。

移行性のチェック段階から活用できるEDB Migration Toolkit


データベース移行では、まず移行アセスメントを実施して移行難易度やリスクを事前に把握することが重要です。アセスメントでは、システム要件や構成などの情報を机上で評価した後、対象システムから抽出したサンプルデータとプログラムを使って移行可否を確認します。移行先がこれまで利用してきたデータベースと異なる場合、サンプルデータとプログラムを使った移行可否の確認は、データ定義の変更やプログラムの書き換えがどの程度発生するのかを把握するために必要不可欠な要素と言えます。この作業はスクリプト化して実施することもできますが、EDB Postgresの標準機能として提供されるデータベース移行ツール「EDB Migration Toolkit(MTK)」を利用すれば、図4のようにオブジェクト定義や文字コード変換だけでなく、プログラムの移行性も簡単に把握することができます。MTKがどのような機能をもっているのか、もう少し詳しく見ていきましょう。

図4:MTKによる移行性のチェック

図4:MTKによる移行性のチェック

EDB Migration Toolkitとは


「EDB Migration Toolkit(MTK)」はOracle Database、SQL Server、Sybase、MySQL、PostgreSQLからEDB Postgresへの移行やEDB Postgres同士の移行で利用することができます。2種類の移行方式をサポートしており、「オンライン移行」は移行元から移行先データベースへ直接移行する方式で、「オフライン移行」は移行元の定義情報やデータをスクリプトファイルとして出力し、そのスクリプトを移行先で実行します。データベース全体の一括移行はもちろんですが、定義あるいはデータのみ、またスキーマ単位など範囲を限定して移行することもできます。移行元がOracle Databaseの場合、図5にあるようにパーティションを含むテーブルやインデックス、ビュー、さらにストアド・プロシージャやパッケージなど主要オブジェクトはすべて移行対象になっています。

図5:移行対象のOracle Databaseのオブジェクト

図5:移行対象のOracle Databaseのオブジェクト

事前準備はJDBC Driverの配置と定義ファイルの編集のみ


MTKは、EDB Postgresをインストールする際には図6のようにコンポーネントの1つとしてデフォルトで選択されており、データベースモジュールと一緒にインストールされます。そのため個別にインストールするという作業は必要ありません。

図6:EDB Postgresインストール時のコンポーネント選択

図6:EDB Postgresインストール時のコンポーネント選択

MTKではEDB Postgresサーバから移行元のデータベースへ接続するためにJDBCドライバを利用します。Oracle Databaseからの移行ではOracle JDBC Thinドライバを入手し※2、EDB Postgresサーバ上の「<JAVAホームディレクトリ>/jre/lib/ext」へ配置します。

※2 JDBCドライバのダウンロードサイトへのリンクは、EnterpriseDB社のホームページのThird Party JDBC Driversページ をご参照ください。

そして、移行元と移行先データベースの接続情報を「<EDB Postgresホームディレクトリ※3>/edbmtk/etc/toolkit.properties」ファイルへ定義します。この2つの作業だけでMTKの事前準備は完了です。以下はOracle Database、EDB Postgresそれぞれの設定例です。

【表1:データベース接続情報の定義】

【表1:データベース接続情報の定義】

※3 EDB Postgresをデフォルトでインストールした場合のホームディレクトリは、「/opt/PostgresPlus」です。

スキーマの1つを移行してみよう


MTKは「<EDB Postgresホームディレクトリ>/edbmtk/bin/ runMTK.sh」スクリプトを実行することで動作します。スクリプト実行時、“-sourcedbtype“”-targetdbtype”パラメータそれぞれに移行元と移行先データベースを設定しますが、Oracle DatabaseからEDB Postgresへの移行ではパラメータを省略することができます。

【表2:runMTK.shスクリプトの実行】

【表2:runMTK.shスクリプトの実行】

MTKによる移行の基本的な流れは以下の4ステップです。

では、Oracle Databaseにあるスキーマの1つをオンライン移行してみましょう。今回は、移行元と移行先のデータベース、対象スキーマを以下の前提としています。

図7:移行例の前提情報

図7:移行例の前提情報

1.toolkit.propertiesを編集


書き込み権限が付与されているrootユーザでファイルを編集、保存します。

書き込み権限が付与されているrootユーザでファイルを編集、保存


2.MTKを実行し、オブジェクト定義とデータを移行


runMTK.sh実行時に“kka_test”スキーマを指定します。

runMTK.sh実行時に“kka_test”スキーマを指定


MTK実行中はオブジェクトやデータの移行状況が標準出力されるため、進み具合を適宜確認できます。

進み具合を適宜確認


3.移行ログを確認


MTK実行時に標準出力された移行状況は、移行ログとして「/root/.enterprisedb/migration-toolkit/logs」に格納されます。ログを確認することで、オブジェクトごとに移行元と移行先の数が同一か、また移行できなかったオブジェクトのエラー内容など詳細情報の把握に役立ちます。

以下の例では、4つのプロシージャのうち、3つの移行が成功しています。移行できなかったプロシージャは“PRO2”で、PL/SQLの事前定義例外“STORAGE_ERROR”が認識できないことによりエラーとなっています。“STORAGE_ERROR”はメモリ不足やメモリ破損が発生した場合の例外で、PostgreSQLの“OUT_OF_MEMORY”に置き換えることで対処します。尚、Oracle Databaseのプログラムで一般的に広く利用される“DUP_VAL_ON_INDEX”や“NO_DATA_FOUND”、“OTHERS”などの例外はEDB Postgresで互換性をもっているため※4、置き換えなくそのまま利用することができます。Oracle Database互換の範囲はバージョンごとに拡張しているため、最新バージョンをご利用ください。

このようにMTKの移行ログには該当箇所の行番号やコードも出力されるため、比較的簡単に事象を特定し、代替策を検討することができます。また、「移行概要情報」にはオブジェクトごとに移行元との個数が提示されるため、その情報を元にオブジェクト数に差異がないかどうかを確認します。

移行ログを確認


※4 PL/SQL構文やデータベース組み込みパッケージ(例:DBMS_SQL)など、EDB Postgresが持つOracle Database互換機能の詳細は、製品マニュアル「Database Compatibility for Oracle Developer's Guide 」で確認いただけます。

4.移行済みオブジェクトを確認


移行元と移行先から移行オブジェクトの詳細を抽出し、比較します。ここでは、テーブルの一覧と“EMP”テーブルおよび“PRO1”プロシージャの定義を比較します。尚、EDB PostgresにはOracle DatabaseのSQL*Plusと高い互換性を持つ「EDB*Plus」と呼ばれるクライアントユーティリティがあり、SQL*Plusと同じ操作で確認することができます。

図8:移行対象のテーブル一覧

図8:移行対象のテーブル一覧

図9:EMPテーブルの定義を確認

図9:EMPテーブルの定義を確認

図10:PRO1プロシージャの定義を確認

図10:PRO1プロシージャの定義を確認

MTKは事前設定も簡単で、コマンド1つでOracle Databaseの主要オブジェクトを移行することができます。また移行元とのオブジェクトの比較からも分かるように、EDB PostgresのOracle Database互換はデータ型やストアドプログラム、データディクショナリの実装など多岐にわたります。この互換性の高さとMTKでの移行の容易性をEDB Postgresの無償評価版※5を使って、ぜひ体感してみませんか。

※5 評価版ダウンロードへお進みください。


執筆者紹介

高瀬洋子

高瀬 洋子(Youko Takase)

株式会社アシスト データベース技術本部 技術開発部

アシスト入社後、Oracle Databaseのサポート業務を経て、2009年よりPostgreSQL、EDB Postgresのサービス立ち上げに参画。「PostgreSQLなら高瀬に聞こう」と社内外から言ってもらえる存在となることを目標に日々活動。2014年4月よりイギリスに拠点を移し、EDB Postgresの啓蒙活動と顧客対応の後方支援を担当。

高瀬の紹介記事はこちら

関連製品/サービス


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る