DAV のトラブルシューティング

DAV に必要な ACL

DAV を使用しているときに、ユーザーが DB2® 対応 Notes データベースにアクセスしようとして問題が発生した場合、各ユーザーの ACL エントリが Domino サーバー上の Domino ディレクトリにあるそのユーザーのユーザー文書の [ユーザー名] フィールドの最初のエントリと同じであることを確認してください。

データ例外エラー

AIX® を使用している場合、倍精度浮動小数点数にマッピングされている Notes の数値フィールドに値 -2.225E-308 を DAV で設定すると、Domino コンソールに次のような DB2 データ例外エラーが表示されます。

SQL0302N The value of a host variable in the EXECUTE or OPEN statement is too large for its corresponding use. SQLSTATE=22003

DB2 CLP から同じ値を同じフィールドに設定しても、エラーは発生しません。このエラーは、倍精度浮動小数点による数値表現の制限が原因で発生します。このエラーを回避するには、負の数は -1.79769E+308 から -2.225E-307 まで、正の数は 2.225E-308 から 1.79769E+308 までの範囲で設定する必要があります。

Select ステートメントの使用に関連するエラー

DB2 のコマンドラインプロセッサウィンドウから SELECT ステートメントを通じて Access ビューからの選択を実行した際に次のようなエラーが返された場合、管理者にお問い合わせください。

SQL0443N Routine "ISREADER" (specific name "") has returned an error SQLSTATE with diagnostic text "The server is not responding. The server may be down or you ". SQLSTATE=04004

また、『Domino Administrator ヘルプ』 をインストールしている場合は、「SELECT の使用に関連するエラーの解決」項の説明に従ってこのエラーを解決することもできます。http://www.lotus.com/ldd/doc にアクセスし、『Domino Administrator 7 ヘルプ』をダウンロードしてください。

SQL 更新の実行時のエラー

DAV 経由で SQL 更新の実行を試みて次のエラーが出力された場合、DAV が作成された後に DB2 Access ビューの定義が変更されたことを示しています。

DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0443N  Routine "*ATENOTE2" (specific name "") has returned an error SQLSTATE with diagnostic text "15219 : DB2 Access View definition has the wrong version for this program". SQLSTATE=04009

DAV を再ビルドして (DB2 で削除し、DB2 で作成してデータを埋め込む)、最新の設計を利用することをお勧めします。

TIMEDATES の DAV へのエクスポート

Notes TIMEDATE は日付、時刻、タイムゾーン、サマータイムのインジケータを保存できますが、DB2 のタイムスタンプは日付と時刻だけを保存します。DB2 では、すべての日付と時刻は DB2 サーバーのタイムゾーンのローカル日付および時刻であることを想定しています。そのため、TIMEDATE を DAV へエクスポートする場合や、Query ビューで DB2 から TIMESTAMPS を読み取る場合 (DAV からのものか、他の DB2 テーブルからのものかに関わりなく)、時刻が正しく表示されないことがあります。

DAV で日付と時刻を保存するためには 2 つのオプションがあります -- ローカル時刻と、GMT に変更 (標準化) です。日付と時刻の処理方法を選択するには、[アクセスビューエントリ] プロパティページの [詳細] タブを使用し、次に選択するオプションに応じて [タイムゾーン変換に GMT を標準とする] フィールドを設定します。

注: 既存の DAV についてこの設定を変更する場合、DAV を再構築しなければなりません。

ゴーストエントリ

主要文書と返答文書の両方が含まれるデータベースの DAV を作成した場合、データベースから主要文書を削除しても、返答文書はデータベースまたは DAV から削除されません。返答文書はゴースト文書への返答として保存され、DB2 から表示することができます。ただし、SQL を使用して DAV の情報を SELECT 処理する照会ビューの場合、ディスカッションデータベースでのビューと同じように機能し、主要文書も同時に選択されている返答文書だけがビューに表示されます。

DAV での日付範囲の挿入

DAV 内で SQL を使用して文書の日付範囲を挿入または更新するとき、日付範囲を DB2 の完全なタイムスタンプで、yyyy-mm-dd-hh.mm.ss.subsec (例、2005-12-12-08.06.30.123456) のように指定しなければなりません。このように指定しない場合、値は null として挿入されます。

区切り文字を使用して DAV で複数の値を挿入する

DAV では、フィールドごとに区切り文字を指定することができます。複数の値を区別するために異なる区切り文字を使用して DB2 からデータを挿入した場合、以下の処理が実行されます。

DAV で複数値日付または日付範囲を挿入する

DAV を使用して複数の値を持つ日付フィールドや日付範囲のフィールドを挿入または更新する場合、DB2 の完全なタイムスタンプ形式で、yyyy-mm-dd-hh.mm.ss.subsec (2005-12-24-08.06.30.123456 など) のように指定する必要があります。これ以外の無効な形式で指定すると、最後に使用された有効なタイムスタンプが無効なタイムスタンプの代わりに繰り返し使用されます。この場合、エラーは発生しません。

応答しないアプリケーションまたはシステム

通常の業務時間中に、DAV を使用して DB2 Access ビューに対し SQL による 1000 行以上の大規模な更新を実行すると、アプリケーションがユーザーに対して応答しなくなることがあります。このような大規模な更新を実行すると、プロセスが完了するまでデータベースは実質的に使用できません。更新の規模によっては、実行時間が非常に長くなることがあります。

通常業務時間内に大規模な SQL 更新を実行すると、Domino サーバーが稼働しているにも関わらず「リモートシステムが応答しません」というステータスが SQL コマンドから戻されることがあります。このため、サーバーが実際には更新を処理している可能性があるにもかかわらず、データベースがオフラインであるために SQL コマンドウィンドウがサーバーと通信できない状態にあるため、サーバーが応答していないように見えます。

この状況を避けるには、業務時間外のデータベースが使用されない時間に大規模な更新を実行してください。

不明なフォームのエラー

Mail8 テンプレートでは、メモフォームがメッセージフォームに変更されました。Notes 8 メールテンプレートに基づいて作成された DAV がメッセージフォームを使用している状態で、フォームが関連づけられていない文書が存在する場合、「アクセスビュー定義で次の不明な形式を参照しています : メッセージ」というエラーが発生します。

注: DAV がすべてのフォームを使用している場合、またはすべての文書にフォームが関連づけられている場合、このエラーは発生しません。

このエラーを解決するには、DAV をコピーして保存します。その後、[DB2 で作成/更新] を再実行します。

不明なホストのエラー

Domino サーバーをサーバー名で ping したときに「不明なホストです」というエラーが返された場合、サーバーのネットワークアドレスが完全に修飾された DNS 名または IP アドレスでない可能性があります。

更新可能なカーソルが機能しない

DB2 Control Center を通じて DB2 Access ビューを更新することはできません。この機能は DB2 コマンドラインプロセッサまたは DB2 のコマンドウィンドウを通じてのみ実行できます。これは、Domino および DB2 では、更新可能なカーソルが「Instead of」トリガでは機能しないためです。

DAV をもとにした Query ビューでの GMT TimeDates の使用

Query ビューは、DB2 の値を使用するだけであり、それを解釈したり、調整したりはしません。照会結果をローカル時刻で表示するには、DB2 タイムゾーンを照会に追加し、列式を使用して時刻を調整します。以下に例を示します。

"select  textcol, (CURRENT_TIMEZONE/10000) as ctz, dtcol from dt.dt"

次に、列式を使用して、ユーザーに表示される値を調整します。

	@Adjust(dt;0;0;0;CTZ;0;0)

次のように、返された情報を @Zone からの情報を使用して調整しても同じ結果が得られます。

	@Adjust(dtcol;0;0;0;-@If(@Zone - @Integer( @Zone )  > 0.05;@Integer(@Zone)-1;@integer(@Zone));0;0)

ここで dtcol は DB2 内の選択した TIMESTAMP 列です。

実際に使用する式はもう少し複雑になるかもしれません。サーバーのタイムゾーンと GMT の差が 1 時間の整数倍でない場合に @Zone は hhmm 値を返す可能性があるからです。

これで通常の Notes ビューに近くなりますが、いくつかの矛盾があります。例えば、これは時刻を GMT を基準に正しく表示しますが、日付と時刻の値は日付の DST 値を基準に表示します (つまり、DST が実際にその日であるかどうかに関わりなく日付が表示されます)。これに対して式を使用した方法では、時刻を現在の DST 設定を基準にして表示します。