16.8.1 実表が更新不可状態になった場合
次に示すコマンドが中断した場合,表の情報とインデクスの情報との不整合が原因で,処理対象の実表が更新できない状態になることがあります。これを,実表の更新不可状態といいます。
- ■対象のコマンド
-
-
adbimportコマンド
-
adbidxrebuildコマンド
-
adbunarchivechunkコマンド
-
更新不可状態の実表に対して,次に示す操作を行うとエラーになります。
- ■エラーになる操作
-
-
ALTER TABLE文の実行
-
CREATE INDEX文の実行
-
INSERT文の実行
-
UPDATE文の実行
-
DELETE文の実行
-
PURGE CHUNK文の実行
-
adbmergechunkコマンドの実行
-
adbchgchunkstatusコマンドの実行
-
adbchgchunkcommentコマンドの実行
-
adbimportコマンドの実行※1
-
adbidxrebuildコマンドの実行※1
-
adbarchivechunkコマンドの実行
-
adbunarchivechunkコマンドの実行※2
- 注※1
-
adbunarchivechunkコマンドが中断して,実表が更新不可状態になった場合にエラーになります。adbimportコマンドまたはadbidxrebuildコマンドが中断して,実表が更新不可状態になった場合はエラーになりません。
- 注※2
-
adbimportコマンドまたはadbidxrebuildコマンドが中断して,実表が更新不可状態になった場合にエラーになります。adbunarchivechunkコマンドが中断して,実表が更新不可状態になった場合はエラーになりません。
- メモ
-
TRUNCATE TABLE文は実行できます。実表の行データはすべて削除されるため,実表の更新不可状態は解除されます。
-
(1) 実表の更新不可状態を解除する方法
実表の更新不可状態を解除する手順を次に示します。
手順
-
対象の実表が更新不可状態かどうかを確認する
実表の更新不可状態は,adbdbstatusコマンドで確認できます。「10.9.2 実表の状態や使用量を確認したい場合」を参照してください。
実表の更新不可状態の場合,手順2.に進んでください。
-
実表の更新不可状態を解除する
中断したコマンドを再実行してください。
-
adbimportコマンドが中断した場合
adbimportコマンドを再実行してください。詳細については,マニュアルHADB コマンドリファレンスのadbimport(データのインポート)のadbimportコマンドが異常終了したときの対処方法を参照してください。
-
adbidxrebuildコマンドが中断した場合
adbidxrebuildコマンドを再実行してください。詳細については,マニュアルHADB コマンドリファレンスのadbidxrebuild(インデクスの再作成)のadbidxrebuildコマンドが異常終了したときの対処方法を参照してください。
-
adbunarchivechunkコマンドが中断した場合
adbunarchivechunkコマンドを再実行してください。詳細については,マニュアルHADB コマンドリファレンスのadbunarchivechunk(チャンクのアンアーカイブ)のadbunarchivechunkコマンドが異常終了したときの対処方法を参照してください。
再実行したコマンドが正常終了すると,表の情報とインデクスの情報との不整合が解消されて,更新不可状態が解除されます。
コマンドの再実行時にエラーが発生した場合は,「(2) コマンドの再実行時にエラーが発生したときの対処方法」を参照してください。
-
(2) コマンドの再実行時にエラーが発生したときの対処方法
コマンドを再実行する際,次の原因によってエラーが発生する場合があります。該当する原因に従って,対処してください。
■コマンドの再実行時に発生するエラーの原因
-
中断したコマンドによって作成された作業用一時ファイル,またはコマンドステータスファイルにアクセスできない場合
「対処方法1」を参照してください。
-
実表の更新不可状態を解除しないでバージョンアップした場合
「対処方法1」を参照してください。
-
インデクスを格納しているデータ用DBエリアの空き容量が不足している場合
「対処方法2」を参照してください。
■対処方法1
次のメッセージが,メッセージログファイルに出力されているかどうかを確認してください。
-
KFAA50244-Eメッセージ
-
KFAA50247-Eメッセージ
上記のメッセージが出力されているかどうかによって対処が異なります。上記以外のメッセージが出力されている場合は,出力されたメッセージに従って対処してください。対処が完了すると,実表の更新不可状態が解除されます。
-
KFAA50244-Eメッセージが出力されている場合
再実行できなかったコマンドによって,対処が異なります。
-
adbimportコマンドまたはadbidxrebuildコマンドの再実行がエラーになった場合
--forceオプションを指定して,adbidxrebuildコマンドを実行してください。
なお,中断したコマンドが,バックグラウンドインポートを適用した(-bオプションを指定した)adbimportコマンドのときは,adbidxrebuildコマンドに--forceオプションを指定して実行すると,adbimportコマンドで処理中だった表データの格納情報が削除されます。この場合は,adbidxrebuildコマンドを実行したあとに,-bオプションを指定して,中断したadbimportコマンドを再実行してください。
adbidxrebuildコマンドの--forceオプションについては,マニュアルHADB コマンドリファレンスのadbidxrebuild(インデクスの再作成)のadbidxrebuildコマンドの指定形式を参照してください。
-
adbunarchivechunkコマンドの再実行がエラーになった場合
--forceオプションを指定して,adbunarchivechunkコマンドを実行してください。
adbunarchivechunkコマンドの--forceオプションについては,マニュアルHADB コマンドリファレンスのadbunarchivechunk(チャンクのアンアーカイブ)のadbunarchivechunkコマンドの指定形式を参照してください。
-
-
KFAA50247-Eメッセージが出力されている場合
--create-temp-fileオプションを指定して,adbidxrebuildコマンドを実行してください。
adbidxrebuildコマンドの--create-temp-fileオプションについては,マニュアルHADB コマンドリファレンスのadbidxrebuild(インデクスの再作成)のadbidxrebuildコマンドの指定形式を参照してください。
■対処方法2
次のメッセージが,メッセージログファイルに出力されます。
-
KFAA30756-Eメッセージ
-
KFAA61210-Eメッセージ
まずは,データ用DBエリアを拡張したあとで,コマンドを再実行してください。データ用DBエリアの拡張については,「11.11.3 データ用DBエリアを拡張する方法(データ用DBエリアファイルの追加)」を参照してください。
データ用DBエリアを拡張できなかった場合は,データ用DBエリアの空き容量を確保したあとで,コマンドを再実行してください。データ用DBエリアの空き容量の確保については,「11.11.6 データ用DBエリアの空き容量を確保する方法」を参照してください。
データ用DBエリアの空き容量も確保できない場合は,次の方法で実表の更新不可状態を解除してください。ただし,次の方法では,実表の更新不可状態を解除する前に,データ用DBエリアの空き容量の確保を目的として,インデクスをいったん削除します。実表の更新不可状態を解除したあとに,インデクスを再定義して再作成します。そのため,データ用DBエリアには,インデクスを再作成するための空き容量が必要になります。空き容量がないとインデクスを再作成できないため,インデクスを再作成するための空き容量を確保できるかどうかを事前に確認してください。そのあとで,実表の更新不可状態を解除してください。データ用DBエリアの空き容量を確保する方法については,「11.11.6 データ用DBエリアの空き容量を確保する方法」を参照してください。確認した結果,インデクスを再作成するための空き容量が確保できない場合は,再度データ用DBエリアの拡張を検討してください。
手順
-
削除するインデクスを決定する
更新不可状態を解除する実表に定義されていて,空き容量が不足しているデータ用DBエリアに格納されているインデクスの中から,いったん削除するインデクスを決定してください。
-
インデクスの定義情報を取得する
手順1.で決定したインデクスをいったん削除したあとに,同じ定義情報でインデクスを再作成できるように,必要な定義情報を取得しておいてください。
インデクスの定義情報の取得については,「付録B.22 ディクショナリ表の検索」の「(30) インデクスの定義情報を調べる場合」を参照してください。
-
インデクスを削除する
手順1.で決定したインデクスをいったん削除してください。
インデクスの削除については,「11.3.9 インデクスの削除」を参照してください。
-
前回中断したコマンドを再実行する
更新不可状態を解除する実表に対して,前回中断したコマンドを再実行してください。コマンドが正常終了した場合は,実表の更新不可状態が解除されます。
中断したコマンドを確認する方法については,「10.9.2 実表の状態や使用量を確認したい場合」の「(1) 実表が更新不可状態かどうかを確認する場合」を参照してください。
コマンドがエラーになった場合は手順5.に進んでください。コマンドが正常終了した場合は,手順6.に進んでください。
-
手順4.で実行したコマンドがエラーになった場合の対処を行う
-
データ用DBエリアの空き容量不足でエラーになった場合
データ用DBエリアの空き容量を確保するために,ほかのインデクスも削除する必要があります。ほかのインデクスに対して,手順1.から再度実行してください。
-
データ用DBエリアの空き容量不足以外でエラーになった場合
出力されたエラーメッセージを確認し,エラー要因を取り除いてください。そのあとで,再度コマンドを実行してください。
コマンドが正常終了した場合は,実表の更新不可状態が解除されます。コマンドが正常終了した場合は,手順6.に進んでください。
-
-
インデクスを再作成するためにデータ用DBエリアの空き容量を確保する
インデクスを再作成するために,手順3.で削除したインデクスが格納されていたデータ用DBエリアの空き容量を確保してください。
空き容量の確保については,「11.11.6 データ用DBエリアの空き容量を確保する方法」を参照してください。
-
インデクスを再定義する
手順2.で取得しておいた定義情報を基に,削除したインデクスを再定義してください。
-
インデクスを再作成する
手順7.で再定義したインデクスを再作成してください。インデクスの再作成については,次のどれかを参照してください。
(3) 更新不可状態の実表を検索した場合
更新不可状態の実表は,SELECT文で検索できます。ただし,中断したコマンドによって検索結果が異なります。
- ■adbimportコマンドの場合
-
adbimportコマンド実行時の-dオプションの指定有無によって,検索結果が異なります。
- -dオプションを指定しなかった場合
-
adbimportコマンド実行前の実表に対して検索した場合と同じ結果が返却されます。
- -dオプションを指定した場合
-
インデクスを使用しないSELECT文,およびレンジインデクスを使用したSELECT文の検索結果は,0件になります。
また,B-treeインデクスまたはテキストインデクスを使用したSELECT文は,エラーとなります。
- ■adbidxrebuildコマンドの場合
-
再作成が完了していないB-treeインデクス,テキストインデクスまたはレンジインデクスを使用したSELECT文を実行すると,インデクスの未完状態によって,エラーとなります。
- ■adbunarchivechunkコマンドの場合
-
adbunarchivechunkコマンド実行前の実表に対して検索した場合と同じ結果が返却されます。