Oracle Data Provider for .NET
インストレーション・ガイドおよびリリース・ノート
リリース11.2.0.3.0 プロダクション
2011年5月
Copyright (c) Oracle Corporation 2011
このマニュアルには、Oracle Data Provider for .NET(ODP.NET)のプロダクション・ドキュメントの補足情報が記載されています。
インストールおよび設定に関する注意事項
- 製品の依存性
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)によって自動的にインストールされます。
- ポリシーDLL
ODP.NETをインストールすると、ODP.NETのポリシーDLLがGACに配置されるため、新しくインストールしたODP.NETバージョンが既存のアプリケーションで即時に使用されます。ただし、この動作が適切でない場合は、GACからポリシーDLLを削除してください。
- レジストリ設定
ODP.NETのレジストリ設定は、HKLM\Software\Oracle\ODP.NET\に格納されています。各バージョンのODP.NETで、それぞれのバージョンのキーの下にあるバージョン固有の設定が使用されます。新しいバージョンのODP.NETがインストールされると、新しいバージョンのキーが一連のデフォルト設定で作成されます。新しいキーでは、以前のバージョンのODP.NETから、デフォルトを含むいずれの設定も継承されません。このため、デフォルト設定を使用しない場合は、インストール後に再構成する必要があります。
- ホーム・セレクタ
ホーム・セレクタを使用して特定の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の修正に加えて、次のバグ修正が含まれています。
- LINQ/ESQL問合せによって不正な順序の行を含む結果が戻される[Oracle Bug#10375435]
- String.Equal()を空文字列で実行した場合にORA-00932が発生する[Oracle Bug#10357727]
- 主キーにGUIDを使用した場合にContext.Refresh()によってInvalidCastExceptionが発生する[Oracle Bug#13420516]
- CLOB/NCLOB列にends-with関数を使用した場合にORA-00932が発生する[Oracle Bug#13357509]
- カスタム・マッピングを使用するとコンパイル・エラーが発生する[Oracle Bug#12597906]
注意: ここに記載したバグ修正は、RDBMS 11.2.0.3.0パッチ1で提供されるODP.NETバイナリにも含まれています。
Entity Frameworkに関するヒント、制限事項および既知の問題
- オーバーロードしたストアド・プロシージャはサポートされていません。このため、Entity Data Model(EDM)ウィザードに、オーバーロードした1つのストアド・プロシージャのみが表示されます。
- ピリオド(.)を含むストアド・プロシージャ名はサポートされていません。このため、名前にピリオド(.)を含むストアド・プロシージャはEDMウィザードに表示されません。
- INTERVAL DAY TO SECOND列およびINTERVAL YEAR TO MONTH列の値は、LINQ to Entities問合せまたはEntity SQL問合せのWHERE句内の文字列と比較できません。
- 使用しているOracle DatabaseでSQL Applyがサポートされていない場合に、LINQ to Entities問合せおよびEntity SQL(ESQL)問合せによって生成された問合せでSQL Applyの使用が必要になると、SQL構文エラーが発生します。この場合、内部例外メッセージに、データベースでAPPLYがサポートされていないことが示されます。
- ODP.NETでは、現在、Entity SQLのLIKE演算子で、文字範囲([]および[^])を許可するワイルドカードがサポートされていません。[Oracle Bug#11683837]
- ストアド・プロシージャまたはストアド・ファンクションが関数インポートの空の集合にマッピングされている場合、intを返す.NETスタブ・メソッドによって常に0が返されます。
- ODP.NET 11.2.0.3では、Code FirstおよびDbContext APIがサポートされていません。
- 識別子の最大長(30バイト)またはそれに近い値を持つ1つ以上の列名を含む表に対してLINQ問合せまたはESQL問合せを実行すると、生成されるSQLで制限を超える別名識別子が使用されるため、「ORA-00972: 識別子が長すぎます」エラーが発生します。
- XMLType列またはパラメータに2,000文字以上の文字列をバインドしようとした場合に、「ORA-00932: データ型が一致しません: -が予想されましたがNCLOBです」エラーが発生します。[Oracle Bug#12630958]
- LINQ/ESQL問合せのWHERE句に2,000文字以上の文字列または4,000バイト以上のバイト配列をバインドすると、「ORA-00932: データ型が一致しません」エラーが発生する場合があります。BLOB、CLOB、NCLOB、LONG、LONG RAWおよびXMLTYPE列にマッピングするエンティティ・プロパティをLINQ/ESQL問合せのWHERE句に使用すると、同じエラーが発生する場合があります。
- プロバイダ・マニフェスト・トークンは、Oracle Databaseのバージョン番号を示す最も重要な2桁である必要があります。たとえば、Oracle 11gR2データベースの場合、プロバイダ・マニフェスト・トークンは「11.2」になります。ODP.NET 11.2.0.3.0以上を使用している場合は、有効なプロバイダ・マニフェスト・トークンがモデルで適切に生成されます。
- .NETタイプでサポートできる精度を超える数値をフェッチしようとすると、「算術演算の結果オーバーフローが発生しました」という例外が発生する場合があります。この場合、LINQ問合せまたはESQL問合せで特定の.NETタイプまたはEDMタイプに値を代入することで、精度を制限して例外の発生を回避できます。この方法は、LINQ/ESQL問合せによって算出される列が、Oracleでは38までの精度を保持できる一方で、.NET Decimalでは値を代入しないかぎり表示できない場合に有効です。
- Oracle Databaseでは、NULLと空文字列が同様に処理されます。NULLまたは空文字列に関連する文字列の操作を実行すると、NULLが返されます。文字列をNULLと比較するには、LINQ問合せで等価演算子(x == NULL)を使用すると、生成されるSQLで「IS NULL」条件が使用されるため、NULLの状態を適切に検査できます。
- Model First(Visual Studioの「モデルからのデータベースの生成」)を使用する場合、文字列のEntityプロパティで固定長がtrue、Unicodeがfalse、最大長がMaxまたは(None)に設定されているSQLを生成しようとすると、エラーが発生します。この問題を回避するには、最大長に2,000を使用します。
- ODP.NETとともにEntity Frameworkアプリケーションを実行した際に「ストア・プロバイダ・ファクトリ型'Oracle.DataAccess.Client.OracleClientFactory'はIServiceProviderインタフェースを実装していません。」という例外メッセージが発生した場合は、machine.configのセクションの下にODP.NETのエンティティを追加する必要があります。machine.configにエントリを追加してこの問題を回避するには、ODACを再インストールします。他の問題を回避するには、新しいOracleホームにインストールします。
ヒント、制限事項および既知の問題
- OracleAQMessageオブジェクトでSenderIdを指定してエンキューすると、デキューされるメッセージの送信者IDの最後に「@ODP.NE」が追加されます。[Oracle Bug#7315542]
- OracleAQDequeueOptions.DeliveryModeをOracleAQMessageDeliveryMode.Bufferedとして指定し、OracleAQDequeueOptions.Correlationを指定した場合に、使用可能なメッセージがキューに存在しないと、「ORA-00942: 表またはビューが存在しません」エラーがDequeueメソッド起動またはDequeueArrayメソッド起動からスローされる場合があります。[Oracle Bug#7343633]
- Oracle Databaseバージョン10.1以前のバージョンでは、通常(グループ以外)の通知で、OracleAQMessageAvailableEventArgs.QueueNameが二重引用符で囲まれません。[Oracle Bug#8253957]
- OracleNotificationRequestオブジェクトのGroupingIntervalプロパティが0に設定されていると、アプリケーションでグループ通知が受信されない場合があります。[Oracle Bug#7373765]
- 9.2データベースで、OracleAQMessageのDelayプロパティをゼロ以外の値に設定してメッセージをエンキューすると、そのメッセージはWAITING状態のままになります。[Oracle Bug#8828674]
- 11.2.0.3.0より前のデータベース・バージョンでOracleConnectionオブジェクトのOpenWithNewPassword()メソッドを起動すると、ORA-1017エラーが発生します。[Oracle Bug#12876992]
- マッピングされたドライブにあるORACLE_HOMEまたはORACLE_BASEにWindows x64向けの.NET関連製品をインストールしようとすると、インストール中にOraProvCfg.exeによってSystem.IO.FileLoadException例外がスローされる場合があります。この問題を回避するには、OUIのインストールを実行中のシステムに、.NET Framework 2.0 SP2またはそれ以降をインストールします。[Oracle Bug#10225338]