データベース・アプリケーションの移行: SQL翻訳フレームワーク
Oracle以外のデータベース・アプリケーションからOracle Databaseへの移行の中心としては、Oracle以外のSQL文のOracle Databaseによって処理可能なSQL文への変換が必要です。SQLの変換は、一般的に手動で労力を要するプロセスです。労力を減らすために、Oracle Database 12cはSQL翻訳フレームワークを導入しました。これにより、クライアント・アプリケーションからのOracle以外のSQL文を取得し、実行時にOracle Databaseが実行するように翻訳します。
SQL翻訳フレームワークはOracle以外のストアド・プロシージャをOracleのストアド・プロシージャにマップするために使用でき、これによりOracle Databaseに移行する際にそうしたストアド・プロシージャが正常に実行できるようにします。
現在、SQL翻訳フレームワークはSybase Adaptive Server EnterpriseおよびMicrosoft SQL Serverで使用できます。IBM DB2のサポートには制限があります。
注意:
SQL翻訳フレームワークはODP.NET管理対象外ドライバでのみサポートされています。ODP.NET管理対象ドライバおよびODP.NET Coreでは、この機能はサポートされていません。
SQL翻訳プロファイル
SQL翻訳プロファイルは、取得されたOracle以外のSQL文とその翻訳または翻訳エラーのセットを含むデータベース・オブジェクトです。SQL翻訳プロファイルを使用して、翻訳の確認、承認および変更を行います。プロファイルは1つのトランスレータと関連付けられています。ただし、1つのトランスレータは1つ以上のSQL翻訳プロファイルで使用できます。通常、アプリケーションごとに1つのSQL翻訳プロファイルがあります。あるいは、アプリケーションで翻訳された問合せを共有します。プロファイルは様々なデータベース間でエクスポートできます。
-
SQL翻訳プロファイル名の構成
SQL翻訳フレームワークのデフォルトの翻訳プロファイル名は
app/web/machine
.NET構成ファイルを通じて構成できます。構成されている場合、接続は最初に作成されたときにデフォルトで自動的に指定したプロファイルに設定されます。 -
SQL翻訳プロファイル名の変更
ODP.NETは、.NET構成ファイル、ログオン・トリガーまたはデータベース・サービスを介してプロファイル名の設定をサポートします。ODP.NETは、プロファイル名を設定するためにアプリケーションからの
ALTER SESSION
の使用をサポートしません。 -
翻訳の強制
アプリケーションでは、データベース上のすべてのSQLの翻訳を強制する次のSQLの実行は厳重に禁止されています。
ALTER SESSION SET events = '10601 trace name context forever, level 32'
-
接続関連エラー・マッピング
接続関連エラー・マッピングは、.NET構成ファイルを通じて構成できます。このエラー・マッピングは、接続が正常に確立される前にスローされる可能性があるエラーに厳格に適用されることに注意してください。データベース接続が正常に確立されると、これらのエラー・マッピングは完全に無視され、データベースで構成されるエラー・マッピングを通じてさらにエラー翻訳が提供されます。
構成ファイルでエラー・マッピング・セクションを選択するルールは次のようになります。
-
ODP.NETは、構成された
userId
、dataSource
およびプロファイルと一致するエラー・マッピング・セクションを使用します。ここで、userId
およびdataSource
は接続する文字列の対応する値と一致し、プロファイルはdefaultProfile
構成設定と一致します。 -
エラー・マッピング・セクションが4.a)で見つからない場合、ODP.NETは
defaultErrorMappingProfile
構成設定と一致するプロファイルを使用して、userId
、dataSource
および4.a)と類似するプロファイルをマッチングするエラー・マッピング・セクションを使用します。 -
エラー・マッピング・セクションがそれでも見つからない場合、ODP.NETはグローバル・マッピング(つまり
<ErrorMapping profile="*">
)を使用します(構成されている場合)。
-
-
ストアド・プロシージャ・マッピング。
アプリケーションは、データベースの翻訳プロファイルで、ネイティブ・ストアド・プロシージャ名を対応するOracleストアド・プロシージャ名にマップする必要があります。データベースでマッピングを設定するには、次の手順を使用できます。
DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION( PROFILE_NAME VARCHAR2 IN SQL_TEXT CLOB IN TRANSLATED_TEXT CLOB IN DEFAULT ENABLE BOOLEAN IN DEFAULT)
ストアド・プロシージャ・マッピングの例:
DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION('profile_name', 'native_sp_name', 'oracle_sp_name');
関連項目:
詳細は、『Oracle Database移行ガイド』の第2章「SQL翻訳フレームワークの概要とアーキテクチャ」を参照してください。