Oracle Provider for OLE DB(OraOLEDB)


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

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

2011年5月

Copyright (c) Oracle Corporation 2011

このドキュメントでは、Oracle Provider for OLE DBドキュメントの補足情報について説明します。

 

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

COMコンポーネントであるOracle Provider for OLE DB (OraOLEDB)プロバイダが1つのマシンでアクティブにできるバージョンは1つのみです。

注意: Oracle 11gR1クライアントをまだインストールしていない場合は、OUIのインストール中に「使用可能な製品コンポーネント」画面のOracle Instant Clientのチェックを解除しないでください。そうしないと、エラーが発生してインストールは失敗し、その後製品が正常に機能しなくなります。


Oracle Technology Network

Oracle Provider for OLE DBのサンプル・コード、最新のパッチおよびその他の技術情報は、http://otn.oracle.com/tech/windows/ole_db/を参照してください 

 

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

パフォーマンス

 

* パフォーマンスを向上させるために、LONG/LONG RAW列にADOのAppendChunkメソッドを使用しないでください。かわりに、ADOのAddNewまたはUpdateメソッドを使用して、LONG/LONG RAW列全体を挿入または更新します。

 

* OraOLEDBドライバでオプティマイザ・ヒント構文として/*+ ... */を使用します。ヒント構文--+ ...は現在サポートされていません。

 

OLE DB .NETデータ・プロバイダでサポートされていないパラメータ型

 

* プロバイダは、LongVarChar、LongVarWChar、LongVarBinaryおよびBSTR IN/OUTをサポートしておらず、OLE DB .NETデータ・プロバイダでは、MicrosoftのOLE DB .NETデータ・プロバイダの既知の制限のため、OUTパラメータ型はサポートされません。

 

サポートされていないデータ型

 

* 信頼できるOracleデータ型MLSLABELは、OraOLEDBドライバではサポートされていません。

 

* 現在、プロバイダはオブジェクト・データ型をサポートしていません。

 

LOBデータ型

 

* 一度に複数の行のLOBを更新する際、コマンド・オブジェクトでは現在エラーが発生します。

次に例を示します。

UPDATE SomeTable SET LobCol = ?WHERE ...では、UPDATE文が表内の複数の行に影響する場合、エラーが発生します。この制限は、LOB(BLOB/CLOB)にのみ適用され、LONG(LONG/LONG RAW)には適用されません。

* ほとんどのLOB書込み操作(INSERTおよびUPDATE)には、プロバイダ内での複数の書込み操作が含まれるため、トランザクションでそのような操作を有効にしておくことをお薦めします。トランザクションを有効にすることで、コンシューマは障害時に書込み操作全体をロールバックできるようになります。これは、コマンド・オブジェクトまたはレコードセット・オブジェクトからLOBを書き込む際にお薦めします。

 

DBLINK

 

Oracle Databaseリンクを含む問合せを使用した行セットの作成を有効にするには、接続文字列属性DistribTxを無効にする必要があります。そのような行セットは、現在読取り専用に制限されています。

 

トランザクション

 

* 行セットのデータの整合性に影響する可能性があるため、ローカル・トランザクションまたはグローバル・トランザクションで、コマンド・インタフェースを使用したSQLのCOMMIT、ROLLBACKまたはSAVEPOINTを実行しないでください。OracleでのDDLはデータベースに対して暗黙的コミットを実行するため、この明示的トランザクション・モードでのDDLの実行(CREATE TABLE、ALTER VIEWなど)でも同じです。DDLは、自動コミット・モードでのみ実行してください。

 

* 自律型トランザクションのサポートを有効にするには、接続文字列属性DistribTxを無効にする必要があります。この機能を使用すると、コンシューマはCOMMITまたはROLLBACK(あるいはその両方)を持つストアド・プロシージャを実行できます。

ストアド・プロシージャでのコミット/ロールバックの実行には注意が必要です。OraOLEDBには、データがクライアント側でローカルにキャッシュされる行セットでのトランザクション機能があるため、オープン行セットを使用してストアド・プロシージャで明示的なコミット/ロールバックを行うと、行セットはデータベースと同期しなくなる可能性があります。このような場合、コミットおよびロールバック(中断)はすべてクライアント側(con.Commitまたはcon.Abort)から実行する必要があります。ユーザーがストアド・プロシージャで自律型トランザクションを使用している場合を除きます。これを使用することで、ストアド・プロシージャのトランザクションはメインのトランザクションから分離されるため、ローカライズされたコミット/中断での使用が可能になります。

自律型トランザクションの詳細は、Oracle11gのアドバンスト・アプリケーション開発者ガイドおよびPL/SQL言語リファレンスを参照してください。

 

ストアド・プロシージャ

 

オーバーロードされたPL/SQLストアド・プロシージャおよびファンクションでは、PROCEDURE_PARAMETERSスキーマ行セットは、最初にオーバーロードされたストアド・プロシージャ/ファンクションのパラメータ情報のみを返します。これは、OLE DBの仕様には現在オーバーロードされたプロシージャ/ファンクションのためのプロビジョニングがないためです。

大/小文字の区別

 

OraOLEDBは、スキーマ行セットの制限で指定されたオブジェクトの大/小文字がデータベースと完全に同一であることを想定しています。つまり、表EMPにアクセスするためにempを渡すことはできません。

次に例を示します。

Dim restrictions As Variant

  ...

  ' Schemarowset contains table EMP owned by SCOTT

  restrictions = Array(Empty, "SCOTT", "EMP", Empty)

  Set objRst = objCon.OpenSchema(adSchemaTables, restrictions)

  ...

  ' Schemarowset created with no rows

  restrictions = Array(Empty, "scott", "emp", Empty)

  Set objRst = objCon.OpenSchema(adSchemaTables, restrictions)

  ...

 

Microsoft Visual Basic 6.0における注意事項

 

プロジェクト参照としてMicrosoft ActiveX Data ObjectsおよびMicrosoft ActiveX Data Objectsレコードセット・ライブラリが含まれていることを確認します。

 

Microsoft Visual C++ 6.0における注意事項

 

OraOLEDB.hは、VC++プロジェクトの関連する.cppファイルに含まれる必要があります。また、#define DBINITCONSTANTSがプロジェクトのいずれかの.cppファイルに追加される必要があります。