データベースの再ビルド

データベースの再ビルドは、一連のリストア操作を使用して、データベースまたはその表スペースのサブセットをリストアするプロセスです。 データベースの再ビルドで提供される機能により、 Db2® データベース製品は、より堅固で汎用性の高いものになり、より完全なリカバリー・ソリューションを提供します。

表スペースのバックアップ・イメージからデータベースを再ビルドする機能により、大量のデータベース全体のバックアップを取る必要がなくなります。 データベースのサイズが大きくなるにつれ、データベース全体のバックアップを取る機会は限られてきます。 代わりに表スペース・バックアップを使用すると、データベース全体のバックアップを頻繁に取る必要がなくなります。 表スペース・バックアップをより頻繁に取り、災害時にはログ・ファイルとともに、そうしたバックアップを使用するよう計画できます。

リカバリーの際、表スペースのサブセットを他の部分よりも早くオンラインにする必要がある場合、再ビルドを使用するとそのようにできます。 表スペースのサブセットのみをオンラインにする機能は、テストや実稼働環境で特に有用です。

データベースの再ビルドには、実行する可能性のある一連の数多くのリストア操作が含まれています。 再ビルド操作では、データベース・イメージ、または表スペース・イメージのいずれか、あるいはその両方を用いることが可能です。 フル・バックアップまたは増分バックアップ、あるいはその両方を使用できます。 初期リストア操作では、 ( 表スペース・セット、ストレージ・グループ、およびデータベース構成など )をリストアできるデータベースの構造を定義するターゲット・イメージがリストアされます。 リカバリー可能なデータベースの場合、再ビルドにより、接続可能で、オンラインにする必要のある表スペースのサブセットが含まれるデータベースを作成することができ、後ほどオフラインで表スペースをリカバリー可能な状態に維持することができます。

データベースを再ビルドするのに使用する方法は、リカバリー可能か、またはリカバリー不能かによって異なります。
  • データベースがリカバリー可能な場合、以下のいずれかの方法を使用してください。
    • ターゲットとして、データベース全体のバックアップ・イメージ、または増分データベース・バックアップ・イメージ、あるいは表スペース・バックアップ・イメージを使用し、REBUILD オプションを用いて、ターゲット・イメージのみから SYSCATSPACE と他の表スペースをリストアすることにより、データベースを再ビルドします。 その後、データベースを特定の時点にロールフォワードできます。
    • ターゲットとして、データベース全体のバックアップ・イメージ、または増分データベース・バックアップ・イメージ、あるいは表スペース・バックアップ・イメージを使用し、REBUILD オプションを用いて、リストアされるターゲット・イメージのその時点のデータベースで定義されている表スペースの集合を指定することにより、データベースを再ビルドします。 SYSCATSPACE は、この集合の一部でなければなりません。 この操作により、ターゲット・イメージで定義されている指定の表スペースがリストアされ、その後リカバリー履歴ファイルを使用して、ターゲット・イメージに含まれていない残りの表スペースで必要な他のバックアップ・イメージを自動的に検出してリストアします。 リストアが完了したなら、データベースを特定の時点にロールフォワードします。
  • データベースがリカバリー不能である場合、次のようにします。
    • ターゲットとして、データベース全体のバックアップ・イメージ、または増分データベース・バックアップ・イメージを使用し、適切な REBUILD 構文を用いて、ターゲット・イメージから SYSCATSPACE および他の表スペースをリストアすることにより、データベースを再ビルドします。 リストアが完了すると、データベースに接続できます。

ターゲット・イメージの指定

データベースの再ビルドを実行するには、リストア操作のターゲットとして使用する最新のバックアップ・イメージを指定して RESTORE コマンドを発行することから始めます。 このイメージは、再ビルド操作のターゲット・イメージとして認識されます。それは、リストア可能な表スペース、データベース構成、およびログ・シーケンスを含む、リストアされるデータベースの構造を定義するからです。 ターゲット・イメージの再ビルドは、 RESTORE DATABASE コマンドの TAKEN AT パラメーターを使用して指定します。 ターゲット・イメージは、すべてのタイプのバックアップ (全体、表スペース、増分、オンラインまたはオフライン) が可能です。 ターゲット・イメージが作成された時点でデータベースに定義されていた表スペースは、データベースを再ビルドするのに使用できる表スペースとなります。

以下のいずれかの方法を使用して、リストアする表スペースを指定する必要があります。
  • データベース内で定義されているリストア対象のすべての表スペースを指定して、除外する表スペースがある場合には例外リストを提供します。
  • ターゲット・イメージ内にユーザー・データがあるリストア対象のすべての表スペースを指定して、除外する表スペースがある場合には例外リストを提供します。
  • データベース内に定義されているリストア対象の表スペースのリストを指定します。

再ビルド・データベースに含める表スペースを判別したなら、RESTORE コマンドを適切な REBUILD オプションを使用して発行し、使用するターゲット・イメージを指定します。

再ビルド・フェーズ

適切な REBUILD オプションを指定して RESTORE コマンドを発行し、ターゲット・イメージが正常にリストアされると、データベースは再ビルド・フェーズにあると見なされます。 ターゲット・イメージのリストア後に生じる追加の表スペースのリストアにより、再ビルド・データベースで定義されているように既存の表スペースにデータがリストアされます。 その後こうした表スペースは、再ビルド操作の完了時にデータベースにロールフォワードされます。

適切な REBUILD オプションを指定して RESTORE コマンドを発行し、データベースが存在しない場合、ターゲット・イメージ内の属性に基づいて新規データベースが作成されます。 データベースが存在する場合には、再ビルド・フェーズが開始されていることを通知する警告メッセージを受け取ります。 再ビルド操作を継続するかどうかを尋ねられます。

再ビルド操作により、ターゲット・イメージからすべての初期メタデータがリストアされます。 これには、データベースに属していて、表スペース・データまたはログ・ファイルには属さないすべてのデータが含まれます。 初期メタデータの例は次のとおりです。
  • 表スペース定義
  • 履歴ファイル (管理操作を記録するデータベース・ファイルです)

再ビルド操作では、データベース構成もリストアされます。 ターゲット・イメージはログ・チェーンを設定し、このログ・チェーンは再ビルド・フェーズで残りのリストアに使用できるイメージを判別します。 同じログ・チェーンにあるイメージのみを使用できます。

ディスク上にデータベースがすでに存在し、ターゲット・イメージから履歴ファイルが生成されるようにするには、REPLACE HISTORY FILE オプションを指定してください。 この時点でのディスク上の履歴ファイルは、データベースを再ビルドするのに必要な残りのイメージを検出するために自動ロジックによって使用されます。

ターゲット・イメージがリストアされると、以下のようになります。
  • データベースがリカバリー可能な場合には、データベースはロールフォワード・ペンディング状態に置かれ、リストアするすべての表スペースもロールフォワード・ペンディング状態になります。 データベースで定義済みであるもののリストアされていない表スペースは、リストア・ペンディング状態になります。
  • データベースがリカバリー可能ではない場合には、リストアされたデータベースと表スペースは、通常の状態になります。 リストアされない表スペースは、もはやリカバリーできないのでドロップ・ペンディング状態にされます。 このタイプのデータベースの場合、再ビルド・フェーズが完了します。

リカバリー可能データベースの場合、最初の ROLLFORWARD DATABASE コマンドが発行される際に再ビルド・フェーズが終了し、ロールフォワード・ユーティリティーがログ・レコードの処理を開始します。 ログ・レコードの処理の開始後にロールフォワード操作が失敗して、次にリストア操作が発行されると、そのリストアは再ビルド・フェーズの一部とは見なされません。 こうしたリストアは、再ビルド・フェーズの一部ではない通常の表スペース・リストアと見なされます。

自動処理

ターゲット・イメージがリストアされた後、リストア・ユーティリティーは、リストアすることが必要な残りの表スペースが存在するかどうかを判別します。 存在する場合は、 REBUILD オプションを指定して RESTORE DATABASE コマンドを実行したときと同じ接続を使用して復元されます。 このユーティリティーは履歴ファイルを使用して、ターゲット・イメージより前に取得された最新のバックアップ・イメージを検出します。 このバックアップ・イメージにはリストアが必要な残りの各表スペースが含まれています。 リストア・ユーティリティーは、履歴ファイルに保管されているバックアップ・イメージのロケーション・データを使用して、こうした各イメージを自動的にリストアします。 表スペース・レベルのリストアであるこのような後続のリストアは、オフラインに限り実行できます。 選択したイメージが現行のログ・チェーンに属していない場合には、エラーが戻されます。 そのイメージからリストアされる各表スペースは、ロールフォワード・ペンディング状態になります。

リストア・ユーティリティーは、必要なすべての表スペースを自動的にリストアしようとします。 場合によっては、履歴ファイルでの問題により一部の表スペースをリストアできないことや、いずれかの必要なイメージをリストアする際にエラーが生じることがあります。 そのような場合、再ビルドを手動で完了するか、問題を訂正してから再ビルドを再び実行します。

自動再ビルドが正常に完了しない場合、リストア・ユーティリティーは残りのリストア・ステップのために集められた情報を診断ログ (db2diag ログ・ファイル) に書き込みます。 この情報を使用して、再ビルドを手動で完了できます。

データベースが再ビルド中の場合、再ビルド・プロセスの一部である表スペースに属するコンテナーのみが獲得されます。

リダイレクトされたリストアによりコンテナーを再定義する必要がある場合、残りのリストアおよび後続のロールフォワード操作のために、新しいコンテナーの新しいパスとサイズを設定する必要があります。

残りのイメージのいずれかからリストアした表スペースのデータが新しいコンテナー定義に適合しない場合、その表スペースはリストア・ペンディング状態に置かれ、リストア終了時に警告メッセージが戻されます。 この問題に関する追加情報は診断ログにあります。

再ビルド・フェーズの完了

対象の表スペースすべてがリストアされると、データベースの構成に基づいて 2 つのオプションがあります。 データベースがリカバリー不能である場合、データベースは接続可能で、リストアされた表スペースはオンラインになります。 ドロップ・ペンディング状態の表スペースはもはやリカバリーできず、その後にデータベースでバックアップを実行するとドロップされます。

データベースがリカバリー可能な場合には、ロールフォワード・コマンドを発行して、リストアされた表スペースをオンラインにできます。 SYSCATSPACE がリストアされなかった場合、ロールフォワードは失敗し、この表スペースをリストアしなければロールフォワード操作を開始できません。 つまり、再ビルド・フェーズで、SYSCATSPACE をリストアする必要があります。
注: パーティション・データベース環境では、SYSCATSPACE は非カタログ・パーティションには存在しないため、そこで再作成することはできません。 しかし、カタログ・パーティションでは、SYSCATSPACE は再ビルドされる表スペースの 1 つでなければならず、そうではない場合にはロールフォワード操作は成功しません。

データベースをロールフォワードすると、データベースはロールフォワード・ペンディング状態ではなくなり、ロールフォワード・ペンディング状態にある表スペースがロールフォワードされます。 ロールフォワード・ユーティリティーは、リストア・ペンディング状態にある表スペースでは作動しません。

ロールフォワード操作の停止時刻は、再ビルド・フェーズ中にリストアされる最新のバックアップ・イメージの終了時刻より遅くなければなりません。 それより前の時刻が設定されると、エラーが生じます。 ロールフォワード操作がリストアされた最も古いイメージのバックアップ時刻に達することができない場合、ロールフォワード・ユーティリティーがデータベースを整合ポイントに持ち込むことはできず、ロールフォワードは失敗します。

ロールフォワード・ユーティリティーで使用可能な最も古いバックアップ・イメージと最新のバックアップ・イメージ間の時間フレームにわたるすべてのログ・ファイルがなければなりません。 必要なログは、ターゲット・イメージ内の短縮形配列によって定義されているとおりの、最も古いバックアップ・イメージからターゲット・バックアップ・イメージまでのログ・チェーンに従うログで、そうでない場合にはロールフォワード操作は失敗します。 ターゲット・イメージよりも新しいバックアップ・イメージが再ビルド・フェーズでリストアされた場合には、ターゲット・イメージから、リストアされた最新のバックアップ・イメージまでの追加ログが必要です。 ログが使用可能になっていない場合、ログが網羅していないこうした表スペースを、ロールフォワード操作はリストア・ペンディング状態にします。 LIST HISTORY コマンドを発行して、ロールフォワードで必要なログ範囲のリストア再ビルド項目を表示できます。

適正なログ・ファイルが使用可能でなければなりません。 ロールフォワード・ユーティリティーに依存してログを取得する場合、Db2 ログ・マネージャーがログ・ファイルを取得するロケーションを示すよう構成されていることを確認しなければなりません。 ログ・パスまたはアーカイブ・パスが変更された場合は、 ROLLFORWARD DATABASE コマンドの OVERFLOW LOG PATH オプションを使用する必要があります。

ロールフォワード・コマンドが正常に完了したときにデータベースを使用可能にするには、 ROLLFORWARD DATABASE コマンドの AND STOP オプションを使用します。 この時点で、データベースはもうロールフォワード・ペンディング状態にはありません。 ロールフォワード操作が開始し、正常に完了する前にエラーが発生する場合、失敗した時点でロールフォワード操作は停止して、エラーが戻ります。 データベースは、ロールフォワード・ペンディング状態に留まります。 問題を正すステップ (例えば、ログ・ファイルを修正する) を実行する必要があり、その後に別のロールフォワード操作を実行して処理を続けます。

エラーを修正できない場合には、ROLLFORWARD STOP コマンドを発行して、失敗した時点までデータベースを戻すことができます。 ログ内のその時点より後のログ・データは、STOP オプションを一度使用するともう使用できなくなります。 データベースはその時点に戻り、リカバリーされた表スペースはオンラインになります。 まだリカバリーされていない表スペースは、リストア・ペンディング状態になります。 データベースは、通常の状態になります。

リストア・ペンディング状態にある残りの表スペースをリカバリーするための最善の方法を決定しなければなりません。 新しいリストアを実行してから表スペースのロールフォワードを行うか、再ビルド操作全体を再び実行することができます。 それは、直面する問題のタイプにより異なります。 SYSCATSPACE がリストア・ペンディング状態にある表スペースの 1 つである場合には、データベースは接続できません。