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翻訳フレームワークのアーキテクチャ
SQL翻訳フレームワークの主要コンポーネントは、SQL翻訳プロファイルです。プロファイルは、トランスレータを介して処理されるOracle以外の文の集まりです。アプリケーションは、Oracle Databaseへの接続で使用するプロファイルを決定します。トランスレータは、実際の翻訳処理を行います。
ほとんどの場合、Oracle以外のSQL文とエラーは、プロファイルに登録されたSQLトランスレータで翻訳されます。トランスレータは、Oracleまたはサード・パーティ・ベンダーから提供されます。トランスレータに特定のSQL文やエラーの翻訳がない場合、独自のカスタム翻訳を登録できます。また、カスタム翻訳を登録して、デフォルトのトランスレータをオーバーライドしたり、翻訳結果をカスタマイズしたりすることも可能です。
2.2 SQL翻訳フレームワークの使用方法
SQL翻訳フレームワークを使用する場合、次の手順を実行します。
任意のSQL文を翻訳できないためにエラーが発生する可能性を監視するために、アプリケーションをモニターすることをお薦めします。まず、新規または未見のSQL文が出現した場合にエラーになって記録されるよう、プロファイル内でそのような文の自動翻訳を無効にする必要があります。翻訳が失敗してアラートが発生する場合、プロファイルを調整する必要があります。
関連項目:
-
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の新しい
DBMS_SQL_TRANSLATOR
PL/SQLパッケージ、および更新されたDBMS_SQL
パッケージとDBMS_SERVICE
PL/SQLパッケージ。 -
『Oracle Database SQL言語リファレンス』の更新された
GRANT
文とREVOKE
文、および新しいシステム権限。
2.3 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に交換する必要があります。