Oracle Provider for OLE DB
原典情報: %ORACLE_HOME%\oledb\readme.txt
この章では、Oracle Provider for OLE DBドキュメントの補足情報を説明します。
目次
1 重要なインストール情報
2 10gリリース1(10.0.1.2.0)の新機能
3 リリース9.2.0.4.0の新機能
4 リリース9.2.0.4.0の新機能
5 Oracle Technology Network Japan
6 ヒント、制限事項および既知の問題
OraOLEDBプロバイダはCOMコンポーネントで、1つのマシンで一度にアクティブにできるのは1つのバージョンだけです。
- Oracleグリッドのサポート
OraOLEDBはグリッドに対応しており、開発者はアプリケーション・コードを変更せずにOracleデータベースのグリッド・サポートを利用できます。
- Oracle Database 10gでは次のデータ型がサポートされるようになりました。
BINARY_DOUBLE
BINARY_FLOAT
- 複数ホームのサポート
10gリリース1(10.1.0.2.0)から、OraOLEDBは複数のOracleホームにインストールできます。ただし、COMコンポーネントであるため、1台のコンピュータでアクティブにできるのは1つのインスタンスだけです。つまり、現在(最新)のインストールによって以前のインストールが非アクティブになります。複数のホームを利用できるようにするために、一部のOraOLEDBファイルにはバージョン番号が含まれます。また、HOMEIDを使用する必要があります。
- Oracle9iで導入された次のデータ型がサポートされます。
- TIMESTAMP
- TIMESTAMP WITH TIME ZONE
- TIMESTAMP WITH LOCAL TIME ZONE
- INTERVAL YEAR TO MONTH
- INTERVAL DAY TO SECOND
- UseSessionFormat
デフォルトのNLSセッションの形式を使用するか、セッション中にOraOLEDBでこれらの形式の一部をオーバーライドするかを指定します。
有効な値は0(FALSE)および1(TRUE)です。デフォルトはFALSEで、OraOLEDBがデフォルトのNLSセッションの形式の一部をオーバーライドします。値がTRUEの場合、OraOLEDBはデフォルトのNLSセッションの形式を使用します。
- VCharNull
VARCHAR OUTパラメータのヌル文字での終了をストアド・プロシージャから有効または無効にします。有効な値は0(無効)および1(有効)です。デフォルトは1で、VARCHAR OUTパラメータがヌル文字で終了することを示します。値0は、VARCHAR OUTパラメータにスペースが埋め込まれることを示します。
この属性のデフォルト値は、\\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\OLEDBレジストリ・キーの下にあります。この属性が接続時に指定されない場合、デフォルトのレジストリ値が使用されます。
接続文字列が使用可能なとき、ストアド・プロシージャのINおよびIN OUT CHARパラメータをWHERE句で使用する場合は、アプリケーションによって明示的にパラメータにスペースを埋め込む必要があります。
- SPPrmDefVal
アプリケーションがストアド・プロシージャのパラメータ値を指定していない場合に、デフォルト値とNULL値のどちらを使用するかを指定します。有効な値は0(FALSE)および1(TRUE)です。デフォルトはFALSEで、OraOLEDBによってNULL値が渡されます。値がTRUEの場合、OraOLEDBではデフォルト値が使用されます。
この属性のデフォルト値は、\\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\OLEDBレジストリ・キーの下にあります。この属性が接続時に指定されない場合、デフォルトのレジストリ値が使用されます。
Oracle Provider for OLE DBのサンプル・コード、最新パッチおよびその他の技術情報は、http://otn.oracle.co.jp/software/tech/windows/ole_db/index.htmlを参照してください。
6.1 パフォーマンス
- パフォーマンスを向上させるには、ADOメソッドAppendChunkをLONG/LONG RAW列に対して使用しないでください。かわりに、ADOのAddNewメソッドまたはUpdateメソッドを使用してLONG/LONG RAW列全体を挿入または更新します。
- raOLEDBドライバではオプティマイザ・ヒントの構文として/*+ ... */を使用します。--+ ...というヒントの構文は現在サポートされていません。
6.2 OLE DB .NET Data Providerでサポートされていないパラメータ・タイプ
- このプロバイダでは、Microsoft社のOLE DB .NET Data Providerの既知の制限により、OLE DB .NET Data ProviderでのLongVarChar、LongVarWChar、LongVarBinaryおよびBSTR IN/OUTおよびOUTのパラメータ・タイプはサポートされていません。
6.3 サポートされていないデータ型
- Trusted Oracleデータ型のMLSLABELはOraOLEDBドライバではサポートされていません。
- このプロバイダでは、オブジェクト・データ型は現在サポートされていません。
6.4 LOBについて
- コマンド・オブジェクトでは現在、一度に複数の行でLOBを更新するとエラーが発生します。
次に例を示します。
UPDATE SomeTable SET LobCol = ? WHERE ...が表の複数の行に影響する場合はエラーになります。この制限はLOB(BLOBまたはCLOB)のみ対するもので、LONG(LONGまたはLONG RAW)には該当しません。
- ほとんどのLOB書込み(INSERTおよびUPDATE)操作では、プロバイダ内で複数の書込み操作が行われるため、このような操作に対してトランザクションを使用可能にすることをお薦めします。トランザクションを使用可能にすると、コンシューマで障害時に書込み操作全体をロールバックできるようになります。コマンド・オブジェクトまたはレコードセット・オブジェクトからLOBを書き込むときにこの方法をお薦めします。
6.5 DBLINK
Oracle DBLINKを含む問合せを使用して行セットを作成できるようにするには、接続文字列属性DistribTxを無効にする必要があります。このような行セットは現在読取り専用に制限されています。
6.6 トランザクション
- ローカル・トランザクションまたはグローバル・トランザクションでは、行セットのデータ整合性に影響を与える可能性があるため、SQLのCOMMIT、ROLLBACKまたはSAVEPOINTをコマンド・インタフェースを使用して実行しないでください。OracleのDDLではデータベースに対して暗黙のコミットが実行されるため、明示的なトランザクション・モードでDDL(CREATE TABLE、ALTER VIEWなど)を実行する場合も同様です。DDLは自動コミット・モードでのみ実行してください。
- 自律型トランザクションのサポートを有効にするには、接続文字列属性DistribTxを無効にする必要があります。この機能を使用すると、コンシューマではCOMMITまたはROLLBACK、あるいはその両方を含むストアド・プロシージャを実行できます。
ストアド・プロシージャでのコミットおよびロールバックは注意して実行してください。OraOLEDBでは、データがクライアント側でローカルにキャッシュされる行セットに対してトランザクション機能が提供されるため、ストアド・プロシージャでコミットまたはロールバックを明示的に実行すると、行セットが開いている場合は行セットとデータベースが同期しなくなることがあります。このような場合、すべてのコミットとロールバック(異常終了)をクライアント側から実行する必要があります(con.Commitまたはcon.Abort)。例外は、ユーザーがストアド・プロシージャで自律型トランザクションを使用している場合です。これを使用すると、ストアド・プロシージャのトランザクションはメイン・トランザクションから切り離され、ローカルでのコミットまたは異常終了が可能になります。自律型トランザクションはOracle8iリリース8.1.5に導入されており、それ以前のリリースのRDBMSでは使用できません。
自律型トランザクションの詳細は、『Oracle Databaseアプリケーション開発者ガイド-基礎編』および『PL/SQLユーザーズ・ガイドおよびリファレンス』を参照してください。
6.6 ストアド・プロシージャ
オーバーロードされたPL/SQLストアド・プロシージャおよびファンクションの場合、PROCEDURE_PARAMETERSスキーマ行セットは、最初にオーバーロードされたストアド・プロシージャまたはファンクションに対してのみパラメータ情報を返します。OLE DB仕様では、オーバーロードされたプロシージャおよびファンクションに対して現在対応していないためです。
6.7 大/小文字の区別
現在、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)
...
6.8 Microsoft Visual Basic 6.0の注意事項
Microsoft ActiveX Data Objects LibraryおよびMicrosoft ActiveX Data Objects Recordset Libraryがプロジェクト参照として含まれている必要があります。
6.9 Microsoft Visual C++ 6.0の注意事項
OraOLEDB.hをVC++プロジェクト内の関連する.cppファイルに含める必要があります。また、#define DBINITCONSTANTSをプロジェクトのいずれかの.cppファイルに追加する必要があります。