Question & Answer
Question
空の表に REORG TABLE (表の再編成) を実行した際に、SQL2220W が返されるケースがあります。 原因と対処方法を教えてください。
<エラー・メッセージ>
$ db2 reorg table t1
SQL2220W コンプレッション・ディクショナリーは 1 つ以上のデータ・オブジェクトに対してビルドされませんでした。
Cause
行圧縮が有効な表に対する REORG TABLE コマンドの実行はディクショナリー自動作成 (ADC) のトリガーとなります。しかし、表に行が存在しない空のテーブルの場合、ADC は失敗します。
Db2 は、ADC タスクが失敗することにより CPU 時間が消費されてしまうのを防ぐために ADC を無効にするしきい値を持ちます。
このしきい値により、最初の 6 回の REORG 実行時は SQL2220W は出力されませんが、これが ADC のトリガーとなり、その後の 7 回目の REORG TABLE 実行時は ADC が既に無効になっているため SQL2220W が出力されます。
その際、しきい値を超えたことを示す ADM5593I のメッセージが管理通知ログに出力されますのでご確認ください。
ADM5593I
表 table-name 用の表スペース table-spaceID 内にある、ID objectID を持つ object-type オブジェクトに対して、自動辞書作成 (ADC) 処理が一時的に無効となっています。
インスタンスが再始動すると、ADC 処理は再び有効になります。
Answer
空の表に対して REORG TABLE を実行した上で上記警告メッセージが出力されている場合、期待された挙動であり、対応は必要ありません。
Db2 は内部のレジストリーで閾値を制御しているため、この詳細については公開されておりません。
なお、しきい値のカウンターはデータベース・メモリー上の表制御ブロック (table control block: tcb) に保管されているため、データベースが非活動化されるとリセットされます。
運用上の考慮点
REORG TABLE を RESETDICTIONALY オプションを指定して実行した場合は 1 回目の実行で SQL2220W が返ります。
その際、管理通知ログに ADM5593I メッセージは出力されません。
Db2 V9.5 以降においては ADC が無効になった場合のみ SQL2220W が返されますが、 V9.1 以下ではデータ・コンプレッション・ディクショナリーの構築時に表のすべてのレコードが最小レコード長よりも小さかった場合にも SQL2220W が返されます。
詳細は以下の情報をご確認ください。
データ・コンプレッション・ディクショナリーが自動的に作成される
バージョン 9.1 では、データ・コンプレッション・ディクショナリーを構築するのに、有効なレコード・サイズのすべてのデータ行が使用されます。
データ・コンプレッション・ディクショナリーの構築時に表のすべてのレコードが最小レコード長よりも小さかった場合、SQL2220W エラー・メッセージが返されます。
表に有効な長さのレコードが少なくとも 1 つあれば、データ・コンプレッション・ディクショナリーは構築されます。
しかし、バージョン 9.5 では、どの行がデータ・コンプレッション・ディクショナリーの作成に関わるかを決定するレコード長の基準がありません。
データ・コンプレッション・ディクショナリーの構築中に使用される、標本抽出されるすべてのデータ・レコードの長さが、適用可能最小レコード長よりも小さい場合、SQL2220W エラー・メッセージは生成されません。
関連情報
[DB2 LUW] パスポート・アドバンテージによく寄せられる質問
SQL2220W
[DB2 LUW] DB2 診断ログ (db2diag.log) や管理通知ログの出力先
お問合せ先
技術的な内容に関して、サービス契約のもと IBM サービス・ラインにお問い合わせください。
IBM サービス・ライン
Was this topic helpful?
Document Information
Modified date:
06 November 2018
UID
swg22013724