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

この項では、Oracle Database Extensions for .NETのインストール、システム要件およびファイルの場所を説明します。

2.1 システム要件

Oracle Database Extensions for .NETの各リリースには、それぞれ固有のバージョン要件があります。次のシステム要件は、Oracle Database Extensions for .NETリリース 12.2にのみ適用されます。別のバージョンを使用する場合は、そのバージョン固有のドキュメントを参照してください。

  • Windows上のOracle Database 12.2。

    注意:

    Oracle Database Extensions for .NETは、Windowsプラットフォームでのみサポートされます。

  • Microsoft .NET Framework

    • Oracle Database Extensions for .NET Framework 2.0は、Microsoft .NET Framework 2.0、3.0、3.5、4、4.5および.NET Framework 4 Client Profileでのみサポートされます。

    • Oracle Database Extensions for .NET Framework 4は、Microsoft .NET Framework 4、4.5および.NET Framework 4 Client Profileでのみサポートされます。

    注意:

    Microsoft Framework 1.xは、Oracle Database Extensions for .NETリリース11.1.0.7.20からはサポートされていません。.NET Framework 1.xを必要とするストアド・プロシージャを持っている場合、このリリースで機能するよう、特別な手順をいくつか行う必要があります。

  • Oracle Data Provider for .NETリリース 12.2 (ストアド・プロシージャでのデータ・アクセスが必要な場合)。

  • Oracle Developer Tools for Visual Studio 12.1以上は、.NETストアド・プロシージャのデプロイに必要です。

    注意:

    Oracle Developer Tools for Visual Studioは、Oracleデータベースではリリースされません。OTNのOracle .NET Developer Centerから取得できます。

2.2 .NETストアド・プロシージャおよび機能の要件

.NETストアド・プロシージャまたはファンクションは次の要件を満たす必要があります。

  • public staticメソッドが宣言されていること。

  • コンストラクタまたはデストラクタでないこと。

  • Oracleネイティブ・データベース・タイプと互換性のあるパラメータ・タイプの使用。

2.3 インストール

この項では、Oracle Database Extensions for .NETのインストールの結果について説明します。

内容は次のとおりです。

2.3.1 インストールおよび最初の使用

Oracle Databaseの以前のリリースでは、Oracle Database Extensions for .NETでカスタム・インストールが必要でした。Oracle Database 12c以降、Oracle Database Extensions for .NETは常にインストールされますが、有効にはなっておらず、Windowsサービスは作成されません。

Oracle Database Extensions for .NETをはじめて使用する前に、次のことを行います。

  1. Oracle Database 12cをインストールして、インストーラでのデータベースの作成を許可するか、またはデータベース・ソフトウェアのみをインストールし、Database Configuration Assistantを使用して、後でデータベースを作成します。
  2. 次のように実行して、Oracle Database Extensions for .NETのWindowsサービスを作成します。

2.3.2 Oracle CLRサービスおよびOracleホーム・ユーザー・アカウント

Oracle Database 12c以降、Oracle CLRサービスはOracleホーム・ユーザーとして実行されます。現在、データベース・インストールでは、ユーザーに対してインストール時に、Oracleホーム・ユーザー・アカウント(このアカウントを使用して様々なOracleサービスを実行する)を指定するための方法が提供されています。この権限の付与されていないアカウントには、ローカル・ユーザーまたは管理者権限のないドメイン・ユーザーを指定できます。

Oracle Databaseの以前のリリースでは、これらのCLRサービスは、インストーラによって自動的に作成されました。現在これらは、インストール後にOraClrCtl.exeユーティリティを使用して手動で作成します。

データベースのインストールではOracle CLRサービスは作成されませんが、Oracle Database Extensions for .NETが適切に動作するために、データベースで必要な構成を行います。次の情報が含まれます。

2.3.3 OraClrAgentサービスを作成および実行するためのOraClrCtl Utilityの使用

OraClrCtl.exeユーティリティは、ORACLE_BASE\\ORACLE_HOME\binディレクトリにOraClrAgntサービスを作成し、データベースのインストール中に指定したOracleホーム・ユーザー・アカウントを使用して実行するように構成します。このサービスは、OracleORACLE_HOMEClrAgentとしてサービス・コントロール・パネルを介してアクセスでき、ORACLE_HOMEはOracleホームを表します。

また、OraClrCtl.exeは、OraClrAgntサービスを開始、停止および削除できます。

oraclrctl.exe -start -host computer-pc5

OraClrCtl.exeには次の引数を指定できます。

-new: 新しいサービスを作成および開始します。

-delete: サービスを削除します。

-start: サービスを開始します。

-stop: サービスを停止します。

-host hostname: 指定されたホスト上で操作を実行します。ホストが指定されていない場合は、ローカル・ホストがデフォルトで指定されます。

OraClrCtl.exeTRUE (1)またはFALSE (0)を返し、SUCCESSまたはFAILUREメッセージを表示します。失敗した場合、メッセージには、OSエラー番号および対応するメッセージが表示されます。

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

OraClrAgntOraClrCtl.exeによって作成されます。このサービスは、OracleORACLE_HOMEClrAgentとしてサービス・コントロール・パネルを介してアクセスでき、ORACLE_HOMEはOracleホームを表します。

このサービスには、表2-1にリストされているパラメータを指定できます。

これらのパラメータ値は、コントロール・パネル・サービスのプロパティ・ウィンドウにある開始パラメータの一部として指定できます。この場合、パラメータ値は保存されず後でサービスを再起動する場合、再指定する必要があります。

パラメータ値を永続的にするには、このサービスの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\oraclr12.dll"

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

関連項目:

OraClrAgntOraClrCtl.exeによって作成される方法の詳細は、「Oracle CLRサービスおよびOracle Homeユーザー・アカウント」を参照してください。

2.4.1 OraClrAgntサービス・パラメータ

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

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

パラメータ 説明

agent_sid

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

ENVS

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

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

詳細は、『Oracle Database 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 Call Interfaceプログラマーズ・ガイド』の表F-2 agtctlの構成パラメータ

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

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

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

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

OraClrAgntパラメータ 初期値

max_sessions

25

max_task_threads

6

max_dispatchers

2

2.5 インストール後のファイルの場所

OraClr12.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ディレクトリ(またはサブディレクトリ)にコピーされます。

2.6 リスナーおよびtnsnamesファイル

Oracle Database Extensions for .NET用に構成されたlistener.oraおよびtnsnames.oraファイルの代表例を次に示します。デフォルトでは、Oracle Database Extensions for .NETではSIDとしてCLRExtProcが使用されますが、これはDatabase Configuration Assistant(DBCA)を使用して変更できます。

listener.oraファイル

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\database_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oracle\database_1)
      (PROGRAM = extproc)
      (ENVS="EXTPROC_DLLS=ONLY:C:\oracle\database_1\bin\oraclr12.dll")
    )
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
     
    )
  )

tnsnames.oraファイル

ORACLE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = user.us.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oracle.us.example.com)
    )
  )
 
ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )
 
EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

2.7 Oracle Database 12cリリース1 (12.1)からOracle Database 12cリリース2 (12.2)への.NETストアド・プロシージャの移行

次の方法に従って、.NETストアド・プロシージャをOracle Database 12cリリース1 (12.1)からOracle Database 12cリリース2 (12.2)に移行できます。

  1. Oracle Database 12cリリース1 (12.1)データベースの.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 12cリリース1 (12.1)のOracle Data Pump Exportユーティリティを実行します。

    非プラガブル・データベースでは、次のコマンドを実行します。

    Expdp system schemas="schema_name" directory=ORACLECLRDIR dumpfile=DotNetSP.dmp include=PROCEDURE,FUNCTION
    

    プラガブル・データベースでは、次のコマンドを実行します。

    1. サーバーのDotNetSP.dmpへのパスとして、ディレクトリnameを作成します。

      create directory name as 'path to DotNetSP.dmp on the server'; 
    2. Oracle Database 12c リリース1 (12.1)データベースに対して、Oracle Data Pump Exportユーティリティを実行します。

      expdp system@TNS alias for pluggable database schemas="schema_name" 
      directory=name dumpfile=DotNetSP.dmp include=PROCEDURE,FUNCTION

      ここで、nameは、手順3.aで指定されたディレクトリ名です。

    3. 手順3.aで指定されたディレクトリ名を削除します。

      drop directory name           

      ここで、nameは、手順3.aで指定されたディレクトリ名です。

  4. Oracle Database 12cリリース1 (12.1)のORACLE_BASE\\ORACLE_HOME\bin\clrフォルダおよびそのサブフォルダからOracle Database 12cリリース2 (12.2)の同じディレクトリ構造内に、.NETストアド・プロシージャのアセンブリをコピーします。

  5. Oracle Database 12c リリース2 (12.2)データベースに対して、SYSDBADotNetSP_Grant.sqlを実行します。

  6. プラガブル・データベースに移行する場合は、次のようにします。

    1. サーバーのDotNetSP.dmpへのパスとして、ディレクトリnameを作成します。

      create directory name as 'path to DotNetSP.dmp on the server'; 
      
    2. Oracle Database 12c リリース2 (12.2)データベースに対して、Oracle Data Pump Importユーティリティを実行します。

      impdp system@TNS alias for pluggable database schemas="schema_name" directory=name dumpfile=DotNetSP.dmp  
      

      ここで、nameは、手順6.aで指定されたディレクトリ名です。

    3. 手順6.aで指定されたディレクトリのnameを削除します。

      drop directory name
      

      ここで、nameは、手順6.aで指定されたディレクトリ名です。

  7. プラガブル・データベースに移行しない場合は、次のようにします。

    Oracle Database 12c リリース2 (12.2)データベースに対して、Oracle Data Pump Importユーティリティを実行します。

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

    注意:

    ディレクトリORACLECLRDIRは削除しないでください。

2.8 Oracle Database 11gリリース2 (11.2)からOracle Database 12cリリース2 (12.2)への.NETストアド・プロシージャの移行

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

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

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

  5. Oracle Database 12c リリース2 (12.2)データベースに対して、SYSDBADotNetSP_Grant.sqlを実行します。

  6. プラガブル・データベースに移行する場合は、次のようにします。

    1. サーバーのDotNetSP.dmpへのパスとして、ディレクトリnameを作成します。

      create directory name as 'path to DotNetSP.dmp on the server'; 
      
    2. Oracle Database 12c リリース2 (12.2)データベースに対して、Oracle Data Pump Importユーティリティを実行します。

      impdp system@TNS alias for pluggable database schemas="schema_name" 
      directory=name 
      dumpfile=DotNetSP.dmp 
      

      ここで、nameは、手順6.aで作成したディレクトリ名です。

    3. 手順6.aで指定されたディレクトリのnameを削除します。

      drop directory name   

      ここで、nameは、手順6.aで作成したディレクトリ名です。

  7. プラガブル・データベースに移行しない場合は、次のようにします。

    Oracle Database 12c リリース2 (12.2)データベースに対して、Oracle Data Pump Importユーティリティを実行します。

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

    注意:

    ディレクトリORACLECLRDIRは削除しないでください。

2.9 .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にダウングレードする必要があります。

2.9.1 コード変更の必要性の判断

.NET 1.xストアド・プロシージャを分析して、このリリースに移行するのにコード変更が必要かを判断する必要があります。特に、次の点について調べる必要があります。

  • 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 (以上)の間のコードの非互換性。

  • ADO.NET 1.xおよびADO.NET 2.0の移行の問題。

2.9.2 移行方法

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

  • ODP.NET for .NET 2.0 (以上)を使用して.NET 1.xストアド・プロシージャを再コンパイルおよび再デプロイします。この方法を強くお薦めします。また、コード変更が必要な非互換性がある場合、この方法が必要です。

  • ODP.NET for .NET 2.0 (以上)を使用して.NET 1.xストアド・プロシージャを構成して実行します。この方法では、再コンパイルが不要ですが、処理されていない非互換性がある場合、ランタイム・エラーが発生する可能性があります。

2.9.3 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の場合です。

2.9.4 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開発者ガイド』(Microsoft Windows用)のnull値可能なODP.NET接続型の下位互換性に関する説明を参照してください。

2.9.5 ODP.NET for .NET 2.0 (以上)を使用した.NET 1.xストアド・プロシージャの再コンパイルおよび再デプロイ

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

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

2.9.6 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. 「Oracle Database 11gリリース2 (11.2)からOracle Database 12cリリース2 (12.2)への.NETストアド・プロシージャの移行」で示されている手順と同様の手順に従い、ストアド・プロシージャをOracle Database 12cリリース2 (12.2)に移行します。
  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>
    

2.10 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アセンブリの簡易再デプロイのアンロード」

TraceFileLocation

TraceFileLocation

TraceOption

TraceOption

TraceLevel

TraceLevel

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

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

ODP.NET for .NET 2.0 (以上)は、OracleDecimalなど非接続型に対する既存のサポートに加えて、ODP.NET接続型の静的Nullプロパティをサポートします。また、これらの型の各パブリック・プロパティ、IsNullをサポートし、各型のオブジェクトに値が割り当てられているかもチェックします。

これで、.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値の場合)。

2.10.3 .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はこのリリースではサポートされていません。

2.10.4 デバッグ・トレース

Oracle Database Extensions for .NETは、1つ以上のトレース・ファイルにすべてのOracle Database Extensions for .NETをロギングできるデバッグ・トレースのサポートを提供します。トレースが生成されるたびに、Windowsイベント・ログ・エントリが作成されます。

このリリース以降、TraceFileLocationオプション(後述)が設定されていない場合、デフォルトでは、トレース・ファイルはWindowsユーザーの一時フォルダに作成されます。

<Windowsユーザーの一時フォルダ>\ODE\trace>

Windowsユーザーの一時フォルダは、Windows TMPまたはTEMP環境変数など、ローカルのWindows設定で定義されています。通常、C:\tempまたはC:\Users\<user name>\AppData\Local\Tempです。

注意:

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

次に示すレジストリ設定は、次の場所に構成してください。

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORACLE_HOME\ODE

2.10.4.1 TraceOption

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

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

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

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

2.10.4.2 TraceFileLocation

TraceFileLocation: トレース・ファイルの保存先ディレクトリ(たとえば、D:\traces\)を指定します。デフォルトのTraceFileLocationは、<Windowsユーザーの一時フォルダ>\ODE\trace>です。

2.10.4.3 TraceLevel

TraceLevelは、Oracle Database Extensions for .NETでトレースのレベルを指定します。

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

0 = なし

1 = 入力および終了情報

関連項目:

『Oracle Data Provider for .NET開発者ガイド』(Microsoft Windows用)のデバッグ・トレースに関する項

2.11 extproc.exe.config構成ファイル

Oracle Database Extensions for .NETは、ORACLE_BASE\\ORACLE_HOME\Binディレクトリにあるextproc.exe.config構成ファイルを読み込み、Oracle Database Extensions for .NETおよびOracle Data Provider for .NETのアセンブリの場所などの構成値を検索します。

Oracle Database Extensions for .NET 12.2以降、legacyUnhandledExceptionPolicyは有効になりません。そのため、デフォルトでは、.NETストアド・プロシージャを実行するプロセス内で未処理の例外が発生すると、プロセスは終了します。ただし、プロセスが未処理の例外で終了しないように、extproc.exe.configファイルは、legacyUnhandledExceptionPolicyを有効にすることで12.2以前と同じ動作をするように構成することができます。

legacyUnhandledExceptionPolicyが有効化されたextproc.exe.config構成ファイルの例を次に示します。

<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="1"/>
  </runtime>
</configuration>