IBM Support

[Db2] CLP から DB21016E、DB21018E、SQL1024N、SQL0204N など様々なエラーが返ることがある

Question & Answer


Question

Unix/Linux で複数の CLP を同時に使用すると、DB21016E、DB21018E、SQL1024N、SQL0204N など様々なエラーが返ることがあります。
この問題の原因と対策を教えてください。

Cause

Db2 コマンド行プロセッサー (CLP) は、ユーザー・インターフェースを受け持つ db2 (フロントエンド・プロセス) と、データベース接続を受け持つ db2bp (バックエンド・プロセス) で構成されており、両者はメッセージ・キューで通信しています。
今回の問題はメッセージ・キュー 名の重複により、本来のペアでない db2 と db2bp が通信するために発生します。

Answer

  • 問題の概要
CLP が使用するキュー名 (16バイト) は db2 (フロントエンド・プロセス) の UID と PPID を元に作成されます。
その後、CLP が生成したキュー名を元に、実際のプロセス間通信に使用される メッセージ・キュー名 (32ビット) が生成されます。この メッセージ・キュー名 が、同時に稼働する他の CLP と重複することによって問題が発生します。
特に、AIX では PID の最大値は 67,108,862 (8桁)、UID の最大値は 4,294,967,294 (10桁) です。この情報から  32 ビットのメッセージ・キュー名を重複せずに生成することは困難です。
  • ユーザーへの影響
この問題によるユーザーへの影響は大きく分けると以下の二つです。
a. それぞれ異なる UID によって起動された CLP において メッセージキュー名 の重複が発生すると DB21016E/DB21018E のエラーでコマンドが失敗し db2diag.log に以下のようなエラーが記録されます。
2020-08-18-16.00.00.899022+540 E1628A651    LEVEL: Error (OS)
PID : 54381213 TID : 1 PROC : db2
INSTANCE: db2inst1 NODE : 000
HOSTNAME: host1
EDUID : 1
FUNCTION: DB2 UDB, oper system services, sqlowqueInternal, probe:40
MESSAGE : ZRC=0x870F00BB=-2029059909=SQLO_QUE_NO_ACCESS
"do not have the access right"
CALLED : OS, -, msgsnd
OSERR : EACCES (13) "指定されたアクションにはファイルのアクセス権がありません。"
b. 同一の UID によって起動された CLP においてメッセージキュー名の重複が発生すると、発行されたコマンドやステートメントが異なる CLP (db2bp) で実行されてしまいます。(SQL1024N、SQL0204N、DB21016E など)
a の問題は、CLP上にエラーが返り、 db2diag.log には SQLO_QUE_NO_ACCESS のエラーが記録されます。CLP を起動するシェルを再起動して失敗したコマンドを再実行することにより解消することがほとんどです。しかし、b のケースではエラーにならず意図しないデータ更新が発生したり、誤った結果を返す可能性もあり、重大なデータ保全性の問題を起こす可能性があります。
  • 解決策
以下の APAR が作成され b. の問題について完全に修正されています。
以下の APAR で a. の問題については完全に修正されていませんが、修正適用後に問題の発生報告はありません。
IT31007 (V11.5 M4FP0 で修正)
IT30978 (V11.1 M4FP5 で修正)
IT30470 (V10.5 FP11 で修正)
a. の問題について V11.5M6FP0 および V11.1M4FP7 以降で改善され、ほとんどのケースでメッセージキュー名の重複は発生しなくなります。ただし、AIX の ksh で su - <user> db2 <command/statement> のように複数のユーザーを指定して CLP を実行する場合、比較的頻繁に DB21016E、DB21018E が発生することがあります。
この変更の詳細とエラー発生時の回避策は以下の Technote を参照してください。
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"Component":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"}],"Version":"All Versions","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
23 August 2023

UID

ibm11075749