トランザクション・マネージャーは、トランザクション・イベント (例えば、コミットまたはロールバック) の完了を示すログ・レコードを生成します。 ログ・レコード内のタイム・スタンプは、協定世界時 (UTC) であり、1970 年 1 月 1 日から経過した時間 (秒単位) を示します。
通常コミットのログ・レコード
このログ・レコードは、単一ノード環境のトランザクションについて、あるいは複数ノード環境のトランザクションについて (そのトランザクションの影響を受けるのは 1 つのノードのみ) 書き込まれます。 このログ・レコードは、以下のイベントのいずれか 1 つに続く、トランザクションのコミット時に書き込まれます。
- ユーザーが COMMIT を発行した
- CONNECT RESET 中に暗黙のコミットが行われた
表 1. 通常コミットのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションがコミットされた時刻 |
sqluint64 |
40 (8) |
許可 ID の長さ 1 (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
48 (2) |
アプリケーション1の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
50 (可変2) |
全長: 50 バイト + 伝搬可能な可変長部分 (伝搬不可能な 48 バイト) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
ヒューリスティック・コミットのログ・レコード
このログ・レコードは、未確定トランザクションがコミットされるときに書き込まれます。
表 2. ヒューリスティック・コミットのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションがコミットされた時刻 |
sqluint64 |
40 (8) |
許可 ID の長さ 1 (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
48 (2) |
アプリケーション1の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
50 (可変2) |
全長: 50 バイト + 伝搬可能な可変長部分 (伝搬不可能な 48 バイト) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
MPP コーディネーター・コミットのログ・レコード
このログ・レコードは、少なくとも 1 つの従属ノードで更新を実行するアプリケーションについてコーディネーター・ノードに書き込まれます。
表 3. MPP コーディネーター・ノード・コミットのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションがコミットされた時刻 |
sqluint64 |
40 (8) |
トランザクションの MPP ID |
SQLP_GXID |
48(20) |
最大ノード番号 |
unsigned short |
68 (2) |
TNL |
unsigned char [ ] |
70 (最大ノード番号/8 + 1) |
許可 ID の長さ 1 (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
可変 (2) |
アプリケーション1の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
可変 (可変 2) |
全長: 可変 |
注:
- トランザクションに関係していたコーディネーター・ノードを除き、ノードは TNL により定義されます。
- 許可 ID の長さに基づく変数
MPP 従属ノード・コミットのログ・レコード
このログ・レコードは、MPP 内の従属ノードで書き込まれます。
表 4. MPP 従属ノード・コミットのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションがコミットされた時刻 |
sqluint64 |
40 (8) |
トランザクションの MPP ID |
SQLP_GXID |
48(20) |
コーディネーター・パーティション番号1 |
unsigned short |
68 (2) |
許可 ID の長さ (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
70 (2) |
アプリケーション 2 の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
72 (可変3) |
全長: 72 バイト + 可変長部分 |
注:
- トランザクションが単一のデータベース・パーティションのみで行われている場合、これは現在のデータベース・パーティション番号です。そうでない場合は、コーディネーター・パーティション番号です。
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
通常打ち切りのログ・レコード
このログ・レコードは、以下のいずれかのイベントの後でトランザクションが打ち切られるときに書き込まれます。
- ユーザーが ROLLBACK を発行した
- デッドロックが発生した
- クラッシュ・リカバリー中に暗黙的なロールバックが起こった
- ROLLFORWARD リカバリー中に暗黙的なロールバックが起こった
表 5. 通常打ち切りのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
許可 ID の長さ 1 (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
40(2) |
アプリケーション1の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
42 (可変2) |
全長: 42 バイト + 伝搬可能な可変長部分 (伝搬不可能な 40 バイト) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
ヒューリスティック打ち切りのログ・レコード
このログ・レコードは、未確定トランザクションが打ち切られるときに書き込まれます。
表 6. ヒューリスティック打ち切りのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
許可 ID の長さ 1 (ログ・レコードが伝搬可能とマークされている場合) |
unsigned short |
40(2) |
アプリケーション1の許可 ID (ログ・レコードが伝搬可能とマークされている場合) |
文字 [] |
42 (可変2) |
全長: 42 バイト + 伝搬可能な可変長部分 (伝搬不可能な 40 バイト) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
ローカル・ペンディング・リストのログ・レコード
このログ・レコードは、トランザクションがコミットされるときに、ペンディング・リストが存在する場合に書き込まれます。 ペンディング・リストは、ユーザー/アプリケーションが COMMIT を発行するときにのみ実行できるリカバリー不能操作 (ファイルの削除など) のリンク・リストです。 この可変長構造には、ペンディング・リストの項目が含まれます。
表 7. ローカル・ペンディング・リストのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションがコミットされた時刻 |
sqluint64 |
40 (8) |
許可 ID の長さ 1 |
unsigned short |
48 (2) |
アプリケーションの許可 ID1 |
文字 [] |
50 (可変)2 |
ペンディング・リストの項目 |
変数 |
可変 (可変) |
全長: 50 バイト + 伝搬可能な可変長部分 (48 バイト + 伝搬不可能なペンディング・リスト項目) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
グローバル・ペンディング・リストのログ・レコード
このログ・レコードは、2 フェーズ・コミットに必要なトランザクションがコミットされるときに、ペンディング・リストが存在する場合に書き込まれます。 ペンディング・リストには、ユーザー/アプリケーションが COMMIT を発行するときにのみ実行できるリカバリー不能操作 (ファイルの削除など) が含まれます。 この可変長構造には、ペンディング・リストの項目が含まれます。
表 8. グローバル・ペンディング・リストのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
許可 ID の長さ 1 |
unsigned short |
40(2) |
アプリケーションの許可 ID1 |
文字 [] |
42 (可変)2 |
グローバル・ペンディング・リストの項目 |
変数 |
可変 (可変) |
全長: 42 バイト + 伝搬可能な可変長部分 (40 バイト + 伝搬不可能なペンディング・リスト項目) |
注:
- ログ・レコードが伝搬可能としてマークされている場合
- 許可 ID の長さに基づく変数
XA 準備のログ・レコード
このログ・レコードは、単一ノード環境にある XA トランザクションについて、あるいは MPP にあるコーディネーター・ノードに書き込まれます。 これは、XA アプリケーション専用です。 このログ・レコードは、トランザクションの準備を 2 フェーズ・コミットの一部としてマークするために書き込まれます。 XA 準備のログ・レコードは、トランザクションを開始したアプリケーションを記述し、未確定トランザクションの再作成に使用されます。
表 9. XA 準備のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションが準備された時刻 |
sqluint64 |
40 (8) |
トランザクションによって使用されたログ・スペース |
sqluint64 |
48(8) |
トランザクション・ノード・リストのサイズ |
sqluint32 |
56 (4) |
トランザクション・ノード・リスト |
unsigned char [ ] |
60 (可変) |
予約 |
sqluint32 |
可変 (2) |
トランザクションの XA ID |
SQLXA_XID |
可変 (140) |
同期ログ情報 |
変数 |
可変 (可変) |
全長: 202 バイト + 可変長部分 |
MPP 従属ノード準備のログ・レコード
このログ・レコードは、従属ノード上の MPP トランザクションについて書き込まれます。 このログ・レコードは、トランザクションの準備を 2 フェーズ・コミットの一部としてマークするために書き込まれます。 MPP 従属ノード準備のログ・レコードは、トランザクションを開始したアプリケーションを記述し、未確定トランザクションの再作成に使用されます。
表 10. MPP 従属ノード準備のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションが準備された時刻 |
sqluint64 |
40 (8) |
トランザクションによって使用されたログ・スペース |
sqluint64 |
48(8) |
コーディネーター・ノード LSN |
db2LSN |
56(8) |
埋め込み |
文字 [] |
64 (2) |
トランザクションの MPP ID |
SQLP_GXID |
66(20) |
全長: 86 バイト |
注: 1.The SQLP-GXID ログ・レコードは、MPP 環境でトランザクションを識別するために使用されます。
表 11. SQLP-GXID 構造のフィールド
フィールド名 |
データ・タイプ |
説明 |
FORMATID |
INTEGER |
GXID 形式 ID |
GXID_LENGTH |
INTEGER |
GXID の長さ |
BQAL_LENGTH |
INTEGER |
ブランチ ID の長さ |
データ |
CHAR(8) |
最初の 2 バイトはノード番号、残りはトランザクション ID |
TM 準備のログ・レコード
このログ・レコードは、単一パーティション・データベース環境の Db2® 整合トランザクション、またはデータベースが TM データベースとして機能している MPP のコーディネーター・パーティションに書き込まれます。 このログ・レコードは、トランザクションの準備を 2 フェーズ・コミットの一部としてマークするために書き込まれます。
表 12. TM 準備のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションが準備された時刻 |
sqluint64 |
40 (8) |
トランザクションによって使用されたログ・スペース |
sqluint64 |
48(8) |
トランザクション・ノード・リストのサイズ |
sqluint32 |
56 (4) |
トランザクション・ノード・リスト |
unsigned char [ ] |
60 (可変) |
予約 |
sqluint32 |
可変 (2) |
トランザクションの XA ID |
SQLXA_XID |
可変 (140) |
同期ログ情報 |
変数 |
可変 (可変) |
全長: 202 バイト + 可変長部分 |
バックアウト解放のログ・レコード
このログ・レコードは、バックアウト解放インターバルの終了をマークするために使用されます。 バックアウト解放インターバルは、トランザクションが打ち切られたときに補正されていないログ・レコードのセットです。 このログ・レコードには、8 バイトのログ・シーケンス番号 (complsn、オフセット 22 から始まるログ・レコード・ヘッダーに格納される) が含まれます。 特定のシナリオでは、バックアウト解放のログ・レコードにもログ・データが入ります。これはオフセット 30 で始まり、対応するデータ・マネージャー・ログ・レコードにログ記録されたデータと同じです。 このログ・レコードを (打ち切られたトランザクションの後の) ロールバック時に読み取ると、complsn が次に補正すべきログ・レコードをマークします。
表 13. バックアウト解放のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
Complsn |
db2LSN |
40 (8) |
ログ・データ1 |
変数 |
変数 |
全長: 48 バイト + 可変長部分 |
注: 1. 該当するのは特定のシナリオに限られます。使用する場合は、ログ・ヘッダー内のログ・レコード全体の長さが 28 バイトを超えます。
アプリケーション情報のログ・レコード
このログ・レコードには、このトランザクションを開始したアプリケーションに関する情報が含まれています。
表. 14 アプリケーション情報のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
トランザクションの開始時刻 |
sqluint32 |
40 (4) |
予約済み |
文字 [] |
44 (16) |
コード・ページ |
sqluint32 |
60 (4) |
アプリケーション名の長さ |
sqluint32 |
64 (4) |
アプリケーション名 |
文字 [] |
68 (可変) |
アプリケーション ID の長さ |
sqluint32 |
可変 (4) |
アプリケーション ID |
文字 [] |
可変 (可変) |
シーケンス番号の長さ |
sqluint32 |
可変 (4) |
シーケンス番号 |
文字 [] |
可変 (可変) |
クライアントによって使用されたデータベース別名の長さ |
sqluint32 |
可変 (4) |
クライアントによって使用されたデータベース別名 |
文字 [] |
可変 (可変) |
許可 ID の長さ |
sqluint32 |
可変 (4) |
許可 ID |
文字 [] |
可変 (可変) |
全長: 84 バイト + 可変長部分 |
フェデレーテッド準備のログ・レコード
このログ・レコードには、トランザクションに関与したフェデレーテッド・リソース・マネージャーに関する情報が含まれています。
表 15. フェデレーテッド準備のログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
リソース・マネージャーの数 |
sqluint32 |
40 (4) |
許可 ID の長さ |
sqluint16 |
44 (2) |
暗号化されたパスワードの長さ |
sqluint16 |
46 (2) |
許可 ID |
char [128] |
48 (128) |
暗号化されたパスワード |
char [263] |
176 (263) |
リソース・マネージャー項目 |
変数 |
439 (可変) |
全長: 439 バイト + 可変長部分 |
タイム・スタンプのログ・レコード
このログ・レコードには、ポイント・イン・タイム・リカバリーに使用できるタイム・スタンプが含まれています。
表 16. タイム・スタンプのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
タイム・スタンプ |
sqluint64 |
40 (8) |
全長: 48 バイト |
サブトランザクションのログ・レコード
このログ・レコードは、追加のトランザクション ID を使用して変更を追跡管理するトランザクション T1 に関して書き込まれます。 そのトランザクション ID を使用する後続のログ・レコードは、トランザクション T1 の一部なので、別のトランザクションと見なすべきではありません。 その追加のトランザクション ID を使用してコミットやアボートのログ・レコードは書き込まれることはありません。 1 つのトランザクションに対して複数のサブトランザクション・ログ・レコードが存在する場合もあります。 そのログ・レコードは、1 つのトランザクションによる変更を複数のスレッドで実行する場合に使用され、スレッドごとに別々のサブトランザクション ID で変更がログに記録されます。
表 17. サブトランザクションのログ・レコードの構造
説明 |
タイプ |
オフセット (バイト) |
ログ・ヘッダー |
LogManagerLogRecordHeader |
0 (40) |
サブトランザクション ID |
SQLU_TID |
40 (6) |
全長: 46 バイト |