Db2 pureScale 環境でのログ・ストリーム・マージおよびログ・ファイル管理

Db2 pureScale 環境では、各メンバーは独自のトランザクション・ログ・ファイル・セット (つまり、 ログ・ストリーム) を共有ディスク上に保持し、各セットは別々のログ・パスに設定されます。 メンバーのログ・ファイルには、そのメンバー上で行われたすべてのデータ変更の 履歴が入っています。

同時に複数のアプリケーションが、それぞれ 異なるメンバーにアクセスすると、実行中に依存トランザクションが生成される 可能性があります。 例えば、2 つのトランザクションが同じ行を変更した場合、 その両トランザクションの間に依存関係が生じる可能性があります。 ログ・レコードの解釈を 正しく行うために、Db2 データ・サーバーは、 全ログ・ストリームのレコードを調べ、 実行時に発生した更新の順序を反映するように、レコードを順序付けする必要があります。 この順序付けを、ログ・ストリーム・マージ 操作と呼びます。 Db2 pureScale 環境 では、いくつかの操作タイプでログ・ストリーム・マージが必要になります。これらの操作タイプには、グループ・クラッシュ・リカバリー、データベース・ロールフォワード操作、および表スペース・ロールフォワード操作などがあります。

Db2 pureScale 環境でのロギング構成パラメーター

表 1 は、どのロギング関連データベース構成パラメーターがスコープ内でグローバルであり、どのパラメーターが動的に更新可能であるかを示しています。
表 1. ロギング関連の データベース構成パラメーター
パラメーター グローバルである 動的に更新可能である
archretrydelay はい はい
blk_log_dsk_ful いいえ はい
failarchpath はい はい
logarchcompr1 はい はい
logarchcompr2 はい はい
logarchmeth1 はい はい
logarchmeth2 はい はい
logarchopt1 はい はい
logarchopt2 はい はい
logbufsz いいえ はい
logfilsiz はい いいえ
logprimary はい いいえ
logsecond はい はい
max_log いいえ はい
mirrorlogpath 1 はい いいえ
newlogpath 1 はい いいえ
num_log_span いいえ はい
numarchretry はい はい
overflowlogpath はい はい
page_age_trgt_grc はい いいえ
page_age_trgt_mrc はい いいえ
softmax2 はい いいえ
vendoropt はい はい
1 最初にデータベースに接続した、またはデータベースをアクティブ化したメンバーが、 このログ・パス・パラメーターに対する変更を処理します。 Db2 データベース・ マネージャーは、パスが存在することと、そのパスに対する読み取りおよび書き込み権限の両方があることを 確認します。 また、メンバー固有のログ・ファイル用サブディレクトリーを 作成します。 これらの操作のいずれかに失敗すると、Db2 データベース・マネージャーは、 指定されたパスを拒否し、古いパスを使用してデータベースをオンラインにします。 指定されたパスをデータベース・マネージャーが受け入れた場合は、その新しい値が 各メンバーに伝搬されます。 新しいパスへの切り替えの試行中に、いずれかのメンバーに障害が起こった場合、 それ以降、そのデータベースに対してアクティブ化または接続を試行しても、失敗して SQL5099N が返されます。 すべてのメンバーが同じログ・パスを使用する必要があります。
2
重要: softmax データベース構成パラメーターは非推奨になっており、将来のリリースで削除される可能性があります。 詳しくは、 非推奨になったデータベース構成パラメーターを参照してください。

Db2 pureScale 環境でのログ・ストリーム・マージ操作のログの取得

リトリーブしたログ・ファイル用のパス内に、サブディレクトリーが作成されます。 サブディレクトリーは log_path/LOGSTREAMxxxx という形式になります。 ここで log_path は、ログ・パス、オーバーフロー・ログ・パス、 またはミラー・ログ・パスを表し、xxxx は、4 桁のログ・ストリーム ID を 表しています (ログ・ストリーム ID は、必ずしも、関連するメンバーの ID と同じでは ありません)。 メンバーがログのリトリーブを必要とする場合、 Db2 データベース・マネージャーは、 このサブディレクトリー内に、各メンバーからリトリーブしたログを入れるためのサブディレクトリーを、もう 1 階層作成します。 例えば、3 メンバー・システムでオーバーフロー・ログ・パス /home/dbuser/overflow/ を指定し、メンバー 0 のアプリケーションが他のメンバーが所有するログを取得する必要がある場合、メンバー 0 のパスは /home/dbuser/overflow/NODE0000/LOGSTREAM0000になり、このパスの下のサブディレクトリーには、以下の例に示すように、他のメンバーが所有するログが取得されます。
Member 0 retrieves its own logs here:
   /home/dbuser/overflow/NODE0000/LOGSTREAM0000/LOGSTREAM0000
Member 0 retrieves logs that belong to member 1 here:
   /home/dbuser/overflow/NODE0000/LOGSTREAM0000/LOGSTREAM0001
Member 0 retrieves logs that belong to member 2 here:
   /home/dbuser/overflow/NODE0000/LOGSTREAM0000/LOGSTREAM0002
注: これらのリトリーブ・サブディレクトリーにログ・ファイルを手動で挿入しないでください。 手動でログ・ファイルをリトリーブする必要がある場合は、代わりにオーバーフロー・ ログ・パスを使用してください。

他のメンバー所有のアーカイブ・ログ・ファイルを 読み取る場合、メンバーは、通常、独自のログ・パスまたはオーバーフロー・ログ・パスに、 ログ・ファイルをリトリーブする必要があります。 この場合、ログ・ストリーム・マージ操作では、 必要に応じて、ログ・ストリームごとに 1 つの db2logmgr エンジン・ディスパッチ可能単位 (EDU) を 作成します。

前述のように、他のメンバー所有のログ・ファイルの 保管に使用できるパスには、次のリストに示す 3 つのパスがあります。
  1. overflowlogpath データベース構成パラメーターを設定している場合は、 そのオーバーフロー・ログ・パスが使用されます。
    ヒント: ROLLFORWARD DATABASE および RECOVER DATABASE コマンド・オプションを使用して、代替オーバーフロー・ログ・パスを指定できます。これらのオプションの値は、単一のリカバリー操作のためにデータベース構成をオーバーライドします。
  2. アクティブ・ログ・パス
  3. mirrorlogpath データベース構成パラメーターを設定している場合は、 そのミラー・ログ・パスが使用されます。
Db2 データベース・マネージャーは、 このリスト内の最初のパスにログ・ファイルを保管できない場合、その次のパスを使用しようとします。 これらのパスに使用できるものがない場合、ログ・ストリーム・マージ操作を 呼び出したユーティリティーは、そのユーティリティーに固有のエラーを 返します。

Db2 pureScale 環境における GET DATABASE CONFIGURATION コマンドの出力では、各ログ・パスとそれに続くメンバーの名前が識別されます。 例えば、メンバー2のミラー・ログ・パスが/home/dbuser/mirrorpath/に設定された場合、出力には/home/dbuser/mirrorpath/NODE0000/LOGSTREAM0002と表示されます。

他のメンバー所有のログ・ファイルを手動でリトリーブする必要がある場合は、必ず、 データベース・マネージャーが、自動的に作成される場合と同じディレクトリー構造を使用して、 それらのログ・ファイルにアクセスできるようにしてください。 例えば、メンバー2のログをメンバー 1のオーバーフロー・ログ・パスに使用するには、ログを/home/dbuser/overflow/NODE0000/LOGSTREAM0001/LOGSTREAM0002 ディレクトリーに配置します。

リトリーブされた ログ・ファイルは、必要がなくなった時に自動的に削除されます。 ログ・ストリーム・マージ操作時に作成されたサブディレクトリーは、 今後の使用に備えて保持されます。

ログ・ストリーム・マージ操作中の損失ログの検出

リカバリー操作に必要なログ・ファイルを誤って 削除、移動、またはアーカイブして失った場合、その失われたログ・ファイルより前の 最後の整合ポイントまでは、データベースを ロールフォワード・リカバリーできます。

ログ・ストリーム・マージ操作中に、Db2 データベース・マネージャーが、 いずれかのログ・ストリームに損失ログ・ファイルがあることを検出すると、 エラーが返されます。 ロールフォワード・ユーティリティーは SQL1273N を返し、db2ReadLog API は SQL2657N を返します。

図 1 は、2 つのメンバーがアクティブ・ログ・ストリーム内のログ・ファイルにログ・レコードを書き込む方法の例を示しています。 それぞれのログ・ファイルはボックスで表現されています。
図1: Db2 pureScale 環境のログ・ファイル
Db2 pureScale 環境でのログ・ファイルを示す図

ログ・ストリーム 1 のログ・ファイル 4 のみが欠落しているシナリオを考えてください。時刻 A へのロールフォワード操作は成功しますが、時刻 B、時刻 C、または END OF LOGS へのロールフォワード操作は失敗します。 ログ・ファイル 4 が使用不可のため、ROLLFORWARD コマンドは SQL1273N を戻します。 さらに、ログ・ストリーム 0 のファイル 2 および 3 のログ・レコードが、ログ・ストリーム 1 のログ・ファイル 4 の始めの部分と同じ時間枠の中で書き込まれているため、ロールフォワード操作は、ログ・ストリーム 1 のログ・ファイル 4 が使用可能になるまで、ログ・ファイル 2 および 3 を処理できません。 その結果、ロールフォワード操作は時刻 A で停止し、それ以降のロールフォワード操作は、ストリーム 1 のログ 4 が使用可能になるまで、時刻 A より先に進むことができません。

ロールフォワード操作時に、ログ・ストリーム 0 のログ・ファイル 4 のみが欠落している、別のシナリオを考えてください。 ROLLFORWARD コマンドに END OF LOGS オプション (または、時刻 B 以後の任意の時刻) を指定して発行すると、ストリーム 0 のログ・ファイル 4 が欠落しているため、操作は時刻 B で停止し、SQL1273N を戻します。 ロールフォワード操作では、ログストリーム0のファイル2と3のログ記録と、ストリーム1のファイル4の一部のログを時間Bまで再生できます。 ログマージプロセスではすべてのストリームからのすべてのログが使用可能でなければならないため、ストリーム1からの追加のログが使用可能であっても、ロールフォワード操作は時間Bで停止する必要があります。

損失ログ・ファイルが 見つかった場合は、そのログ・ファイルを使用できるようにし、ROLLFORWARD DATABASE コマンドを再実行します。 損失ログ・ファイルが見つからない場合は、ROLLFORWARD DATABASE...STOP コマンドを実行して、損失ログ・ファイルの直前の最後の整合ポイントで、ロールフォワード操作を完了させます。

損失ログを検出することによって、 損失ログ・ファイルに起因するデータベース破壊は発生しなくなりますが、 損失ログ・ファイルがある場合、一部のトランザクションを再生できないため、 それらの損失ログ・ファイルが見つかられなければ、 結果的にデータ損失が発生する可能性があります。

必要なリソース

ログ・ストリーム・マージ操作には、 追加の EDU が必要です。 データベースを活動化するときに、各メンバー上に db2lfr EDU が 1 つずつ作成されます。 ログ・ストリーム・マージ を必要とするログ読み取り操作が開始されると、 ログ・ストリームごとに 1 つの db2shred EDU と 1 つの db2lfr EDU が作成されます。 db2lfr-db2shred の各グループが、独自に、ログ・ページおよびログ・レコード・バッファーのセットを 割り当てますが、追加のメモリーまたはシステム・リソース量は多くはありません。 ログ・ストリーム・マージの関与する各メンバー用に、約 400 KB が 割り当てられます。

ログ・ストリームのマージ操作中に、メンバーは、他のメンバーが所有するログ・ファイルをそのオーバーフロー・ログ・パス、アクティブ・ログ・パス、またはミラー・ログ・パスに取り出します。 Db2 pureScale 環境では、ロールフォワード操作を開始する前に、リトリーブ・パスに十分な空きディスク・スペースがあることを確認してください。 これにより、パフォーマンスに影響を与えることなく、 Db2 pureScale 環境で必要とされる多数のファイルをアーカイブからリトリーブする操作が可能になります。 すべてのメンバーのアクティブ・ログ・ファイルをリトリーブするのに必要な容量の概算は、次の計算式を使用して求めることができます: (logprimary + logsecond) * メンバー数。

  • newlogpath グローバル・データベース構成パラメーターを更新します。
    db2 update db cfg for db mydb using newlogpath /home/dbuser/logdir
  • 1 つのメンバーに対して個別設定されているデータベース構成パラメーター max_log を更新します。
    db2 update db cfg for db mydb member 1 using max_log 5
  • アクティブ・ログ・パスを更新します。
    db2 connect to mydb
    db2 update db cfg for mydb using newlogpath /home/dbuser/newlogpath
    db2 get db cfg for mydb
    ...
    Changed path to log files (NEWLOGPATH) = /home/dbuser/newlogpath/NODE0000/LOGSTREAM0000/
    Path to log files                      = /home/dbuser/dbuser/NODE0000/LOGSTREAM0000/
    ...
    この変更は、まだメンバーがアクティブであるために、 反映されていません。
    db2 terminate
    db2 deactivate db mydb
    db2 connect to mydb
    db2 get db cfg for mydb
    ...
    Changed path to log files (NEWLOGPATH) =
    Path to log files                      = /home/dbuser/newlogpath/NODE0000/LOGSTREAM0000/
    ...
    各メンバーは、/home/dbuser/newlogpath/NODE0000/LOGSTREAMxxxx ログ・パスを使用します。ここで、Xxxx は、そのパスを使用するログ・ストリームのログ・ストリーム ID です。
  • バックアップ・イメージのリストア中に新しいアクティブ・ログ・パスを設定します。
    db2 restore db mydb newlogpath '/home/dbuser/newlogpath' without prompting