16.9.1 B-treeインデクスが未完状態になったときの対処方法
行を格納するセグメントが割り当てられている状態の実表に対してB-treeインデクスを定義すると,B-treeインデクスが未完状態(B-treeインデクスのデータが作成されていない状態)になります。行を格納するセグメントが割り当てられている状態については,「5.3.1 B-treeインデクスを定義する場合の注意点(B-treeインデクスの未完状態)」を参照してください。
B-treeインデクスが未完状態になると,次に示す操作がエラーになります。
- ■エラーになる操作
-
-
未完状態のB-treeインデクスを使用するSELECT文の実行
-
未完状態のB-treeインデクスが定義された表に対するINSERT文,UPDATE文,およびDELETE文の実行
-
未完状態のB-treeインデクスが定義された実表に対する-dオプションを指定しないadbimportコマンドの実行
-
未完状態のB-treeインデクスが定義された実表に対するadbmergechunkコマンドの実行
-
未完状態のB-treeインデクスが定義されたアーカイブマルチチャンク表に対するadbunarchivechunkコマンドの実行
- メモ
-
TRUNCATE TABLE文は実行できます。TRUNCATE TABLE文で実表の全行を削除した場合,B-treeインデクスのデータも削除されるため,B-treeインデクスの未完状態も解除されます。
-
B-treeインデクスが未完状態になる原因には,次に示す場合があります。
-
行を格納するセグメントが割り当てられている状態の実表に対してB-treeインデクスを定義した場合
-
adbimportコマンドまたはadbidxrebuildコマンドが異常終了した場合
B-treeインデクスが未完状態になった原因によって,未完状態の解除方法が異なります。
- 〈この項の構成〉
(1) 行を格納するセグメントが割り当てられている状態の実表に対してB-treeインデクスを定義した場合
-
B-treeインデクスが未完状態かどうかを確認する
B-treeインデクスが未完状態かどうかは,adbdbstatusコマンドで確認できます。「10.9.3 B-treeインデクスの状態や使用量を確認したい場合」を参照してください。
B-treeインデクスが未完状態の場合は,手順2.に進んでください。
-
B-treeインデクスの未完状態を解除する
未完状態のB-treeインデクスが定義されている実表に対して,adbidxrebuildコマンドを実行してください。
adbidxrebuildコマンドを実行して,B-treeインデクスを再作成することで,B-treeインデクスの未完状態が解除されます。
なお,adbimportコマンドが異常終了した状態でCREATE INDEX文を実行した場合,B-treeインデクスが未完状態になることがあります。この場合,--forceオプションを指定してadbidxrebuildコマンドを実行してください。--forceオプションを指定しないでadbidxrebuildコマンドを実行すると,エラーとなります。
adbidxrebuildコマンドについては,マニュアルHADB コマンドリファレンスのadbidxrebuild(インデクスの再作成)を参照してください。
(2) adbimportコマンドまたはadbidxrebuildコマンドが異常終了した場合
-
B-treeインデクスが未完状態かどうかを確認する
B-treeインデクスが未完状態かどうかは,adbdbstatusコマンドで確認できます。「10.9.3 B-treeインデクスの状態や使用量を確認したい場合」を参照してください。
B-treeインデクスが未完状態の場合は,手順2.に進んでください。
-
B-treeインデクスの未完状態を解除する
未完状態のB-treeインデクスが定義されている実表に対して,adbimportコマンドが異常終了した場合はadbimportコマンドを,adbidxrebuildコマンドが異常終了した場合はadbidxrebuildコマンドを再実行してください。
adbimportコマンドまたはadbidxrebuildコマンドが正常終了したときに,B-treeインデクスの未完状態が解除されます。