Oracle® Database Extensions for .NET開発者ガイド 11gリリース2 (11.2) for Microsoft Windows B61359-02 |
|
前 |
次 |
このトピックでは、Oracle Database Extensions for .NETのインストール、システム要件およびファイルの場所を説明します。
この章の内容は次のとおりです。
Oracle Database Extensions for .NETの各リリースには、それぞれ固有のバージョン要件があります。次のシステム要件は、32ビットのOracle Database Extensions for .NETリリース 11.2.0.1.0にのみ適用されます。別のバージョンを使用する場合は、そのバージョン固有のドキュメントを参照してください。
32ビット版WindowsのOracle Database 11gリリース11.2.0.1.0。
注意: Oracle Database Extensions for .NETは、Windowsプラットフォームでのみサポートされます。 |
Microsoft .NET Framework
ODE.NET for .NET Framework 2.0は、Microsoft .NET Framework 2.0、3.0、3.5、4および.NET Framework 4 Client Profileでのみサポートされます。
ODE.NET for .NET Framework 4は、Microsoft .NET Framework 4および.NET Framework 4 Client Profileでのみサポートされます。
注意: Microsoft Framework 1.xは、Oracle Database Extensions for .NETリリース11.1.0.7.20からはサポートされていません。.NET Framework 1.xを必要とするストアド・プロシージャを持っている場合、このリリースで機能するよう、特別な手順をいくつか行う必要があります。詳細は、「.NET 1.xストアド・プロシージャの.NET 2.0への必須の移行」を参照してください。 |
Oracle Data Provider for .NETリリース 11.2.0.1.0以上(ストアド・プロシージャでのデータ・アクセスが必要な場合)。
Oracle Developer Tools for Visual Studio 10.2以上は、.NETストアド・プロシージャのデプロイに必要です。
注意: Oracle Developer Tools for Visual Studioは、Oracleデータベースではリリースされません。OTNのOracle .NET Developer Centerから取得できます。 |
.NETストアド・プロシージャまたはファンクションは次の要件を満たす必要があります。
public staticメソッドが宣言されていること。
コンストラクタまたはデストラクタでないこと。
Oracleネイティブ・データベース・タイプと互換性のあるパラメータ・タイプの使用。
OraClr11.dll
は、ORACLE_BASE\\ORACLE_HOME
\bin
ディレクトリにインストールされます。
Oracle.Database.Extensions.dll
は、次の場所にインストールされます。
.NET Framework 2.0:
ORACLE_BASE\\ORACLE_HOME
\ODE.NET
\bin\2.
x
.NET Framework 4:
ORACLE_BASE\\ORACLE_HOME
\ODE.NET
\bin\4
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
と呼ばれ、Oracle
ORACLE_HOME
ClrAgent
としてサービス・コントロール・パネルを介してアクセスできます。ORACLE_HOME
はOracleホームを表します。
このサービスは、extproc
エージェントの起動、構成および停止に使用します。
このサービスを使用して構成されるパラメータは、表2-1、OraClrAgntサービス・パラメータにリストされます。
これらのパラメータ値は、コントロール・パネル・サービスのプロパティ・ウィンドウにある開始パラメータの一部として指定できます。この場合、パラメータ値は保存されず後でサービスを再起動する場合、再指定する必要があります。
パラメータ値を永続的にするには、このサービスのWindowsレジストリのエントリを変更し、OraClrAgnt.exe
にコマンドライン・パラメータとしてパラメータ値を使用できます。これを実行するには、次の場所にあるWindowsレジストリ・キー、ImagePath
を設定します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Oracle
OracleHome
ClrAgent
値は次のようになります。
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 OraClrAgntサービス・パラメータ
パラメータ | 説明 |
---|---|
|
これは |
|
これは 詳細は、Oracle Net Services管理者ガイドの表13-5 listener.oraの外部プロシージャ設定を参照してください。 |
|
リスナーがリスニングするアドレス。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。 |
|
|
|
|
|
|
|
エージェントが |
|
|
注意: デフォルトでは、このサービスはローカル・システム・アカウントで作成され、実行されます。だたし、サービス・コントロール・パネルからログインしているユーザー・アカウントで実行するよう変更できます。 |
関連項目: Oracle Databaseアプリケーション開発者ガイド - 基礎編、表A-2、agtctl の構成パラメータ |
次の方法に従って、.NETストアド・プロシージャをOracle Databaseリリース 10.2からリリース 11.2に移行できます。
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リリース 2(11.2)の同じディレクトリ構造内に、.NETストアド・プロシージャのアセンブリをコピーします。
Oracle Database 11g
リリース 2(11.2)データベースに対して、SYSDBA
権限でDotNetSP_Grant.sqlを実行します。
Oracle Database 11gリリース 2(11.2)データベースのOracle Data Pump Importユーティリティを実行します。
impdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp
Oracle Database Extensions for .NETリリース11.1.0.7.20から、.NET 1.xストアド・プロシージャはサポートされなくなりました。特に、Oracle Database Extensions for .NET 1.xおよびOracle Data Provider for .NET 1.xは、このリリースには含まれません。以前のリリースの既存の.NET 1.xストアド・プロシージャを持つ場合、このリリースで機能するよう特別な移行手順を行う必要があります。
警告: 場合によって、この移行にはコードの変更が必要になります。.NET 1.xストアド・プロシージャを持っている場合、そのストアド・プロシージャが正常に移行されたテスト環境で検証されるまで本番環境にこのリリースをインストールしないでください。すでにこのリリースをインストールして.NET 1.xストアド・プロシージャでエラーが発生している場合は、ストアド・プロシージャに必要なコード変更が行えるまで以前のバージョンのOracle Database Extensions for .NETにダウングレードする必要があります。 |
.NET 1.xストアド・プロシージャを分析して、このリリースに移行するのにコード変更が必要かを判断する必要があります。特に、次の点について調べる必要があります。
ODP.NET for .NET 1.xとODP.NET for .NET 2.0の間のコードの非互換性。
「ODP.NET for .NET 1.xとODP.NET for .NET 2.0の間のコードの非互換性の処理」を参照してください。
Oracle Database Extensions for .NET 1.xとOracle Database Extensions for .NET 2.0の間のコードの非互換性。
「Oracle Database Extensions for .NETリリース1.xと2.0の間のコードの非互換性の処理」を参照してください。
ADO.NET 1.xおよびADO.NET 2.0の移行の問題
詳細は、Microsoft社のドキュメントを参照してください。
.NET 1.xストアド・プロシージャをこのリリースで機能するようにするには、2つの方法が考えられます。
ODP.NET for .NET 2.0を使用して.NET 1.xストアド・プロシージャを再コンパイルおよび再デプロイします。この方法を強くお薦めします。また、コード変更が必要な非互換性がある場合、この方法が必要です。「ODP.NET for .NET 2.0を使用した.NET 1.xストアド・プロシージャの再コンパイルおよび再デプロイ」を参照してください。
ODP.NET for .NET 2.0を使用して.NET 1.xストアド・プロシージャを構成して実行します。この方法では、再コンパイルが不要ですが、処理されていない非互換性がある場合、ランタイム・エラーが発生する可能性があります。「ODP.NET for .NET 2.0を使用した.NET 1.xストアド・プロシージャの構成」を参照してください。
.NET 1.xストアド・プロシージャ内のODP.NETに関連する次のコードの非互換性を処理する必要がある可能性があります。
ODP.NET for .NET 2.0では、OracleParameter.OracleDbType
がInt32
、Double
などの数値型に設定されている場合、OracleParameter.Value
により.NETネイティブ型のかわりにOracleDecimal
が返されます。この動作変更の概要は、次の表のとおりです。
OracleParameter.OracleDbType | .NET 1.xで返されるOracleParameter.Value | .NET 2.xで返されるOracleParameter.Value |
---|---|---|
OracleDbType.Byte |
System.Byte |
OracleDecimal |
OracleDbType.Double |
System.Double |
OracleDecimal |
OracleDbType.BinaryDouble |
System.Double |
OracleDecimal |
OracleDbType.Int16 |
System.Int16 |
OracleDecimal |
OracleDbType.Int32 |
System.Int32 |
OracleDecimal |
OracleDbType.Int64 |
System.Int64 |
OracleDecimal |
OracleDbType.Single |
System.Single |
OracleDecimal |
OracleDbType.BinaryFloat |
System.Single |
OracleDecimal |
前述のOracleDbType
列挙値をout
またはin/out
OracleParameter
に.NET 1.xストアド・プロシージャで使用する場合、変更が必要な場合があります。
ODP.NET for .NET 2.0では、OracleParameter.OracleDbType
が接続型に設定されている場合、OracleParameter.Value
によりDBNull.Value
のかわりにプロバイダタイプ固有のnull
値(OracleClob.Null
)が返されます。たとえば、OracleParameter.OracleDbType
がOracleDbType.Clob
に設定されている場合、OracleParameter.Value
は、DBNull.Value
のかわりにOracleClob.Null
を返してnull
値を示します。これは、ODP.NET for .NET 1.xの場合です。
接続型がパラメータとして.NET 1.xストアド・プロシージャに渡された場合、およびプロシージャがnull
値をチェックした場合、プロシージャを変更する必要がある可能性があります。パラメータが接続型だった場合、Oracle Database Extensions for .NET 1.xでは.NET null
を使用してnull
値を表します。このような場合、Oracle Database Extensions for .NET 2.0ではOracleBFile.Null
などのプロバイダタイプ固有のnull
値を使用します。
接続型のnull
値にプロバイダ固有のタイプのnull
値のかわりに.NET null
値を使用するよう、Oracle Database Extensions for .NET 2.0を構成できます。これには、次のレジストリ値を作成して0に設定します。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORACLE_HOME\ODE\ProviderNull
このレジストリ値の説明は、Oracle Data Provider for .NET開発者ガイドのnull値可能なODP.NET接続型の下位互換性の冠する項を参照してください。
コードの非互換性が見つかった場合、ODP.NET for .NET 2.0を使用して.NET 1.xストアド・プロシージャを再コンパイルする必要があります。
コードの非互換性がなくても、.NET 1.xストアド・プロシージャを再コンパイルおよび再デプロイすることをお薦めします。処理されていない互換性の問題があった場合、再コンパイルにより、ランタイム・エラーが発生しなくなります。再コンパイルに成功した後、ストアド・プロシージャを再デプロイします。
もう1つの方法として、コードの非互換性がない場合、ODP.NET for .NET 2.0で.NET 1.xストアド・プロシージャを構成して実行できます。この方法の場合、.NETストアド・プロシージャを再コンパイルおよび再デプロイする必要がありません。ただし、処理されていない非互換性がOracle Database Extensions for .NET, ODP.NETおよびADO.NETのリリース1.xと2.0の間にある場合、ランタイム・エラーが発生する可能性があります。再コンパイルおよび再デプロイせずにODP.NET for .NET 2.0で.NET 1.xストアド・プロシージャを構成して実行するには、次の手順を実行します。
.NET 1.xストアド・プロシージャが古いOracleホームに存在する場合、.NET 1.xストアド・プロシージャDLLを新しいOracleホームの、NewOracleHome
\bin\clr
の下にコピーします。
ストアド・プロシージャがOldOracleHome
\bin\clr\Accounts
などの以前のOracleホームのサブフォルダに元々でプロイされている場合、新しいOracleホームの下にNewOracleHome
\bin\clr\Accounts,
のような同じディレクトリ構造を作成し、.NET 1.xストアド・プロシージャDLLをそこにコピーします。
NewOracleHome
\bin
フォルダでextproc.exe.config
ファイルを変更または作成して、ODP.NET(Oracle.DataAccess.dll
)1.xリファレンスをインストールされたバージョンのODP.NET for .NET 2.0にリダイレクトします。たとえば、ODP.NET 1.111.6.20リファレンスをODP.NET 2.111.7.20にリダイレクトするには、extproc.exe.config
ファイルに次の構成セクションが含まれている必要があります。
<configuration> <runtime> <legacyUnhandledExceptionPolicy enabled="1"/> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" /> <bindingRedirect oldVersion="1.111.6.20" newVersion="2.111.7.20"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
次の場所にある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フレームワーク1.xはこのリリースではサポートされていません。詳細は、「.NET 1.xストアド・プロシージャの.NET 2.0への必須の移行」を参照してください。
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>