このトピックでは、Oracle Database Extensions for .NETのインストール、システム要件およびファイルの場所を説明します。
このトピックの内容は次のとおりです。
Oracle Database Extensions for .NETには次のシステム要件が必要です。
Windowsオペレーティング・システム
32ビット: Windows Vista(Business、EnterpriseおよびUltimate Editions)、Windows Server 2003、Windows Server 2003 R2、Windows 2000、またはWindows XP Professional Edition。
64 bit: Windows Vista x64(Business、EnterpriseおよびUltimate Editions)、Windows Server 2003 x64、Windows Server 2003 R2 x64、またはWindows XP x64。
Microsoft .NET Framework 1.1以降。
.NET Framework 2.0固有の機能には、ODP.NET 10.2.0.2.20以降が必要です
64ビットWindowsプラットフォームでは、64ビット.NET Frameworkのバージョン2.0以降のみがサポートされています。このため、64ビットODEでは、64ビット.NET Framework 2.0以降のみがサポートされています。64ビットODEの最初のバージョンは、Windows x64およびItaniumでは10.2.0.3.02です。
Oracle Database 11gリリース1(11.1)以降。
Oracleクライアント・リリース10g リリース2(10.2)以上(.NETストアド・プロシージャの開発およびデプロイを行う場合)。
Oracle Developer Tools for Visual Studio .NET(.NETストアド・プロシージャの開発およびデプロイを行う場合)。
Oracle Developer Tools for Visual Studio .NETは、Oracleデータベースではリリースされません。OTNのOracle .NET Developer Centerから取得できます。
.NETストアド・プロシージャまたはファンクションは次の要件を満たす必要があります。
public staticメソッドが宣言されていること。
コンストラクタまたはデストラクタでないこと。
Oracleネイティブ・データベース・タイプと互換性のあるパラメータ・タイプの使用。
OraClr11.dllをORACLE_BASE¥ORACLE_HOME¥binディレクトリにインストールします。READMEファイルreadme.htmlをORACLE_BASE¥ORACLE_HOME¥ODE.NET¥DOCディレクトリにインストールします。
開発者がデプロイした.NETアセンブリは、 Oracle Deployment Wizard for .NETによりORACLE_BASE¥ORACLE_HOME¥bin¥CLRディレクトリ(またはサブディレクトリ)にコピーされます。
Oracle Database Extensions for .NETは、Oracle Universal Installerを使用してOracle Databaseのカスタム・インストールの一部としてインストールされます。Oracle Universal Installerの「ようこそ」画面から「拡張インストール」を選択し、次に「インストール・タイプの選択」画面から「カスタム」を選択する必要があります。「使用可能な製品コンポーネント」リストが表示される場合、Enterprise Editionのオプションに移動し、Oracle Database Extensions for .NETを選択します。
Oracle Database Extensions for .NETは、Database Configuration Assistantを使用して構成します。
Oracle Database Extensions for .NETインストールの一部として、Windowsサービスがインストールされます。このサービスはOraClrAgntと呼ばれ、OracleORACLE_HOMEClrAgentとしてサービス・コントロール・パネルを介してアクセスできます。ORACLE_HOMEはOracleホームを表します。
このサービスは、extprocエージェントの起動、構成および停止に使用します。
このサービスを使用して構成されるパラメータは、表2-1、OraClrAgntサービス・パラメータにリストされます。
これらのパラメータ値は、コントロール・パネル・サービスのプロパティ・ウィンドウにある開始パラメータの一部として指定できます。この場合、パラメータ値は保存されず後でサービスを再起動する場合、再指定する必要があります。
パラメータ値を永続的にするには、このサービスのWindowsレジストリのエントリを変更し、OraClrAgnt.exeにコマンドライン・パラメータとしてパラメータ値を使用できます。これを実行するには、次の場所にあるWindowsレジストリ・キー、ImagePathを設定します。
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥ OracleOracleHomeClrAgent
値は次のようになります。
ORACLE_BASE¥ORACLE_HOME¥bin¥OraClrAgnt.exe agent_sid=CLRExtProc max_dispatchers=2 tcp_dispatchers=0 max_task_threads=6 max_sessions=25 ENVS="EXTPROC_DLLS=ONLY:ORACLE_BASE¥ORACLE_HOME¥bin¥oraclr11.dll"
サービスを開始または停止できない場合、エラー・メッセージがサービス名のイベントのソース名として、イベント・ビューアのアプリケーション・ログに記録されます。
表2-1に、このサービスを使用して構成されるパラメータをリストします。
表2-1 OaClrAgntサービス・パラメータ
| パラメータ | 説明 |
|---|---|
|
|
これは |
|
|
これは 詳細は、Oracle Net Services管理者ガイドの表13-5 listener.oraの外部プロシージャ設定を参照してください。 |
|
|
リスナーがリスニングするアドレス。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。 |
|
|
|
|
|
|
|
|
|
|
|
エージェントが |
|
|
|
|
注意: デフォルトでは、このサービスはローカル・システム・アカウントで作成され、実行されます。だたし、サービス・コントロール・パネルからログインしているユーザー・アカウントで実行するよう変更できます。 |
|
関連項目: 構成パラメータおよびデフォルト値の詳細は、Oracle Database Heterogeneous Connectivity管理者ガイドの表5-2を参照してください。 |
次の方法に従って、.NETストアド・プロシージャをOracle Databaseリリース10.2からリリース11.1に移行できます。
Oracle Database 10gリリース 2(10.2)データベースの.NETストアド・プロシージャが使用するライブラリを選択します。次に例を示します。
SELECT library_name, file_spec FROM ALL_LIBRARIES WHERE OWNER='SYS' and FILE_SPEC LIKE '$ORACLE_HOME¥bin¥clr¥%';
library_nameは、通常dll_name_DLLという形式になります。たとえば、Project1.dllのlibrary_nameはPROJECT1_DLLになります。
次のSQL文が記載されたSQLファイルを手動で作成します(たとえば、DotNetSP_Grant.sqlなど)。
CREATE LIBRARY "SYS"."library_name" AS 'file_spec' GRANT EXECUTE ON "SYS"."library_name" TO "schema_name" GRANT EXECUTE ON "SYS"."DBMS_CLR" TO "schema_name" GRANT EXECUTE ON "SYS"."DBMS_CLRTYPE" TO "schema_name" GRANT EXECUTE ON "SYS"."DBMS_CLRPARAMTABLE" TO "schema_name"
Oracle Database 10gリリース2(10.2)のOracle Data Pump Exportユーティリティを実行します。
Expdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp include=PROCEDURE,FUNCTION
Oracle Database 10gリリース2(10.2)のORACLE_BASE¥ORACLE_HOME¥bin¥clrフォルダおよびそのサブフォルダからOracle Database 11gリリース1(11.1)の同じディレクトリ構造内に、.NETストアド・プロシージャのアセンブリをコピーします。
Oracle Database 11gリリース1(11.1)データベースに対して、SYSDBA権限でDotNetSP_Grant.sqlを実行します。
Oracle Database 11gリリース1(11.1)データベースのOracle Data Pump Importユーティリティを実行します。
impdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp
次の場所にあるWindowsレジストリ・エントリを使用して、Oracle Database Extensions for .NETに機能を追加できます。
HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_ORACLE_HOME¥ODE
表2-2に、Oracle Database Extensions for .NETに機能を追加するレジストリ・キーおよびキーを説明するセクションをリストします。
表2-2レジストリ・オプション
| レジストリ・キー | セクション |
|---|---|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
リリース11.1.0.6.20では、.NETストアド・プロシージャの実行が完了したときに.NETアセンブリをアンロードできます。これにより、開発中にコードを繰り返しテストするのが簡単になります。このレジストリ・キーが無効の場合、再デプロイするたびにexproc.exeプロセスを停止し、起動する必要があります。
この機能は、パフォーマンスに悪影響があるので、パフォーマンスのテストまたは生成時に使用することはできません。
アセンブリのロードの動作を定義するには、レジストリ・キーにあるタイプREG_SZのレジストリ値RecreateAppDomainを設定します。
HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_ORACLE_HOME¥ODE
RecreateAppDomainの有効値は次のとおりです。
0 = .NETストアド・プロシージャの実行が完了すると、.NETアセンブリはロードされたままになります。
1 = .NETストアド・プロシージャの実行が完了すると、.NETアセンブリはアンロードされます。
ODP.NET for .NET 2.0は、OracleDecimalなど非接続型に対する既存のサポートに加えて、ODP.NET接続型の静的Nullプロパティをサポートします。また、これらの型の各パブリック・プロパティ、IsNullをサポートし、各型のオブジェクトに値が割り当てられているかもチェックします。
|
関連項目: NULL可能な型の詳細は、Oracle Data Provider for .NET開発者ガイドを参照してください。 |
これで、.NETストアド・プロシージャへODP.NET接続型のNullオブジェクトが伝播されます。この接続型のリストは次のとおりです。
OracleBlob
OracleClob
OracleBFile
OracleXmlType
.NETストアド・プロシージャの前のバージョンは、ODP.NETの接続型パラメータと考えられ、Type.NullオブジェクトではなくNULLとして渡されます。後方互換性をサポートするには、レジストリの文字列ProviderNullを使用して前の動作を維持します。
Oracle Database Extensions for .NETが.NETストアド・プロシージャのODP.NET接続型パラメータにNULL値を渡す方法を定義するには、このレジストリ・キーにあるレジストリの文字列ProviderNullを指定します。
HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_ORACLE_HOME¥ODE
ProviderNullの有効値は次のとおりです。
0 = ODP.NET接続タイプ・パラメータはType.NullオブジェクトではなくNULLとして渡されます。
1 = Oracle Database Extensions for .NETは、.NETストアド・プロシージャにType.Nullオブジェクトを渡します(NULL値の場合)。
データベース・コンピュータに複数の.NETランタイム・バージョンがインストールされる場合、Oracle Database Extensions for .NETのデフォルトは、使用できる最新の.NETランタイムになります。ただし、レジストリ値を設定すれば、特定の.NETランタイムをロードするようOracle Database Extensions for .NETを構成できます。
.NETランタイム・バージョンを指定するには、このレジストリ・キーにあるレジストリ値.NETFrameworkを設定します。
HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_ORACLE_HOME¥ODE
適切な.NETランタイム・バージョン(たとえば、v2.0.50727)にレジストリ値を設定します。
たとえば、サーバーに.NET frameworkのバージョン1.1および2.0があり、.NETストアド・プロシージャを.NET framework 1.1で構築すると、このレジストリ値はv1.1.4322に設定され、Oracle Database Extensions for .NETに.NET frameworkのバージョン1.1.4322をロードするよう指示する場合があります。
各.NETバージョンの.NETランタイム・バージョン値は次のとおりです。
1.0 : v1.0.3705
1.1 : v1.1.4322
2.0 : v2.0.50727
Oracle Database Extensions for .NETは、トレース・ファイルにすべてのOracle Database Extensions for .NETをロギングできるデバッグ・トレースのサポートを提供します。異なるトレースのレベルが使用可能です。
次に示すレジストリ設定は、次の場所に構成してください。
HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_ORACLE_HOME¥ODE
TraceOptionは、トレース情報を1つのファイルに記録するか、スレッドごとの複数のファイルに記録するかを指定します。単一トレース・ファイルを指定した場合は、TraceFileNameに指定されたファイル名が使用されます。複数トレース・ファイル・オプションが要求された場合は、指定されたファイル名にスレッドIDが付加され、スレッドごとにトレース・ファイルが作成されます。
TraceOptionの有効値は次のとおりです。
0 = 単一のトレース・ファイル
1 = 複数のトレース・ファイル
注意: Oracle Data Provider for .NETのトレース・メカニズムを使用して、ODP.NET特定の問題を解決します。
TraceFileNameは、トレース情報のロギングに使用されるファイル名を指定します。TraceOptionが0に設定されている場合、名前はそのまま使用されます。ただし、TraceOptionが1に設定されている場合は、指定されたファイル名にスレッドIDが付加されます。
TraceFileNameの有効値は、任意の有効なパス名およびファイル名です。
TraceLevelは、Oracle Database Extensions for .NETでトレースのレベルを指定します。
TraceLevelの有効値は次のとおりです。
0 = なし
1 = 入力および終了情報
|
関連項目: Oracle Data Provider for .NET開発者ガイドのデバッグ・トレースに関する項 |
.NETストアド・プロシージャは、外部プロシージャ・エージェントextproc.exeの内部で管理されます。.NETランタイム・バージョン2.0では、スレッド内でほとんどの未処理の例外はそのまま続行されます。未処理の例外によりextproc.exeは終了します。この動作は.NETランタイム・バージョン1.0および1.1とは異なります。.NETランタイム・バージョン1.0および1.1は、多数の処理不能な例外に対する防止策を提供しています。
Oracle Database Extensions for .NETは、extproc.exe.configファイルをORACLE_BASE\ORACLE_HOME\Binディレクトリにインストールします。そのため、.NETランタイム・バージョン2.0は強制的に.NETランタイム・バージョン1.1の動作をします。.NETストアド・プロシージャ内部に作成されたガベージ・コレクタまたはスレッドが例外をスローした場合、およびこの例外が.NETストアド・プロシージャでは処理されない場合、トレーシング・メカニズムは例外を報告します。
extproc.exe.configファイルの例は次のとおりです。
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>
</configuration>
次の方法に従ってextproc.exe.configファイルを変更すれば、このファイルを変更して.NET 2.0の動作に戻すことができます。
<configuration> <runtime> <legacyUnhandledExceptionPolicy enabled="0"/> </runtime> </configuration>