Oracle Data Provider for .NET 


インストレーション・ガイドおよびリリース・ノート

リリース11.2.0.3.0 プロダクション

2011年5月

Copyright (c) Oracle Corporation 2011

このマニュアルには、Oracle Data Provider for .NET(ODP.NET)のプロダクション・ドキュメントの補足情報が記載されています。

 

インストールおよび設定に関する注意事項

  1.  製品の依存性

    ODP.NETには、Oracle Client 11.2.0.3.0またはOracle Instant Client 11.2.0.3.0が必要です。Oracle Instant Client 11.2.0.3.0は、ODP.NET 11.2.0.3.0インスタンスを新しくインストールする際に、Oracle Universal Installer(OUI)によって自動的にインストールされます。

  2.  ポリシーDLL

    ODP.NETをインストールすると、ODP.NETのポリシーDLLがGACに配置されるため、新しくインストールしたODP.NETバージョンが既存のアプリケーションで即時に使用されます。ただし、この動作が適切でない場合は、GACからポリシーDLLを削除してください。

  3.  レジストリ設定

    ODP.NETのレジストリ設定は、HKLM\Software\Oracle\ODP.NET\に格納されています。各バージョンのODP.NETで、それぞれのバージョンのキーの下にあるバージョン固有の設定が使用されます。新しいバージョンのODP.NETがインストールされると、新しいバージョンのキーが一連のデフォルト設定で作成されます。新しいキーでは、以前のバージョンのODP.NETから、デフォルトを含むいずれの設定も継承されません。このため、デフォルト設定を使用しない場合は、インストール後に再構成する必要があります。

  4. ホーム・セレクタ

    ホーム・セレクタを使用して特定のOracleホームをアクティブにすると、そのOracleホームのODP.NETが再構成されます。ただし、より新しいバージョンのODP.NET用のポリシーDLLは、GACから削除されません。このため、選択したOracleホームにインストールされているODP.NETバージョンをアプリケーションで使用するには、一部のポリシーDLLをGACから削除するか、または構成ファイルを使用して無効にする必要があります。

ODAC 11.2.0.3.0でのバグ修正

ODAC 11.2.0.3.0リリースのODP.NETバイナリは、RDBMS 11.2.0.3.0リリースで提供されたODP.NETバイナリとは異なります。今回のリリースには、RDBMS 11.2.0.3.0リリースで提供されたODP.NETの修正に加えて、次のバグ修正が含まれています。

  1. LINQ/ESQL問合せによって不正な順序の行を含む結果が戻される[Oracle Bug#10375435]

  2. String.Equal()を空文字列で実行した場合にORA-00932が発生する[Oracle Bug#10357727]

  3. 主キーにGUIDを使用した場合にContext.Refresh()によってInvalidCastExceptionが発生する[Oracle Bug#13420516]

  4. CLOB/NCLOB列にends-with関数を使用した場合にORA-00932が発生する[Oracle Bug#13357509]

  5. カスタム・マッピングを使用するとコンパイル・エラーが発生する[Oracle Bug#12597906]

注意: ここに記載したバグ修正は、RDBMS 11.2.0.3.0パッチ1で提供されるODP.NETバイナリにも含まれています。

Entity Frameworkに関するヒント、制限事項および既知の問題

  1. オーバーロードしたストアド・プロシージャはサポートされていません。このため、Entity Data Model(EDM)ウィザードに、オーバーロードした1つのストアド・プロシージャのみが表示されます。

  2. ピリオド(.)を含むストアド・プロシージャ名はサポートされていません。このため、名前にピリオド(.)を含むストアド・プロシージャはEDMウィザードに表示されません。

  3. INTERVAL DAY TO SECOND列およびINTERVAL YEAR TO MONTH列の値は、LINQ to Entities問合せまたはEntity SQL問合せのWHERE句内の文字列と比較できません。

  4. 使用しているOracle DatabaseでSQL Applyがサポートされていない場合に、LINQ to Entities問合せおよびEntity SQL(ESQL)問合せによって生成された問合せでSQL Applyの使用が必要になると、SQL構文エラーが発生します。この場合、内部例外メッセージに、データベースでAPPLYがサポートされていないことが示されます。

  5. ODP.NETでは、現在、Entity SQLのLIKE演算子で、文字範囲([]および[^])を許可するワイルドカードがサポートされていません。[Oracle Bug#11683837]

  6. ストアド・プロシージャまたはストアド・ファンクションが関数インポートの空の集合にマッピングされている場合、intを返す.NETスタブ・メソッドによって常に0が返されます。

  7. ODP.NET 11.2.0.3では、Code FirstおよびDbContext APIがサポートされていません。

  8. 識別子の最大長(30バイト)またはそれに近い値を持つ1つ以上の列名を含む表に対してLINQ問合せまたはESQL問合せを実行すると、生成されるSQLで制限を超える別名識別子が使用されるため、「ORA-00972: 識別子が長すぎます」エラーが発生します。

  9. XMLType列またはパラメータに2,000文字以上の文字列をバインドしようとした場合に、「ORA-00932: データ型が一致しません: -が予想されましたがNCLOBです」エラーが発生します。[Oracle Bug#12630958]

  10. LINQ/ESQL問合せのWHERE句に2,000文字以上の文字列または4,000バイト以上のバイト配列をバインドすると、「ORA-00932: データ型が一致しません」エラーが発生する場合があります。BLOB、CLOB、NCLOB、LONG、LONG RAWおよびXMLTYPE列にマッピングするエンティティ・プロパティをLINQ/ESQL問合せのWHERE句に使用すると、同じエラーが発生する場合があります。

  11. プロバイダ・マニフェスト・トークンは、Oracle Databaseのバージョン番号を示す最も重要な2桁である必要があります。たとえば、Oracle 11gR2データベースの場合、プロバイダ・マニフェスト・トークンは「11.2」になります。ODP.NET 11.2.0.3.0以上を使用している場合は、有効なプロバイダ・マニフェスト・トークンがモデルで適切に生成されます。

  12. .NETタイプでサポートできる精度を超える数値をフェッチしようとすると、「算術演算の結果オーバーフローが発生しました」という例外が発生する場合があります。この場合、LINQ問合せまたはESQL問合せで特定の.NETタイプまたはEDMタイプに値を代入することで、精度を制限して例外の発生を回避できます。この方法は、LINQ/ESQL問合せによって算出される列が、Oracleでは38までの精度を保持できる一方で、.NET Decimalでは値を代入しないかぎり表示できない場合に有効です。

  13. Oracle Databaseでは、NULLと空文字列が同様に処理されます。NULLまたは空文字列に関連する文字列の操作を実行すると、NULLが返されます。文字列をNULLと比較するには、LINQ問合せで等価演算子(x == NULL)を使用すると、生成されるSQLで「IS NULL」条件が使用されるため、NULLの状態を適切に検査できます。

  14. Model First(Visual Studioの「モデルからのデータベースの生成」)を使用する場合、文字列のEntityプロパティで固定長がtrue、Unicodeがfalse、最大長がMaxまたは(None)に設定されているSQLを生成しようとすると、エラーが発生します。この問題を回避するには、最大長に2,000を使用します。

  15. ODP.NETとともにEntity Frameworkアプリケーションを実行した際に「ストア・プロバイダ・ファクトリ型'Oracle.DataAccess.Client.OracleClientFactory'はIServiceProviderインタフェースを実装していません。」という例外メッセージが発生した場合は、machine.configのセクションの下にODP.NETのエンティティを追加する必要があります。machine.configにエントリを追加してこの問題を回避するには、ODACを再インストールします。他の問題を回避するには、新しいOracleホームにインストールします。

ヒント、制限事項および既知の問題

  1. OracleAQMessageオブジェクトでSenderIdを指定してエンキューすると、デキューされるメッセージの送信者IDの最後に「@ODP.NE」が追加されます。[Oracle Bug#7315542]

  2. OracleAQDequeueOptions.DeliveryModeをOracleAQMessageDeliveryMode.Bufferedとして指定し、OracleAQDequeueOptions.Correlationを指定した場合に、使用可能なメッセージがキューに存在しないと、「ORA-00942: 表またはビューが存在しません」エラーがDequeueメソッド起動またはDequeueArrayメソッド起動からスローされる場合があります。[Oracle Bug#7343633]

  3. Oracle Databaseバージョン10.1以前のバージョンでは、通常(グループ以外)の通知で、OracleAQMessageAvailableEventArgs.QueueNameが二重引用符で囲まれません。[Oracle Bug#8253957]

  4. OracleNotificationRequestオブジェクトのGroupingIntervalプロパティが0に設定されていると、アプリケーションでグループ通知が受信されない場合があります。[Oracle Bug#7373765]

  5. 9.2データベースで、OracleAQMessageのDelayプロパティをゼロ以外の値に設定してメッセージをエンキューすると、そのメッセージはWAITING状態のままになります。[Oracle Bug#8828674]

  6. 11.2.0.3.0より前のデータベース・バージョンでOracleConnectionオブジェクトのOpenWithNewPassword()メソッドを起動すると、ORA-1017エラーが発生します。[Oracle Bug#12876992]

  7. マッピングされたドライブにあるORACLE_HOMEまたはORACLE_BASEにWindows x64向けの.NET関連製品をインストールしようとすると、インストール中にOraProvCfg.exeによってSystem.IO.FileLoadException例外がスローされる場合があります。この問題を回避するには、OUIのインストールを実行中のシステムに、.NET Framework 2.0 SP2またはそれ以降をインストールします。[Oracle Bug#10225338]