[DB2]ペンディング状態の解除

はじめに

DB2の環境構築時に見たことのないエラーがでたので調べました。

発生したエラー

出たエラーは以下のとおり。

SQL0668N 操作は、理由コード "1" のため、表 "SCHEMA.TABLE"に対して許可されません。 SQLSTATE=57016

「???」なんのこっちゃ?と思って調べてみると、エラーで示された表はSET INTEGRITY ペンディング・アクセスなしの状態で、 表の整合性が強制されておらず、 表の内容が無効である可能性があるそうです。どういう意味?直前にやっていたような作業はテーブルにデータをロードしていたくらい。。と考えて更に調べてみると、

ロード先の表に制約がある場合は、ロード完了後はチェックペンディング状態になります。 制約を有効にしてください。

というものを見つけました。確かにロードはしていたけどエラーの出るテーブルと出ないテーブルがある。。つまり制約が定義された表に対して、LOADを実行したため一部のテーブルでペンディング状態となったということです。

ペンディング状態のテーブルを調べる

syscat.tables表のstatusがN、access_modeがF でないテーブルはチェックペンディング状態らしい。以下のSQLで抽出可能

ペンディング状態を解除する

ペンディングは以下のコマンドを発行して戻すことができる。

私の場合これではエラーをなくすことができないテーブルがありました。なぜだろう?いろいろ調べて以下のコマンドを実行したらエラーは解消されました。

以上です。

おすすめの記事