Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


15.9.2 一意性制約に違反した場合の対処方法(KFAA61205-Wメッセージが出力された場合)

ユニークインデクスを定義した表に対して,adbimportコマンドまたはadbidxrebuildコマンドを実行した場合,キー値の重複があり,一意性制約に違反したときでも,各コマンドの処理は続行されます。adbimportコマンドまたはadbidxrebuildコマンドの終了時,一意性制約に違反した旨を示すKFAA61205-Wメッセージが出力されます。

一意性制約に違反したユニークインデクスは,一意性制約がないB-treeインデクスとして扱われます。この状態を,一意性制約違反状態といいます。一意性制約違反状態になると,一意性制約を満たしているときと比べて,検索効率が悪くなるおそれがあります。

〈この項の構成〉

(1) 一意性制約違反状態かどうかを確認する方法

KFAA61205-Wメッセージを確認する以外で,ユニークインデクスが一意性制約違反状態かどうかを確認する場合は,adbdbstatusコマンドを実行します。詳細については,「10.9.3 B-treeインデクスの状態や使用量を確認したい場合」を参照してください。

(2) 一意性制約違反状態を解除する方法

ユニークインデクスの一意性制約違反状態を解除する場合,次に示す手順で対処してください。

  1. 重複したキー値を検索する

    対象のユニークインデクスが定義された表に対してSELECT文を実行して,重複したキー値を検索してください。SELECT文の指定例を次に示します。

    SELECT文の指定例

    T1C1列およびC2列をインデクス構成列とするユニークインデクスIX1を定義している場合に,一意性制約に違反したキー値を検索します。

    SELECT "C1","C2" FROM "T1"
       WHERE "C1" IS NOT NULL AND "C2" IS NOT NULL GROUP BY "C1","C2"
         HAVING COUNT(*) >= 2
  2. 重複したキー値を持つ行を削除する

    一意性制約に違反したキー値を持つ行を,DELETE文で削除してください。

    DELETE文については,マニュアルHADB SQLリファレンス操作系SQLDELETE(行の削除)を参照してください。

  3. B-treeインデクスを再作成する

    adbidxrebuildコマンドを実行して,B-treeインデクスを再作成してください。adbidxrebuildコマンドが完了すると,一意性制約違反状態を解除できます。

    adbidxrebuildコマンドについては,マニュアルHADB コマンドリファレンスadbidxrebuild(インデクスの再作成)を参照してください。

メモ

一意性制約違反状態のユニークインデクスが定義された表に対して,次に示す操作で表のデータをすべて削除した場合も,一意性制約違反状態は解除されます。

  • adbimportコマンドに-dオプション(作成モード)を指定して実行した場合

  • TRUNCATE TABLE文を実行した場合