2 SQL翻訳フレームワークの概要

Oracle以外のデータベースと連携するように設計された各種クライアント側アプリケーションは、大幅な変更を行わないとOracle Databaseを対象として使用できません。これは、データベース・テクノロジ・ベンダーによってSQL言語が異なり、ベンダーが異なれば、異なる構文を使用してSQLの問合せや文が表されるためです。

Oracle Database 12cから、SQL翻訳フレームワークという新しいメカニズムが導入されています。クライアント・プログラムのSQL文が、(Oracle以外の) SQL言語からOracle Database SQLコンパイラで使用されるSQL言語に翻訳されます。

Oracle以外のSQL文の翻訳に加え、SQL翻訳フレームワークは、Oracle SQL文を別のOracle文に置き換えてセマンティックやパフォーマンスの問題に対応するために使用できます。このようにすると、クライアント・アプリケーションにパッチを適用せずにアプリケーションの問題を修正できます。

SQL翻訳フレームワークは、SQLトランスレータとSQL翻訳プロファイルという2つの基本コンポーネントで構成されています。

SQLトランスレータ

SQLトランスレータは、Oracleまたはサード・パーティ・ベンダーによって提供されるソフトウェア・コンポーネントで、Oracle Databaseにインストールされます。クライアント・プログラムのSQL文がOracle Database SQLコンパイラで処理される前にそのSQL文を翻訳します。翻訳したSQL文の実行でエラーが発生した場合、Oracle Database SQLコンパイラによって、Oracleエラー・メッセージが生成されます。

SQLトランスレータは、Oracle以外のSQLをOracle SQLに自動的に翻訳するため、既存のクライアント側アプリケーション・コードを大幅に変更することなくOracle Databaseに対して実行できます。このため、Oracle Database記憶域への移行コストが大幅に削減されます。当然の結果として、翻訳機能は他のシナリオ(翻訳機能が、クライアントから発行された元のSQL文とその実際の実行との間の仲介に適している場合など)で使用できます。

SQL翻訳プロファイル

SQL翻訳プロファイルは、取得されたOracle以外のSQL文とその翻訳または翻訳エラーのセットを含むデータベース・オブジェクトです。SQL翻訳プロファイルを使用して、翻訳の確認、承認および変更を行います。プロファイルは1つのトランスレータと関連付けられています。ただし、1つのトランスレータは1つ以上のSQL翻訳プロファイルで使用できます。通常、アプリケーションごとに1つのSQL翻訳プロファイルがあります。あるいは、アプリケーションで翻訳された問合せを共有します。プロファイルは様々なデータベース間でエクスポートできます。

次の図に、SQL翻訳フレームワークの実行時の概要を示します。

図2-1 実行時のSQL翻訳フレームワーク

図2-1の説明が続きます
「図2-1 実行時のSQL翻訳フレームワーク」の説明

SQL翻訳フレームワークのアーキテクチャ

SQL翻訳フレームワークの主要コンポーネントは、SQL翻訳プロファイルです。プロファイルは、トランスレータを介して処理されるOracle以外の文の集まりです。アプリケーションは、Oracle Databaseへの接続で使用するプロファイルを決定します。トランスレータは、実際の翻訳処理を行います。

ほとんどの場合、Oracle以外のSQL文とエラーは、プロファイルに登録されたSQLトランスレータで翻訳されます。トランスレータは、Oracleまたはサード・パーティ・ベンダーから提供されます。トランスレータに特定のSQL文やエラーの翻訳がない場合、独自のカスタム翻訳を登録できます。また、カスタム翻訳を登録して、デフォルトのトランスレータをオーバーライドしたり、翻訳結果をカスタマイズしたりすることも可能です。

SQL翻訳フレームワークの使用方法

SQL翻訳フレームワークを使用する場合、次の手順を実行します。

  1. SQLトランスレータを、Oracleまたはサード・パーティ・ベンダーからOracle Databaseにインストールします。
  2. SQL翻訳プロファイルを作成し、そのプロファイルにSQLトランスレータを登録します。
  3. データベース・サービスを作成し、アプリケーションが接続可能なサービス属性としてSQL翻訳プロファイルを指定します。

    SQL翻訳プロファイルをサービス・レベルで設定すると、そのリスナー・サービスを介して実行されるSQLはすべて自動的に翻訳されることに注意してください。

    ALTER SESSION文またはLOGONトリガーを使用して、トランスレータを接続レベルでアクティブにすることもできます。

  4. Oracleドライバを使用してアプリケーションをリンクし、アプリケーションをOracle Databaseに接続します。SQL翻訳プロファイルを使用してデータベース・サービスに接続するよう接続設定を変更する必要もあります。
  5. Oracle Databaseに対してアプリケーションのすべての機能をテストします。アプリケーションを実行すると、SQL翻訳プロファイルは、アプリケーションのSQL文を、サード・パーティのSQL言語から意味的に同等のOracle構文に翻訳し、それらをプロファイルに登録します。

    トランスレータに特定のSQL文やエラーの翻訳がない場合、そのかわりに独自の翻訳を登録できます。

  6. カスタム翻訳を確認し、必要な場合は編集します。または、新しい翻訳を登録し、アプリケーションが意図したとおりに実行されることを確認してテストを完了します。

    テスト環境を構築して、アプリケーションを厳密に(回帰テスト・スイートの使用が理想)テストすることをお薦めします。

  7. 本番環境へのデプロイメントの場合、サーバー側アプリケーションのオブジェクトとデータを本番Oracle Databaseで設定します。
  8. プロファイルがサービス属性として設定されたデータベース・サービスを作成し、本番データベースのデータベース・サービスに接続するようアプリケーションの接続設定を変更します。アプリケーションは、テストと同様に実行されることが期待されます。

任意のSQL文を翻訳できないためにエラーが発生する可能性を監視するために、アプリケーションをモニターすることをお薦めします。まず、新規または未見のSQL文が出現した場合にエラーになって記録されるよう、プロファイル内でそのような文の自動翻訳を無効にする必要があります。翻訳が失敗してアラートが発生する場合、プロファイルを調整する必要があります。

関連項目:

SQL翻訳フレームワークを使用するタイミング

SQL翻訳は、ベンダー固有のSQL構文によるSQL文を使用したクライアント・アプリケーションを移行する場合に使用します。

現在、SQL翻訳は、SybaseおよびSQL Serverにのみ使用できます。DB2の場合、サポートに制限があります。

SQL翻訳フレームワークは、オープンAPIアプリケーション(ODBCまたはJDBCなど)や、意味的に同等のOracle構文に翻訳されるSQL文を使用するアプリケーションでの使用を目的としています。これらのアプリケーションは、Oracle ODBCまたはJDBCドライバに再リンクして、翻訳サービスから実行する必要があります。

接続メカニズムについて、考えられるシナリオを次に示します。

  • アプリケーションでODBC、JDBC、OLE DBまたは.NETドライバ、あるいはデータベースに接続するデータ・プロバイダを使用する場合、Oracleのドライバまたはデータ・プロバイダを置換する必要があります。

  • アプリケーションでMySQLクライアント・ライブラリを使用してMySQLに接続する場合、Oracle用MySQLクライアント・ライブラリ・ドライバを含むライブラリを置換する必要があります。

  • ダイレクト・トランスレータは、DB2には使用できません。詳細は、「他のデータベース・ベンダーの移行サポート」を参照してください。

    アプリケーションでIBM DRDAネットワーク・プロトコルを使用してDB2に接続する場合、データベース接続設定を、Oracle用DRDAアプリケーション・サーバー経由でOracleに接続するように変更する必要があります。

  • アプリケーションでベンダー専用のCクライアントAPI(Sybaseなど)を使用する場合、API呼出しを適切なOracle OCI APIに交換する必要があります。