indexrec - 索引再作成時点構成パラメーター

このパラメーターは、データベース・マネージャーがいつ無効な索引の再作成を試みるか、 ならびにロールフォワード時または高可用性災害時リカバリー (HADR) におけるスタンバイ・データベースでのログ適用時に索引作成を再実行するかどうかを指定します。

構成タイプ
データベースおよびデータベース・マネージャー
適用
  • ローカルとリモート・クライアントを持つデータベース・サーバー
  • ローカル・クライアントを持つデータベース・サーバー
  • ローカル・クライアントおよびリモート・クライアントを持つパーティション・データベース・サーバー
パラメーター・タイプ
オンラインで構成可能
伝搬クラス
即時
デフォルト [範囲]
UNIX データベース・マネージャー
restart [restart; restart_no_redo; access; access_no_redo]
Windows データベース・マネージャー
restart [restart; restart_no_redo; access; access_no_redo]
データベース
システム設定を使用 [system; restart; restart_no_redo; access; access_no_redo]
このパラメーターには、次に示す 5 つを設定できます。
SYSTEM
無効な索引の再作成をいつ行うか、ならびにロールフォワードまたは HADR ログ適用の際に索引作成ログ・レコードを再実行するかどうかを、 データベース・マネージャーの構成ファイルに指定されているシステム設定を使用して決定します。
注: この設定は、データベース構成に対してのみ有効です。
ACCESS
無効な索引は、基礎表が最初にアクセスされるときに再作成されます。 フル・ロギングで 記録された索引作成は、ロールフォワードまたは HADR ログ適用の際に再実行されます。 HADR が開始され、HADR のテークオーバーが行われると、基礎表が最初にアクセスされるときに、テークオーバーに続いて無効な索引が再作成されます。
ACCESS_NO_REDO
無効な索引は、基礎表が最初にアクセスされるときに再作成されます。 フル・ロギングで記録された索引作成はロールフォワードまたは HADR ログ適用の際に再実行されず、それらの無効な索引は無効なままになります。 HADR が開始され、HADR のテークオーバーが行われた場合、 テークオーバーの後に、基礎表が最初にアクセスされたときに無効な索引が再作成されます。 新しい 1 次側で 基礎表がアクセスされることにより、索引の再作成が行われ、 その結果、ログ・レコードが書き込まれて新しいスタンバイに送信され、 今度はスタンバイ側の索引が無効化されます。
RESTART
indexrec のデフォルト値です。 RESTART DATABASE コマンドが明示的または暗黙的に発行されるときに、無効な索引は再作成されます。 フル・ロギングで記録された索引作成は、ロールフォワードまたは HADR ログ適用の間に再実行されます。 HADR が開始され、HADR のテークオーバーが行われると、テークオーバーの最後に無効な索引が再作成されます。
注: Db2® pureScale® 環境では、索引はグループ・クラッシュ・リカバリー時にのみ再作成され、メンバー・クラッシュ・リカバリー時には再作成されません。
注: アプリケーションの接続中にデータベースが異常終了し、 autorestart パラメーターが有効になっている場合、アプリケーションがデータベースに接続すると RESTART DATABASE コマンドが暗黙的に発行されます。 データベースが正常に終了する場合には、データベースへの接続が行われる前に RESTART DATABASE コマンドが発行される必要があります。発行されない場合、索引の再作成は行われません。 このコマンドが発行されない場合、基礎表が次回アクセスされるときに無効な索引が再作成されます。
RESTART_NO_REDO
RESTART DATABASE コマンドが明示的または暗黙的に発行されるときに、無効な索引は再作成されます。 フル・ロギングで記録された索引作成はロールフォワードまたは HADR ログ適用の際に再実行されませんが、それらの索引はロールフォワードが完了するとき、または HADR テークオーバーが行われるときに再作成されます。 テークオーバーにより、新しい 1 次側で 基礎表の索引の再作成が行われ、 その結果、ログ・レコードが書き込まれて新しいスタンバイに送信され、 今度はスタンバイ側の索引が無効化されます。

アプリケーションの接続中にデータベースが異常終了し、 autorestart パラメーターが有効になっている場合、アプリケーションがデータベースに接続すると、 RESTART DATABASE コマンドが暗黙的に発行されます。 データベースが正常に終了する場合には、データベースへの接続が行われる前に RESTART DATABASE コマンドが発行される必要があります。発行されない場合、索引の再作成は行われません。 このコマンドが発行されない場合、基礎表が次回アクセスされるときに無効な索引が再作成されます。

索引が無効になるのは、致命的なディスク問題が発生したときです。 これがデータ自体に生じた 場合は、データが失われる恐れがあります。 しかし、この問題が発生したのが索引である場合は、その索引を再作成することで、索引はリカバリーできます。 ただし、ユーザーがデータベースに接続されている ときに、索引が再作成されると、次のような 2 つの問題が生じる可能性があります。
  • 索引ファイルの再作成に伴って、予期しない応答時間の低下が発生する場合があります。 ユーザーが表にアクセスして、 この特定の索引を使用する場合は、索引が再作成されて いる間、ユーザーは待機することになります。
  • 索引の再作成後、予期しないロックが保留される場合があります。特に、その索引の再作成の原因となったユーザー・トランザクションが COMMIT や ROLLBACK をまったく実行していなかった場合は、その可能性があります。

推奨: このオプションに関しては、ユーザー数の多いサーバーであり、しかも再始動のタイミングが重要でない場合は、クラッシュ後にデータベースをオンラインに戻す処理の一環として、DATABASE RESTART 時に索引が再作成されるようにするのが、最善の選択です。

このパラメーターを ACCESS または ACCESS_NO_REDO に設定すると、索引の再作成の間、データベース・マネージャーのパフォーマンスが低下します。 ユーザーがその特定の索引または表にアクセスした場合は、索引が再作成されるまで、ユーザーは待機する必要があります。

このパラメーターが RESTART に設定されている場合は、データベースの再始動に要する時間は、索引の再作成のせいで長くなりますが、データベースがオンラインに戻った後は、通常の処理に影響が生じることはありません。

RESTARTRESTART_NO_REDO 値の差、または ACCESSACCESS_NO_REDO 値の差は、 CREATE INDEX 操作や REORG INDEX 操作などの索引作成操作、または索引再作成のためにフル・ロギングがアクティブ化されている場合にのみ有効です。 このロギングは、logindexbuild データベース構成パラメーターを使用可能にするか、表を変更するときに LOG INDEX BUILD を使用可能にすることによって有効にできます。 indexrecRESTART または ACCESS に設定すると、索引オブジェクトを無効な状態のままにはせずに、ロギングによって記録された索引作成に関係した操作のロールフォワードが行われるため、索引を後で再作成しなければならない場合があります。