ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 チューニングと問題解決

この章では、Oracle Objects for OLE(OO4O)のチューニング、問題解決およびエラー処理について説明します。

内容は次のとおりです。

パフォーマンス・チューニングに関するヒントとテクニック

次の各項は、Oracle Objects for OLEを使用するアプリケーションのパフォーマンス・チューニングに役立ちます。

この項の内容は次のとおりです。

OO4OオブジェクトのEarly Binding

Early Binding技法によって、OO4Oオブジェクトは(Visual Basicが提供する汎用的なオブジェクト型ではなく)本来のオブジェクト型に厳密に型変換されます。これらのオブジェクトは、後でOO4Oオブジェクトとして再分類された汎用的なオブジェクトとしてではなく、OO4Oオブジェクトとして直接宣言されます。Early Binding技法によってOO4Oのタイプ・ライブラリへの頻繁なアクセスが削減されるため、パフォーマンスが向上します。次に、例を示します。

'Early binding of OO4O objects 
Dim OraSession as OraSession 
Dim OraDatabase as OraDatabase 
Dim OraDynaset as OraDynaset 
 
'Generic binding of OO4O objects 
 
Dim OraSession as Object 
Dim OraDatabase as Object 
Dim OraDynaset as Object 

OO4OオブジェクトのEarly Bindingを使用するには、Visual BasicプロジェクトのOracleインプロセス・サーバー・タイプ・ライブラリを参照する必要があります。

チューニングとカスタマイズ

データ・アクセスは、ダイナセットのキャッシュ・パラメータとフェッチ・パラメータを変更することによって、チューニングおよびカスタマイズできます。FetchLimitパラメータを高い値に設定すると、各要求でフェッチされる行数が増えるため、Oracle Databaseへのネットワーク・トリップの回数が減少し、結果的にパフォーマンスが向上します。

FetchLimitパラメータのサイズを大きくすることによる弊害は、クライアント側のメモリーの必要量が増加すること、およびディスク上の一時キャッシュ・ファイルでのスワップ・データが増加することです。FetchLimitの値は、クライアント・コンピュータの構成と予測される問合せ結果のサイズに合わせて適切に設定する必要があります。

FetchLimitの値は、次の方法で設定できます。

  • CreateCustomDynasetメソッドを使用する方法

  • WindowsレジストリにあるOO4Oエントリのパラメータを変更する方法

Windowsでは、レジストリ・キーはHKEY_LOCAL_MACHINE、サブキーはsoftware\oracle\KEY_HOMENAME\oo4oです(ここで、HOMENAMEは適切なOracleホームです)。OO4Oをインストールすると、次のようなセクションがレジストリに作成されます。

"FetchLimit" = 100

複数オブジェクト参照の回避

不要なオブジェクト参照を使用した不適切なコーディング技法は、パフォーマンスに影響を与えます。ダイナセット・オブジェクトのナビゲーションでは、OraFieldsコレクションとOraFieldオブジェクトへの参照数を少なくしてください。次のコードは、効率的でない例です。

'Create the OraDynaset Object 
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 
 
'Traverse until EOF is reached 
Do Until OraDynaset.EOF 
    msgbox OraDynaset.Fields("sal").value 
OraDynaset.MoveNext 
Loop 

このコードでは、OraDynasetコレクション、OraFieldsコレクションおよびOraFieldオブジェクトがループのたびに参照されます。OO4Oではフィールド・コレクション・オブジェクトに関する処理が改善されていますが、オートメーション・オブジェクトへの複数の参照は、基礎となるOLE/COMオートメーションのレイヤーを介しているため、実行が遅れます。

次の例では、ダイナセットのフィールド・コレクションではなく、フィールド・オブジェクトを介してフィールドを参照する方法を示しています。テストでは、この少量の追加コードによってパフォーマンスが大幅に向上することが確認されています。

Dim flds() As OraField 
Dim i, fldcount As Integer 
 
' Create the OraDynaset Object 
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 
' Get the field count, and output the names 
fldcount = OraDynaset.Fields.Count 
ReDim flds(0 To fldcount - 1) 
 
For i = 0 To fldcount - 1 
Set flds(i) = OraDynaset.Fields(i) 
Next I 
'Traverse until EOF is reached 
 
Do Until OraDynaset.EOF 
   msgbox Flds(5).Value 
   msgbox Flds(6).Value 
OraDynaset.MoveNext 
Loop 

複数のオブジェクトを介して参照されるメソッドまたはオブジェクトは非効率な場合がありますが、それを回避するためのコードの追加は、必ずしも確実に時間が節約されるとはかぎりません。フィールド参照は複数回発生する可能性が高いことから、最初はフィールド参照から着手することが効果的です。

パラメータのバインド

OO4Oは、SQL文の処理時に、パラメータ・オブジェクトのバインドを有効および無効にする方法を提供します。この方法は、OraParameterオブジェクトのAutoBindDisableAutoBindEnableメソッドを介して実行されます。SQL文にパラメータ名が含まれていない場合は、OraParameterオブジェクトを無効にすることでパラメータ・オブジェクトへの不要な参照を回避できます。この方法は、主にPL/SQLプロシージャで記述されたアプリケーションに特に有効です。次に、例を示します。

Set OraDatabase = OraSession. OpenDatabase("Exampledb", "scott/tiger", 0&) 
 
'Add the job input parameter with initial value MANAGER. 
OraDatabase.Parameters.Add "job", "MANAGER", 1 
 
'Add the deptno input parameter with initial value 10. 
OraDatabase.Parameters.Add "deptno", 10, 1 
 
'Add the job input parameter with initial value MANAGER. 
OraDatabase.Parameters.Add "EmpCur", 0, 1 
OraDatabase.Parameters("Empcur").ServerType = ORATYPE_CURSOR 
 
'Disable the job parameter for now. 
OraDatabase.Parameters("job").AutoBindDisable 
 
set OraSqlStmt = CreateSQL("Begin GetEmpData(:Empcur, :deptno) End;",0&) 

PL/SQL文の処理中は、jobパラメータ・オブジェクトが参照されていないことに注意してください。

配列処理

OO4Oは、OraParamArrayオブジェクトを介したOracleデータベースへの配列インタフェースをサポートしています。この配列インタフェースによって、大量のデータを1回のネットワーク・トリップで転送できます。これは、ExecuteSQLまたはCreateSQLメソッドを介してPL/SQL文またはSQL文を処理するときに特に役立ちます。たとえば、配列処理なしでリモート・データベースに100行を挿入するためには、ExecuteSQLまたはCreateSQLを100回コールする必要があり、100回のネットワーク・トリップが発生します。次に、例を示します。

For I = 1 to 100 
   OraParameter("EMPNO").Value = xxxx 
   OraParameter("ENAME").Value = 'yyyy' 
   OraParameter("DEPTNO").Value = zz 
   OraDatabase.ExecuteSql("insert into emp values (:EMPNO,:ENAME,:DEPTNO)"); 
Next I 

次の例では、配列を使用し、ネットワーク・トリップは1回のみ行います。

'ENAMEARR,:EMPNOARR,:DEPTNOARR are parameter arrays 
 
For I = 1 to 100 
   OraParameter("EMPNOARR").Put_Value xxxx, I 
   OraParameter("ENAMEARR").Put_Value 'yyyy' ,I 
   OraParameter("DEPTNOARR").Put_Value zz, I 
Next I 
 
'Now call the ExecuteSQL only once 
OraDatabase.ExecuteSql("insert into emp values(:EMPNOARR," & _
              ":ENAMEARR, :DEPTNOARR)"); 

関連項目:

配列の使用方法の詳細は、「OraParamArrayオブジェクト」を参照してください。

読取り専用、前方参照専用のダイナセットの使用

アプリケーションでダイナセットを更新しない場合は、ORADYN_READONLY(H4)オプションを使用して読取り専用のダイナセットを作成できます。このオプションによって、SQL文をローカルで解析するためのオーバーヘッドとSQL文を実行するためのネットワーク・トリップ回数を削減し、パフォーマンスを向上させることができます。

アプリケーションでスクロール可能なダイナセットが不要な場合は、ORADYN_NOCACHE(H8)オプションを使用して前方参照専用のダイナセットを作成できます。このオプションによって、ローカル・キャッシュ・ファイルを作成するためのオーバーヘッドと、そのファイルからデータを読み書きするためのオーバーヘッドを削減し、パフォーマンスを向上させることができます。

PL/SQL一括収集機能の使用

このPL/SQL一括収集機能を使用すると、PL/SQLの無名ブロックを使用して、1回のネットワーク・トリップで大量のデータを選択できます。OO4OのOraDynasetオブジェクトは、SQL文の実行中にデータの配列を選択します。このため、ネットワーク・ラウンドトリップ回数の増加、キャッシュ・ファイルや内部オブジェクトの追加作成などのオーバーヘッドが生じます。このオーバーヘッドが理由でダイナセットを使用しない場合、この機能はデータ配列の選択に役立ちます。選択されるデータは、OraParamArrayオブジェクトまたはOraCollectionオブジェクトのいずれかとしてバインドできます。

次の例では、OraCollectionインタフェースを使用したPL/SQL一括収集機能を示します。ここでは、1回のネットワーク・ラウンドトリップにより、少ないオーバーヘッドでenamesの配列が選択される方法を示します。

Set OraDatabase = OraSession.OpenDatabase("Exampledb", "scott/tiger", 0&) 
 
'create a VARRAY type ENAMELIST in the database 
OraDatabase.ExecuteSQL ("create type ENAMELIST as VARRAY(50) OF VARCHAR2(20)")
 
'create a parameter for ENAMELIST VARRAY 
OraDatabase.Parameters.Add "ENAMES", Null, ORAPARM_OUTPUT, 247,"ENAMELIST"  

'execute the statement to select all the enames from ename column of emp table
OraDatabase.ExecuteSQL ("BEGIN select ENAME bulk collect into" & _ 
                ":ENAMES from emp; END;") 
 
'here OraParameter object returns EnameList OraCollection 
Set EnameList = OraDatabase.Parameters("ENAMES").Value 
 
'display all the selected enames 
FOR I = 1 to EnameList.Size 
   msgbox Enamelist(I) 
NEXT I 

LONG RAWからLOBまたはBFILEへの移行

次の新しい型が、Oracle8iから導入されました(「ラージ・オブジェクト(LOB)の使用」を参照)。

  • BLOB

  • CLOB

  • BFILE

こららの型の仕様により、OO4Oは、LONGまたはLONG RAW型を使用するよりもはるかに迅速にそれらにアクセスできます。そのため、既存のLONG RAWコードをBLOBCLOBおよびBFILEに変換し、新しいアプリケーションではLOBおよびBFILEのみを使用するようにしてください。LOBおよびBFILE型にアクセスするには、下位互換性のためにのみ提供されているLONG RAWの大量処理メソッドのかわりに、OraLOBオブジェクトを使用することをお薦めします。OraLOBでは最大限のコントロールが可能であることに注意してください。

LOBデータ型は、いくつかの点でLONGLONG RAWデータ型と異なります。

  • 1つの表に複数のLOB列を含めることはできますが、LONG列は1つのみです。

  • 1つ以上のLOB列を含んだ表はパーティション化できますが、LONG列を含む表はパーティション化できません。

  • LOBの最大サイズが4GBであるのに対し、LONGの最大サイズは2GBです。

  • LOBはデータへのランダム・アクセスをサポートしますが、LONGデータ型がサポートするのは順次アクセスのみです。

  • LOBデータ型(NCLOBを除く)はユーザー定義オブジェクト型の属性にできますが、LONGデータ型はできません。

  • LOBのクライアント側でのバッファリングは、複数の少量書込みの最適化に使用されます。

  • LOBデータは、データベース表領域(BFILE型)以外のオペレーティング・システム・ファイルに格納できます。

移行を容易にするために、次の各メソッドではBLOBCLOBおよびBFILE型を使用できます。

LONG RAWの大量処理メソッドを使用している古いアプリケーションの場合は、移行の際に小規模なコード変更が必要です。主コードを変更するときは、使用する前に、NULLのBLOBCLOB型を空白で更新する必要があります。

接続プールの使用

OO4Oの接続プールは、OraDatabaseオブジェクトのプールです。OO4Oの接続プールは、(多くの場合)すでに接続しているOraDatabaseオブジェクトのグループです。データベースとの間で接続と切断を繰り返す必要のあるアプリケーション(ASP Webアプリケーションなど)の場合は、接続プールを使用するとパフォーマンスが向上します。

Oracle Objects for OLEのエラー処理

OO4Oのエラーは、次のカテゴリに分類されます。

OLEオートメーション・エラー

OO4Oオートメーション・サーバーのプログラム・インタフェースは、OO4Oインプロセス・オートメーション・サーバーです。メソッドの実行中に発生するエラーは、多くの場合、OLEオートメーション・エラー(ERR = 440ERROR$="OLE自動化エラー:: :0")として報告されます。

エラーが発生した場合は、OraSessionおよびOraDatabaseオブジェクトのLastServerErrプロパティをチェックして、Oracleデータベース・エラーが発生しているかどうかを確認してください。LastServerErrが0(ゼロ)以外の場合、エラーはOO4Oオートメーション・サーバーで発生しています。

OO4Oオートメーション・サーバーのエラーを確認するには、ERROR$ファンクションが戻した文字列内の"OIP-NNNN"(NNNN表5-1に示すエラー番号)を調べます。


注意:

これらの値は、ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリのoraconst.txtファイルにあります。

表5-1に、Oracle OLEオートメーション・エラーを示します。

表5-1 Oracle OLEオートメーション・エラー

定数 説明

OERROR_ADVISEULINK

4096

内部エラー: アドバイザリ接続が無効です。

OERROR_POSITION

4098

空のダイナセットからフィールド値を取り出そうとしました。

OERROR_NOFIELDNAME

4099

無効なフィールド名が指定されました。

OERROR_NOFIELDINDEX

4100

無効なフィールド索引が指定されました。索引の範囲は0からFieldCount-1です。

OERROR_TRANSIP

4101

すでに進行中のトランザクションに、BeginTrans操作が指定されました。

OERROR_TRANSNIPC

4104

最初にBeginTransを実行せずにCommitTrans操作が指定されました。

OERROR_TRANSNIPR

4105

最初にBeginTransを実行せずにRollback操作が指定されました。

OERROR_NODSET

4106

内部エラー: システムが、存在しないダイナセットを破棄しようとしました。

OERROR_INVROWNUM

4108

無効な行を参照しようとしました。このエラーは、EOFまたはBOFTRUEの場合、または現在の行が削除されてレコードの移動が行われていない場合に発生します。

OERROR_TEMPFILE

4109

データ・キャッシュ用の一時ファイルを作成しようとして、エラーが発生しました。

OERROR_DUPSESSION

4110

CreateSessionまたはCreateNamedSessionメソッドを使用して、すでに存在する名前付きセッションを作成しようとしました。

OERROR_NOSESSION

4111

内部エラー: システムが、存在しないセッションを破棄しようとしました。

OERROR_NOOBJECTN

4112

存在しない(フィールド・コレクション以外の)コレクションの名前付きオブジェクトを参照しようとしました。

OERROR_DUPCONN

4113

内部エラー: 接続名が重複しています。

OERROR_NOCONN

4114

内部エラー: システムが、存在しない接続を破棄しようとしました。

OERROR_BFINDEX

4115

無効なフィールド索引が指定されました。索引の範囲は0からCount -1です。

OERROR_CURNREADY

4116

内部エラー: システムが行に移動しようとしましたが、この操作はダイナセットでサポートされていません。

OERROR_NOUPDATES

4117

更新不可のダイナセット・データを変更しようとしました。

OERROR_NOTEDITING

4118

最初にEditメソッドを実行せずにフィールド値を変更しようとしました。

OERROR_DATACHANGE

4119

ローカル・キャッシュのデータを編集しようとしましたが、Oracle Databaseのデータが変更されていました。

OERROR_NOBUFMEM

4120

データ・バインディング用バッファがメモリー不足です。

OERROR_INVBKMRK

4121

無効なブックマークが指定されました。

OERROR_BNDVNOEN

4122

内部エラー: バインド変数が使用可能になっていません。

OERROR_DUPPARAM

4123

Addメソッドを使用して名前付きパラメータを作成しようとしましたが、その名前はすでに存在しています。

OERROR_INVARGVAL

4124

無効なオフセット・パラメータまたは無効な長さのパラメータがGetChunkメソッドに渡されたか、またはAppendChunkメソッドの使用中に内部エラーが発生しました。

OERROR_INVFLDTYPE

4125

LONGまたはLONG RAW型ではないフィールドに対して、GetChunkまたはAppendChunkメソッドを使用しようとしました。

OERROR_INVARG

4126

引数に無効な値が入力されました。

OERROR_TRANSFORUP

4127

SELECT ... FOR UPDATE操作が、最初にBeginTrans操作を実行せずに指定されました。

OERROR_NOTUPFORUP

4128

SELECT ... FOR UPDATE操作が指定されましたが、その問合せは更新不可です。

OERROR_TRANSLOCK

4129

CommitまたはRollbackが実行されましたが、SELECT ... FOR UPDATE操作が実行中です。

OERROR_CACHEPARM

4130

無効なキャッシュ・パラメータが指定されました。CacheBlocksパラメータの最大値は127です。

OERROR_FLDRQROWID

4131

ROWID(LONGまたはLONG RAW型)が必要なフィールドを参照しようとしましたが、ROWID値がありませんでした。

OERROR_OUTOFMEMORY

4132

内部エラー: メモリーが足りません。

OERROR_MAXSIZE

4135

AddTableメソッドで指定された要素のサイズが、この変数型の許容最大サイズを超えています。詳細は、「AddTableメソッド」を参照してください。

OERROR_INVDIMENSION

4136

AddTableメソッドに指定されたサイズが無効(負のサイズ)です。詳細は、「AddTableメソッド」を参照してください。

OERROR_ARRAYSIZ

4138

INSERTUPDATEおよびDELETE文で使用されている配列パラメータのサイズが等しくありません。

OERROR_ARRAYFAILP

4139

配列を処理中にエラーが発生しました。詳細は、Windowsディレクトリのoo4oerr.logを参照してください。

OE_CLIPFAIL

4141

内部エラー: クリップボードをオープンまたはクローズできませんでした。

OE_NOSOURCE

4143

UpdateResourceメソッドにソース文字列が指定されていません。

OE_INVSOURCE

4144

UpdateSourceメソッドに無効なソース・タイプが指定されました。

OE_PLSQLDYN

4145

PL/SQLカーソルから作成したダイナセットに対し、SQLプロパティを設定しようとしました。

OERROR_CREATEPOOL

4147

このセッションのデータベース・プールがすでに存在します。

OERROR_GETDB

4148

未使用のデータベース・オブジェクトをプールから取得できません。

OE_INVINPUTTYP

4149

入力型がフィールドまたはパラメータの型と互換性がありません。

OE_NOEDITONCLONE

4150

クローンのオブジェクトを編集しようとしました。

OE_BNDCHGTYPERR

4152

パラメータ配列の型、または拡張型の配列を変更しようとしました。


非ブロック化エラー

表5-2に、非ブロック化エラーを示します。

表5-2 非ブロック化エラー

定数 説明

OERROR_NONBLKINPROGRESS

4153

非ブロック操作が進行中です。

OERROR_NONONBLKINPROGRESS

4154

処理は非ブロック操作の実行中にのみ有効です。


Findメソッドの解析機能エラー

Findメソッドの解析機能エラーは、解析機能がFindメソッド内の式を評価できないときに発生します。このエラーは、エラーの原因となった式の部分を示します。

表5-3に、Findメソッドの解析機能エラーを示します。

表5-3 Findメソッドの解析機能エラー

定数 説明

OERROR_STACK_OVER

4496

スタックがオーバーフローしています。

OERROR_SYNTAX

4497

構文エラーです。

OERROR_MISPLACED_PAREN

4498

カッコの位置が適切ではありません。

OERROR_MISPLACED_QUOTE

4499

引用符の位置が適切ではありません。

OERROR_MISSING PAREN

4500

警告: 右カッコが欠落しています。

OERROR_EXPECTED_PAREN

4501

左カッコが必要です。

OERROR_PARSER_UNKNOWN

4502

不明な解析機能エラー状態です。

OERROR_INVALID_FUNCTION

4503

サポートされない構文です。

OERROR_INVALID_COLUMN

4504

無効な列名です。

OERROR_MAX_TOKEN

4505

トークン・サイズが最大値を超えています。

OERROR_PARSER_DATA_TYPE

4506

サポートされないデータ型です。

OERROR_UNEXPECTED_TOKEN

4507

予期しないトークンが見つかりました。

OERROR_END_OF_CLAUSE

4508

予期しない句の終わりが見つかりました。


Findメソッド・ランタイム・エラー

Findメソッドのランタイム・エラーは、システムがfind式を評価できないときに発生します。このエラーは、ごくまれに発生します。発生した場合、解析機能は不正なコードを生成することもあります。

表5-4に、Findメソッド・ランタイム・エラーを示します。

表5-4 Findメソッド・ランタイム・エラー

定数 説明

OERROR_INVALID_INSTR

4516

内部エラー: 指示が無効です。

OERROR_STACK_ERROR

4517

内部エラー: スタックのオーバーフローまたはアンダーフローです。

OERROR_CONVERT_TYPES

4518

無効な型変換です。

OERROR_RUNTIME_DATA_TYPE

4519

無効なデータ型です。

OERROR_INVALID_SQL_ARG

4520

SQLファンクションに引数がありません。

OERROR_INVALID_COMPARE

4521

無効な比較です。

OERROR_SELECT_DUAL

4522

dualからのSELECTに失敗しました。

OERROR_DUAL_DATATYPE

4523

dualからのSELECTに無効なデータ型があります。

OER_OPER

4524

演算子の使用が無効です。


OraObjectインスタンス・エラー

表5-5に、OraObjectインスタンス・エラーを示します。

表5-5 OraObjectインスタンス・エラー

定数 説明

OERROR_NOOBJECT

4796

クライアント側のオブジェクト・キャッシュでOraObjectオブジェクト・インスタンスの作成に失敗しました。

OERROR_BINDERR

4797

SQL文へのOraObjectオブジェクト・インスタンスのバインディングに失敗しました。

OERROR_NOATTRNAME

4798

OraObjectオブジェクト・インスタンスの属性名の取得に失敗しました。

OERROR_NOATTRINDEX

4799

OraObjectオブジェクト・インスタンスの属性索引の取得に失敗しました。

OERROR_INVINPOBJECT

4801

バインド操作に対する入力オブジェクト型が無効です。

OERROR_BAD_INDICATOR

4802

フェッチしたOraObjectインスタンスの標識構造が無効です。

OERROR_OBJINSTNULL

4803

NULLOraObjectインスタンスの操作に失敗しました。「IsNull(OraObject)プロパティ」を参照してください。

OERROR_REFNULL

4804

NULLRef値のPin操作に失敗しました。「IsRefNull(OraRef)プロパティ」を参照してください。


LOBエラー

表5-6に、LOBエラーを示します。

表5-6 LOBエラー

定数 説明

OERROR_INVSEEKPARAMS

4897

LOB読取り/書込み操作に指定したシーク値が無効です。

OERROR_LOBREAD

4898

Read操作に失敗しました。

OERROR_LOBWRITE

4899

Write操作に失敗しました。

OEL_INVCLOBBUF

4900

入力バッファがCLOB書込み操作用の文字列型ではありません。

OEL_INVBLOBBUF

4901

入力バッファがBLOB書込み操作用のバイト型ではありません。

OERROR_INVLOBLEN

4902

LOB書込み操作のバッファ長が無効です。

OERROR_NOEDIT

4903

このモードでのWriteTrimAppendCopy操作は許可されていません。

OERROR_INVINPUTLOB

4904

バインド操作に対する入力LOBが無効です。

OERROR_NOEDITONCLONE

4905

クローンLOBオブジェクトに対するWriteTrimAppendCopy操作は許可されていません。

OERROR_LOBFILEOPEN

4906

指定したファイルをLOB操作でオープンできませんでした。

OERROR_LOBFILEIOERR

4907

LOB操作でファイルのReadまたはWrite操作に失敗しました。

OERROR_LOBNULL

4908

NULLのLOBの操作に失敗しました。「IsNull(OraLOB/BFILE)プロパティ」を参照してください。


Oracle Streamsアドバンスト・キューイング・エラー

表5-7に、Oracle Streamsアドバンスト・キューイング・エラーを示します。

表5-7 Oracle Streamsアドバンスト・キューイング・エラー

定数 説明

OERROR_AQCREATEERR

4996

OraAQオブジェクトの作成でエラーが発生しました。

OERROR_MSGCREATEERR

4997

AQMsgオブジェクトの作成でエラーが発生しました。

OERROR_PAYLOADCREATEERR

4998

ペイロード・オブジェクトの作成でエラーが発生しました。

OERROR_MAXAGENTS

4999

サブスクライバの最大数を超えています。

OERROR_AGENTCREATEERR

5000

AQAgentオブジェクトの作成でエラーが発生しました。



関連項目:

OraAQオブジェクト

OraCollectionエラー

表5-8に、OraCollectionエラーを示します。

表5-8 OraCollectionエラー

定数 説明

OERROR_COLLINSTNULL

5196

NULLOraCollectionの操作に失敗しました。「IsNull(OraCollection)プロパティ」を参照してください。

OERROR_NOELEMENT

5197

指定した索引に対する要素が存在していません。

OERROR_INVINDEX

5198

無効なコレクションの索引が指定されました。

OERROR_NODELETE

5199

VARRAYコレクション型の削除操作はサポートされていません。

OERROR_SAFEARRINVELEM

5200

スカラー要素型でない型を含むコレクションから変数SafeArrayは作成できません。


OraNumberエラー

表5-9に、OraNumberエラーを示します。

表5-9 OraNumberエラー

定数 説明

OERROR_NULLNUMBER

5296

NULLOraNumberオブジェクトの操作に失敗しました。


Oracleエラー

最新のOracleエラー・テキストは、OraSessionまたはOraDatabaseオブジェクトのLastServerErrLastServerErrTextプロパティから入手できます。

  • OraSessionオブジェクト

    OraSessionオブジェクトのLastServerErrLastServerErrTextプロパティは、OpenDatabaseメソッドに関するエラーなど、接続に関連するすべてのエラーを戻します。

  • OraDatabaseオブジェクト

    OraDatabaseオブジェクトのLastServerErrLastServerErrTextプロパティは、CreateDynasetCreateSQLおよびExecuteSQLメソッドに関するエラーなど、Oracleカーソルに関連するすべてのエラーを戻します。

Oracle Data Controlエラー

Oracle Data Controlエラーは、Oracleデータ・コントロール固有のエラーです。データ・コントロールに視覚的にアクセスしている間、OO4Oオートメーション・サーバー固有のエラーは、ODCERR_AUTOMATIONのエラー・コードとともにOLEオートメーション・サーバー・エラーとして報告されます。Oracle Data Control固有のエラー・コードは、Error()イベントのDataErrパラメータから取り出されます。

表5-10に、Oracle Data Controlエラーを示します。

表5-10 Oracle Data Controlエラー

定数 説明

ODCERR_INITOIP

28000

Oracleインプロセス・サーバーの初期化に失敗しました。レジストリを調べて、Oracleインプロセス・サーバーの正しい位置を調べる必要があります。

ODCERR_OLEQE

28001

内部エラー。インプロセス・サーバー・インタフェースの問合せに失敗しました。

ODCERR_AUTOMATION

28003

Oracleインプロセス・サーバーのエラーが発生しました。

ODCERR_NODYNASET

28007

初期化する前にOracle Data Controlにアクセスしようとしました。

ODCERR_FIELDINDEX

28009

バインド済コントロールが、無効なフィールド索引にアクセスしようとしました。

ODCERR_FIELDNAME

28013

バインド済コントロールが、無効なフィールド名にアクセスしようとしました。

ODCERR_MEMORY

28014

内部エラー。バインド済コントロールから、要求したバインディングにメモリーを割り当てようとして、エラーが発生しました。

ODCERR_BMKTYPE

28015

Oracle Data Controlは、要求された種類のブックマークをサポートしていません。

ODCERR_CONVERSION

28016

Oracle Data Controlは、要求された型にフィールド値を変換できませんでした。

ODCERR_SETSESSION

28017

セッションのプロパティの設定は許可されていません。

ODCERR_SETDATABASE

28018

データベースのプロパティの設定は許可されていません。

ODCERR_BLOBUPDATE

28019

Oracle Data Controlは、PICTUREまたはRAWデータをバインド済コントロールから直接更新しません。AppendChunk()メソッドを使用してください。

ODCERR_DYN_NOCACHE

28020

ORADYN_NOCACHEオプションを指定して作成されたダイナセットには、Recordsetプロパティを設定できません(データ・コントロールに接続されるバインド済コントロールでは、しばしば双方向のナビゲーションが必要になります)。

ODCERR_DYN_NOMOVEFIRST

28021

ORADYN_NOMOVEFIRSTオプションで作成されたダイナセットにRecordsetプロパティは設定できません。



関連項目:

AppendChunkメソッド

問題解決

この項では、次の内容に関連する一般的なエラーについて説明します。


関連項目:

エラーに関する詳細情報は、『Oracle Databaseエラー・メッセージ』を参照してください。

OLE初期化エラーまたはOLEオートメーション・エラー

OLEの初期化エラーとオートメーション・エラーの最も多い原因は、ソフトウェアがインストールされていないこと、または正しくインストールされていないことです。指定したソフトウェアが正しくインストールされていることを確認してください。次に、メソッド名とプロパティ名が正しく指定されていること、Oracleオブジェクトがすべてオブジェクト型として宣言されていることを確認してください。

表5-11に、OLEエラーの原因と解決策を示します。

表5-11 OLEエラーの原因と解決策

考えられる原因 解決策

使用しているシステムに、Microsoft OLEオートメーションまたはランタイム・ファイルが存在しないか、存在していても古いバージョンのファイルです。

次のような最新バージョンのファイルがインストールされていることを確認してください。

  • mfc42.dll

  • oleaut32.dll

  • ole32.dll

Oracle Objects for OLEのオブジェクト情報がWindowsの登録データベースに登録されていません。

Oracle Objects for OLEを再インストールするか、またはregedt32.exeファイルを実行して情報を登録します。「Oracle Objects for OLEの再配布可能ファイル」を参照してください。

使用しているシステムに、Oracle Required Support Filesがありません。

  • oraclient*.dll

  • orageneric*.dll

  • oracommon*.dll

  • oracore*.dll

  • oranls*.dll

OO4Oのreadme.htmファイルをチェックし、必要なOracle Databaseクライアントのバージョンを確認してインストールしてください。

使用しているシステムに、Oracleネットワーク製品がないか、またはファイルの位置がPATHで設定されていません。

Oracleネットワーク製品をインストールするか、またはPATHに環境変数に追加して、ファイルが存在するディレクトリを示してください。

メソッド名またはプロパティ名のスペルが正しくありません。

『Oracle Objects for OLE開発者ガイド』(このガイド)を調べて、正しいスペルに修正してください。

間違ったオブジェクトからメソッドまたはプロパティを参照しました。

『Oracle Objects for OLE開発者ガイド』(このガイド)を調べて、正しいオブジェクトに修正してください。

使用しているシステムに、oraansiVER.dllファイルが含まれていません。

Oracle Objects for OLEを再インストールするか、またはこれらのファイルが存在するディレクトリをPATH環境変数に追加してください。

注意: VER はバージョンを表します。


Oracleネットワークのエラー

Oracleネットワークのエラーで最も多い原因は、接続情報の指定が間違っていることです。Oracle Objects for OLEの接続情報の指定は、Open Database Connectivity(ODBC)を使用する場合とは異なります。Oracle Objects for OLEの使用前に、接続情報を正しく指定していることを検証し、次に、ネットワークの接続が正しく動作していることを確認してください。接続テストの情報と受け取る可能性のあるOracleネットワークのエラー情報は、該当するOracleネットワーク製品のドキュメントに記載されています。

表5-12に、Oracleネットワークのエラーを示します。

表5-12 Oracleネットワークのエラー

考えられる原因 解決策

ConnectプロパティまたはOpenDatabaseメソッドへの引数が正しくありません。

ConnectプロパティまたはOpenDatabaseメソッドの項を参照してください。

DatabaseNameプロパティまたはOpenDatabaseメソッドへの引数が正しくありません。

DatabaseNameプロパティまたはOpenDatabaseメソッドの項を参照してください。

Oracleネットワーク製品がシステムに含まれていません。

Oracleネットワーク製品ソフトウェアをインストールしてください。


アクセス違反

アクセス違反の最も頻度の高い原因は、OO4Oオートメーション・サーバー、Oracle Required Support FilesまたはOLEを必要とする他のアプリケーションの実行中に、Oracle Objects for OLEをインストールすることです。これを回避するには、Windowsの開始直後、他のアプリケーションの実行前に、Oracle Objects for OLEをインストールしてください。

表5-13に、アクセス違反を示します。

表5-13 アクセス違反

考えられる原因 解決策

SYSTEMディレクトリ内またはPATH上のディレクトリで、Oracle Objects for OLEファイルが重複しています。

重複しているファイルを削除します。oipVER.dllとoipVER.tlbファイルは、必ずORACLE_BASE\\ORACLE_HOME\binディレクトリに配置する必要があります。

SYSTEMディレクトリ内またはPATH上のディレクトリで、Oracle Required Support FilesのDLLが重複しています。

重複しているファイルを削除します。通常、Oracle Required Support FilesのDLLはORACLE_BASE\\ORACLE_HOME \binディレクトリに配置されます。

  • oraclient*.dll

  • orageneric*.dll

  • oracommon*.dll

  • oracore*.dll

  • oranls*.dll

SYSTEMディレクトリ内またはPATH上のディレクトリで、OLEのDLLが重複しています。

重複しているファイルを削除します。OLEのDLL(「OO4Oファイルの場所」の項にリストされています)は、必ず\systemディレクトリに配置する必要があります。