ヘッダーをスキップ
Oracle® Database Extensions for .NET開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B61359-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 インストールおよび構成

このトピックでは、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ストアド・プロシージャおよび機能の要件

.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を使用して構成します。

Windowsサービスを使用したExtprocエージェントの構成

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"

サービスを開始または停止できない場合、エラー・メッセージがサービス名のイベントのソース名として、イベント・ビューアのアプリケーション・ログに記録されます。

OraClrAgntサービス・パラメータ

表2-1に、このサービスを使用して構成されるパラメータをリストします。

表2-1 OraClrAgntサービス・パラメータ

パラメータ 説明

agent_sid

これはextprocプロセスのSIDを表します。デフォルト値はCLRExtProcです。これは必須パラメータです。このパラメータ値を変更する場合、tnsnames.oraおよびlistener.oraファイルで適切な変更を行う必要があります。

ENVS

extprocをロードできるDLLを制限するEXTPROC_DLLS環境変数を指定する変数。

これはlistener.oraを使用して、外部プロシージャに環境変数を設定する操作と同様です。

詳細は、Oracle Net Services管理者ガイドの表13-5 listener.oraの外部プロシージャ設定を参照してください。

listener_address

リスナーがリスニングするアドレス。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。

max_dispatchers

extprocプロセスの最大ディスパッチャ数。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。

max_sessions

extprocプロセスの最大セッション数。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。

max_task_threads

extprocプロセスの最大タスク・スレッド数。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。

shutdown_address

エージェントがagtctlから停止メッセージをリスニングする必要があるアドレス。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。

tcp_dispatchers

extprocプロセスのTCPディスパッチャ数。これはオプションのパラメータです。指定しない場合は、デフォルト値に設定されます。



注意:

デフォルトでは、このサービスはローカル・システム・アカウントで作成され、実行されます。だたし、サービス・コントロール・パネルからログインしているユーザー・アカウントで実行するよう変更できます。


関連項目:

Oracle Databaseアプリケーション開発者ガイド - 基礎編、表A-2、agtctlの構成パラメータ

パフォーマンスのためのOraClrAgntのチューニング

システムの予想負荷と一致するよう、OraClrAgntを調節する必要があります。

起動中のextproc.exeプロセスが多すぎる場合、設定した構成値が低すぎることを示しています。

次の値から開始して、システムのパフォーマンスをテストしながら増やします。

OraClrAgntパラメータ 初期値
max_sessions 25
max_task_threads 6
max_dispatchers 2

Oracle Database 10.2からOracle Database 11.2への.NETストアド・プロシージャの移行

次の方法に従って、.NETストアド・プロシージャをOracle Databaseリリース 10.2からリリース 11.2に移行できます。

  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.dlllibrary_namePROJECT1_DLLになります。

  2. 次の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"
    
  3. Oracle Database 10gリリース2(10.2)のOracle Data Pump Exportユーティリティを実行します。

    Expdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp include=PROCEDURE,FUNCTION
    
  4. Oracle Database 10gリリース 2(10.2)のORACLE_BASE\\ORACLE_HOME\bin\clrフォルダおよびそのサブフォルダからOracle Database 11gリリース 2(11.2)の同じディレクトリ構造内に、.NETストアド・プロシージャのアセンブリをコピーします。

  5. Oracle Database 11gリリース 2(11.2)データベースに対して、SYSDBA権限でDotNetSP_Grant.sqlを実行します。

  6. Oracle Database 11gリリース 2(11.2)データベースのOracle Data Pump Importユーティリティを実行します。

    impdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp
    

.NET 1.xストアド・プロシージャの.NET 2.0への必須の移行

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ストアド・プロシージャを分析して、このリリースに移行するのにコード変更が必要かを判断する必要があります。特に、次の点について調べる必要があります。

移行方法

.NET 1.xストアド・プロシージャをこのリリースで機能するようにするには、2つの方法が考えられます。

ODP.NET for .NET 1.xとODP.NET for .NET 2.0の間のコードの非互換性の処理

.NET 1.xストアド・プロシージャ内のODP.NETに関連する次のコードの非互換性を処理する必要がある可能性があります。

  • ODP.NET for .NET 2.0では、OracleParameter.OracleDbTypeInt32Doubleなどの数値型に設定されている場合、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.OracleDbTypeOracleDbType.Clobに設定されている場合、OracleParameter.Valueは、DBNull.ValueのかわりにOracleClob.Nullを返してnull値を示します。これは、ODP.NET for .NET 1.xの場合です。

Oracle Database Extensions for .NETリリース1.xと2.0の間のコードの非互換性の処理

接続型がパラメータとして.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ストアド・プロシージャの再コンパイルおよび再デプロイ

コードの非互換性が見つかった場合、ODP.NET for .NET 2.0を使用して.NET 1.xストアド・プロシージャを再コンパイルする必要があります。

コードの非互換性がなくても、.NET 1.xストアド・プロシージャを再コンパイルおよび再デプロイすることをお薦めします。処理されていない互換性の問題があった場合、再コンパイルにより、ランタイム・エラーが発生しなくなります。再コンパイルに成功した後、ストアド・プロシージャを再デプロイします。

ODP.NET for .NET 2.0を使用した.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ストアド・プロシージャを構成して実行するには、次の手順を実行します。

  1. .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をそこにコピーします。

  2. 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>
    

Oracle Database Extensions for .NETレジストリ・オプション

次の場所にあるWindowsレジストリ・エントリを使用して、Oracle Database Extensions for .NETに機能を追加できます。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORACLE_HOME\ODE

表2-2に、Oracle Database Extensions for .NETに機能を追加するレジストリ・キーおよびキーを説明するセクションをリストします。

表2-2レジストリ・オプション

レジストリ・キー セクション

.NETFramework

.NETランタイム・バージョンの選択


ProviderNull

NULL可能ODP.NET接続型の後方互換性


RecreateAppDomain

.NETアセンブリの簡易再デプロイの自動アンロード


TraceFileName

TraceFileName


TraceOption

TraceOption


TraceLevel

TraceLevel



.NETアセンブリの簡易再デプロイのアンロード

リリース 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アセンブリはアンロードされます。

NULL可能ODP.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ランタイム・バージョンの選択

データベース・コンピュータに複数の.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

TraceOptionは、トレース情報を1つのファイルに記録するか、スレッドごとの複数のファイルに記録するかを指定します。単一トレース・ファイルを指定した場合は、TraceFileNameに指定されたファイル名が使用されます。複数トレース・ファイル・オプションが要求された場合は、指定されたファイル名にスレッドIDが付加され、スレッドごとにトレース・ファイルが作成されます。

TraceOptionの有効値は次のとおりです。

0 = 単一のトレース・ファイル

1 = 複数のトレース・ファイル

注意: Oracle Data Provider for .NETのトレース・メカニズムを使用して、ODP.NET特定の問題を解決します。

TraceFileName

TraceFileNameは、トレース情報のロギングに使用されるファイル名を指定します。TraceOption0に設定されている場合、名前はそのまま使用されます。ただし、TraceOption1に設定されている場合は、指定されたファイル名にスレッドIDが付加されます。

TraceFileNameの有効値は、任意の有効なパス名およびファイル名です。

TraceLevel

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は、多数の処理不能な例外に対する防止策を提供しています。

extproc.exe構成ファイル

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>