ジャーナル 抽出フォーマット

ジャーナル抽出(Journal EXTRACT)ファイルは、常にラベルで始まります。GT.Mの現在のリリースでは、単純なジャーナル抽出ファイルのラベルはGDSJEX07です。このラベルは、ファイルのフォーマットを識別するために必要です。

もし環境変数 gtm_chset がUTF-8に設定されている場合、UTF-8モードを示す別のラベル「UTF-8」がファイル形式ラベルの後に続きます。

このラベルの後、ジャーナルレコードの抽出が続きます。これらのジャーナルレコードの抽出には、バックスラッシュ(\)で区切られたフィールドまたはピースが含まれます。

-EXTRACT出力レコードの1番目の部分は、2桁の10進数トランザクション・レコードタイプを含みます(たとえば、プロセス初期化レコードの場合は01)。2番目の部分は、$HOROLOG形式で表されている完全な操作の日付と時刻を含みます。3番目の部分は、ジャーナルファイルによる対象期間内にトランザクションを一意に識別するGT.M割り当て番号(データベース・トランザクション番号)が含まれています。4番目の部品は、10進数として表される、操作を実行したプロセスのプロセスID(PID)が含まれます。残りのレコードはレコード・タイプによって異なります。

レコードタイプ、SET, KILL, ZKILL, TSTART, TCOMMIT は、出力の一部としてトークン・シーケンス(token_seq)が含まれます。これは、ジャーナルレコード抽出の出力では6番目のフィールドです。レプリケーションが使用されている場合、token_seq(トークン・シーケンス)は、各トランザクションを一意に識別するジャーナル・シーケンス番号(jsnum)です(ジャーナル・シーケンス番号の詳細は、 第7章: “データベース・レプリケーション を参照してください)。レプリケーションが使用されておらず、トランザクションがTPトランザクションの場合、token_seqはTPトランザクション全体を一意に識別する8バイトのトークンです。非レプリケーション、非TPジャーナル・レコードの場合、token_seqはゼロ(0)の値を持ちます。

簡単なジャーナル抽出のフォーマットは次のとおりです:

NULL 00\time\tnum\pid\clntpid\jsnum\strm_num\strm_seq
PINI(U) 01\time\tnum\pid\nnam\unam\term\clntpid\clntnnam\clntunam\clntterm
PINI(V) 01\time\tnum\pid\nnam\unam\term\mode\logintime\image_count\pname\clntpid\clntnnam\clntunam\clntterm\clntmode\clntlogintime\clntimage_count\clntpname
PFIN 02\time\tnum\pid\clntpid
EOF 03\time\tnum\pid\clntpid\jsnum
KILL 04\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
SET 05\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
ZTSTART 06\time\tnum\pid\clntpid\token
ZTCOM 07\time\tnum\pid\clntpid\token\partners
TSTART 08\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq
TCOM 09\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\partners\tid
ZKILL 10\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
ZTWORM 11\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\ztwormhole
ZTRIG 12\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
LGTRIG 13\time\tnum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\trigdefinition

これは:

01 レコードは、初回時に現在のジャーナル・ファイルへプロセス(process)/イメージ(image)の初期化された更新(PINI)を示します。

02 レコードは、現在のジャーナル・ファイル内のプロセス/イメージの落ち込んだ(dropped)関心(PFIN)を示します。

03 レコードは、このジャーナルファイルに、GT.Mイメージの落ち込んだ関心のすべてのを示し、ジャーナルファイルは正常に閉じられました。

04 レコードは、KILLコマンドによって発生したデータベースが更新されたことを示します。

05 レコードは、SETコマンドによって発生したデータベースの更新を示します。

06 レコードは、ZTSTARTコマンドを示します。

07 レコードは、ZTCOMMITコマンドを示します。

08 レコードは、TSTARTコマンドを示します。

09 レコードはTCOMMITコマンドを示します。

10 レコードは、ZKILLコマンドによって発生したデータベースが更新されたことを示します。

11 レコードは、$ZTWORMHOLEの値を示します(レプリケーションがオンの場合)。

12 レコードは、ZTRIGGERコマンドを示します。

13 レコードは、オリジナル/プライマリのインスタンスから複製/セカンダリのインスタンスへ論理アクションとしてのトリガー定義を示します

ジャーナル抽出には、トリガーまたは外部のM-フィルターがアクティブなマルチサイト・レプリケーション構成でのみNULLレコードが含まれます。ジャーナル・ファイルにNULLレコードが送信される場合の2つの例を次に示します:

[重要] 重要

NULLレコードにはグローバル情報がありません。したがって、グローバルディレクトリのアルファベット順で最後に複製された領域(Region)に存在します。

詳細なジャーナル抽出のフォーマットは次のとおりです:

PINI(U) time\tnum\chksum\pid\nnam\unam\term\clntpid\clntnnam\clntunam\clntterm
PINI(V) time\tnum\chksum\pid\nnam\unam\term\mode\logintime\image_count\pname\clntpid\clntnnam\clntunam\clntterm\clntmode\clntlogintime\clntimage_count\clntpname
PFIN time\tnum\chksum\pid\clntpid
EOF time\tnum\chksum\pid\clntpid\jsnum
SET time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
KILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
ZKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
ZTWORM time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\ztwormhole
ZTRIG time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
TSTART time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq
TSET time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
TKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
TZKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
TZTWORM time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\ztwormhole
TZTRIG time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
TLGTRIG time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\trigdefinition
USET time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
UKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
UZKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
UZTWORM time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\ztwormhole
UZTRIG time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
ULGTRIG time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\trigdefinition
TCOM time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\partners\tid
INCTN time\tnum\chksum\pid\clntpid\opcode\incdetail
EPOCH time\tnum\chksum\pid\clntpid\jsnum\blks_to_upgrd\free_blocks\total_blks\fully_upgraded[\strm_num\strm_seq]...
PBLK time\tnum\chksum\pid\clntpid\blknum\bsiz\blkhdrtn\ondskbver
AIMG time\tnum\chksum\pid\clntpid\blknum\bsiz\blkhdrtn\ondskbver
NULL time\tnum\chksum\pid\clntpid\jsnum\strm_num\strm_seq
ZTSTART time\tnum\chksum\pid\clntpid\token
FSET time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
FKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
FZKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
GSET time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node=sarg
GKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
GZKILL time\tnum\chksum\pid\clntpid\token_seq\strm_num\strm_seq\updnum\nodeflags\node
ZTCOM time\tnum\chksum\pid\clntpid\token\partners
ALIGN time\tnum\chksum\pid\clntpid

これは:

AIMGレコードはDSEアクションに固有であり、それらのアクションには「論理的」な表現がないので存在します。

EPOCHレコードは、ジャーナルのチェック・ポインティングに関する情報を記録するステータス・レコードです。

NCTNレコードは、プロセスが以前に使用されたようにグローバルのデータベースブロックをマークしたが、もはやビットマップで使用されていないクリティカルセクションのシーケンスのトランザクション番号です。

PBLKレコードは、ビットマップの以前のイメージ・レコードです。

ALIGNはパッド・ジャーナル・レコードを記録し、ジャーナル・ファイル内のすべての整列サイズ境界(MUPIP SET -JOURNALで設定され、DSE DUMP -FILEHEADER出力に表示される)が新鮮なジャーナル・レコードで始まるようにします。これらの記録の唯一の目的は、ジャーナル回復のスピードアップを支援することです。

凡例(すべての16進数フィールドは0x接頭辞を持ち、それ以外のすべての数値フィールドは小数です):

tnum

トランザクション番号

chksum

レコードのチェックサム

fully_upgraded

EPOCHの作成時に、 DBが完全にアップグレードされた場合(dse dump -file -allで示されます)は、1

pid

jnlレコードを書き込んだプロセスID

clntpid

もし非ゼロの場合、clntpid はサーバー側でこの更新を開始したGT.CMクライアントのプロセスIDです。

jsnum

ジャーナルのシーケンス番号

token

ユニークな8バイトのトークン

strm_num

もしレプリケーションが真であり、この更新が非補足的インスタンスで生じたが、しかし補足的インスタンスに複製されて更新された場合、この番号は非補足的なストリーム番号を示す1以上から15以下の範囲の非ゼロ値です。それ以外の場合は、このストリーム番号の値は0です。EPOCHレコードの場合、0から16までの任意の補足インスタンスのレプリケーションのソースが存続期間中のインスタンスに複製されたことに応じて、このような "strm_num"番号が表示されることがあります。

strm_seq

もしレプリケーションが真であり、この更新が非補足的インスタンスで発生したものの、補足的インスタンスに複製され更新された場合、オリジナルの非補足的インスタンスの更新のジャーナルシーケンス番号です。もしレプリケーションが真であり、この更新が補足的インスタンスで発生した場合、これはオリジナルの補足インスタンスの更新のジャーナルシーケンス番号です。それ以外の場合は、このストリームシーケンス番号は0です。ジャーナル seqno は実際にはそのストリーム番号からの最新の更新よりも1つ多いことに注意してください。EPOCHレコードの場合、0〜16の任意の「strm_seq」番号が、補足インスタンスのレプリケーションのソースがその存続期間中にインスタンスに複製された回数に応じて表示されることがあります。

tid

対応するTSTARTコマンドの引数として指定されたTRANSACTIONID文字列(BATCHまたはアプリケーションによって選択された説明文の文字列)TRANSACTIONIDがTSTARTで指定されていない場合、GT.Mはtidをnullに設定します。 TRANSACTIONIDはtidに任意の値を指定できますが、TRANSACTIONIDがBATCHまたはBAを指定した場合にのみ、GT.Mの動作に影響します。

token_seq

もしレプリケーションがオンになっている場合は、ジャーナルシーケンス番号です。そうでない場合、それはユニークな8バイトトークンです。

trigdefinition

LGTRIGジャーナルレコードに対応する定義文字列をトリガします。

updnum

=n ここで、これはTPトランザクションのn番目の更新です。1回目の更新ではn=1です。非TPの場合は0です。

nodeflags

バイナリ・マスクとして解釈される10進数。現在、5ビットしか使用されていません。

  • 00001(1)=> ジャーナルは更新されますが、レプリケートされません(たとえば、トリガー内で更新)

  • 00010(2)=> 少なくとも1つのトリガーが定義されているグローバルへの更新。この更新に一致するトリガーがない場合でも。

  • 00100(4)=> $ZTWORMHOLEは、このアップデート時に空文字列( "")を保持するか、このアップデート中に参照されませんでした

  • 01000(8)=> 更新が存在していてもトリガーを起動しませんでした(たとえば、MUPIP LOAD)

  • 10000(16)=>更新(setまたはkill)が重複しているかどうか。 KILLの場合、それはいくつかの存在しないノード(別名:重複のKill)をkillすることです。dupkill は更新プロセスの場合にのみ発生することに注意してください。GT.Mの場合、KILLは完全にスキップされます。 両方の場合(重複 setまたは重複 kill)には、jnlレコードのみが書き込まれ、dbは変更されません。

上記ビットの組み合わせは、個々のビット特性のそれぞれを意味します。例えば、トリガー・コンテキスト内で 00011 =>更新、少なくとも1つのトリガーが定義されているグローバルへ。特定のビットの組み合わせは不可能です。たとえば、GT.Mはトリガーを起動しない更新を複製するため、01001となります。

node

SETまたはKILLで更新されているキー。

sarg

SETの右側の引数(つまり、キーが設定されている値)。

partners

このTPに参加しているジャーナル領域の数(このTPで記述されたTCOM / ZTCOMレコード)。

opcode

Inctn オペコード。可能なすべての値については、gdsfhead.h inctn_opcode_tを参照してください。

blknum

PBLK または AIMG または INCTNレコードに対応するブロック番号。

bsiz

PBLK または AIMGレコードのヘッダーフィールドからブロックサイズ。

blkhdrtn

PBLK または AIMGレコードのブロックヘッダからのトランザクション番号。

ondskbver

このブロックのディスク・ブロック版では、PBLKまたはAIMGレコードの作成時に使用されます。0 => V4, 1 => V5.

incdetail

opcode = 1,2,3の場合は0、opcode = 4,5,6の場合、blks2upgrd; opcode = 7,8,9,10,11,12,13の場合はblknum

ztwormhole

$ZTWORMHOLEに対応する文字列

blks2upgrd

opcode = 4,5の場合に作成された新しいV4形式のビットマップブロック数。 opcode = 6の場合、csd-> blks_to_upgrd

uname

このPINIレコードを書き込んだユーザーの名前。

clntunam

空でない場合、clntunamはサーバー側でこの更新を開始したGT.CMクライアントの名前です。

inserted by FC2 system