IBM Support

I/O サスペンド後ファイル・システムをフリーズすると、データベースへの接続が SQL5005C で失敗することがある

Question & Answer


Question

I/O サスペンドと、ファイルシステムの静止 (freeze) によるデータベースのバックアップを実行中、データベース接続を試行すると SQL5005C エラーが返りました。どうしてこのエラーが返ったのでしょうか?

Cause

以下のような状況で SQL5005C が発生する可能性があります。

  • SET WRITE SUSPEND コマンドで、データベースの書き込み要求をサスペンドします。
    $ db2 set write suspend for database
  • chfs コマンドでファイルシステムをフリーズします。
    # chfs -a freeze=<timeout(sec)> <filesystem_for_database>

バックアップを実行中、データベースへの接続が SQL5005C でエラーになり、以下のようなメッセージが db2diag.log に記録されます。

2014-02-07-11.29.42.059557+540 E1110313A1131 LEVEL: Error (OS)
PID : 6357332 TID : 11100 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-29670 APPID: *LOCAL.db2inst1.140207022817
AUTHID : db2inst1
EDUID : 11100 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, oper system services, sqloopenp, probe:80
MESSAGE : ZRC=0x870F0016=-2029060074=SQLO_SHAR "File sharing violation."
DIA8519C A file sharing violation has occurred, filename was "".
CALLED : OS, -, open
OSERR : ETXTBSY (26) "Text file busy"
DATA #1 : Codepath, 8 bytes
4:9:15:16:22:36:37
DATA #2 : File name, 58 bytes
/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLDBCONF
DATA #3 : SQO Open File Options, PD_TYPE_SQO_FILE_OPEN_OPTIONS, 4 bytes
SQLO_REVISE, SQLO_READONLY, SQLO_SHAREREAD, SQLO_WRITETHRU
DATA #4 : Hex integer, 4 bytes
0x000001A0



この現象はファイルシステムが凍結状態のため db2stmm プロセスがSQLDBCONFへの書き込みをブロックされたために発生します。

chfs -a freeze=timeout コマンドが実行されると、ファイルシステムが凍結されます。
この凍結状態ではファイルシステムは読み取り専用となり、書き込み要求は凍結状態が終了するまで待たなければなりません。

このケースでは、ファイルシステムが凍結状態のときに db2stmm がデータベース構成パラメータを変更し、変更後の値を SQLDBCONF に書き込もうとしています。しかしファイルシステムは凍結状態のため書き込みが待たされます。
ここでデータベース接続を試行したエージェントが SQLDBCONF を開こうとしたところ、すでに db2stmm が排他モードで開いているため、ETXTBSY で失敗します。

ただし他の DB2 インスタンスではデータベースに接続することができます。これは、db2agent が SQLDBCONF を共有ロックで読み込むためです。

db2stmm は排他ロックを SQLDBCONF に対して獲得します。
そのため他のプロセスはいかなるロックも獲得することができません。

db2agent はファイルに対するロックが獲得できないため共有違反のメッセージを db2diag.log に記録します。

最終的に、コマンドは SQL5005C (OS による入出力エラー) を戻します。

Answer

次のいずれかの方法で問題を回避してください。

  • データベース・パスを含むファイルシステムのフリーズ中は、STMM を停止する

  • STMM は以下のコマンドで動的に停止できます。

    $ db2 connect to <dbname>
    $ db2 update db cfg using self_tuning_mem off
  • データベース・パスを含むファイルシステムのフリーズ中は、接続要求を控える


お問合せ先
技術的な内容に関して、サービス契約のもと IBM サービス・ラインにお問い合わせください。
IBM サービス・ライン

[{"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Component":"Database Objects\/Config - Database","Platform":[{"code":"PF002","label":"AIX"}],"Version":"9.8;9.7;9.5;10.1;10.5","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
16 June 2018

UID

swg21676116