ジャーナル抽出(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つの例を次に示します:
インスタンス上の外部フィルタは、SETレコードを異なるスキーマを持つNULLレコードへ変換します。
もしソース側でトリガーが有効になっていて、その受信側がGT.Mのプリ・トリガー(pre-trigger)のバージョンを実行しているか、または、トリガーがサポートされていないプラットフォーム(AXP VMSまたはHP HPPAなど)で実行されている場合は、ソース側からのトリガー定義ジャーナル・レコードは受信側のNULLレコードに変換されます。
重要 | |
---|---|
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接頭辞を持ち、それ以外のすべての数値フィールドは小数です):
|
トランザクション番号 |
|
レコードのチェックサム |
|
EPOCHの作成時に、 DBが完全にアップグレードされた場合(dse dump -file -allで示されます)は、1 |
|
jnlレコードを書き込んだプロセスID |
|
もし非ゼロの場合、clntpid はサーバー側でこの更新を開始したGT.CMクライアントのプロセスIDです。 |
|
ジャーナルのシーケンス番号 |
|
ユニークな8バイトのトークン |
|
もしレプリケーションが真であり、この更新が非補足的インスタンスで生じたが、しかし補足的インスタンスに複製されて更新された場合、この番号は非補足的なストリーム番号を示す1以上から15以下の範囲の非ゼロ値です。それ以外の場合は、このストリーム番号の値は0です。EPOCHレコードの場合、0から16までの任意の補足インスタンスのレプリケーションのソースが存続期間中のインスタンスに複製されたことに応じて、このような "strm_num"番号が表示されることがあります。 |
|
もしレプリケーションが真であり、この更新が非補足的インスタンスで発生したものの、補足的インスタンスに複製され更新された場合、オリジナルの非補足的インスタンスの更新のジャーナルシーケンス番号です。もしレプリケーションが真であり、この更新が補足的インスタンスで発生した場合、これはオリジナルの補足インスタンスの更新のジャーナルシーケンス番号です。それ以外の場合は、このストリームシーケンス番号は0です。ジャーナル seqno は実際にはそのストリーム番号からの最新の更新よりも1つ多いことに注意してください。EPOCHレコードの場合、0〜16の任意の「strm_seq」番号が、補足インスタンスのレプリケーションのソースがその存続期間中にインスタンスに複製された回数に応じて表示されることがあります。 |
|
対応するTSTARTコマンドの引数として指定されたTRANSACTIONID文字列(BATCHまたはアプリケーションによって選択された説明文の文字列)TRANSACTIONIDがTSTARTで指定されていない場合、GT.Mは |
|
もしレプリケーションがオンになっている場合は、ジャーナルシーケンス番号です。そうでない場合、それはユニークな8バイトトークンです。 |
|
LGTRIGジャーナルレコードに対応する定義文字列をトリガします。 |
|
=n ここで、これはTPトランザクションのn番目の更新です。1回目の更新ではn=1です。非TPの場合は0です。 |
|
バイナリ・マスクとして解釈される10進数。現在、5ビットしか使用されていません。
上記ビットの組み合わせは、個々のビット特性のそれぞれを意味します。例えば、トリガー・コンテキスト内で 00011 =>更新、少なくとも1つのトリガーが定義されているグローバルへ。特定のビットの組み合わせは不可能です。たとえば、GT.Mはトリガーを起動しない更新を複製するため、01001となります。 |
|
SETまたはKILLで更新されているキー。 |
|
SETの右側の引数(つまり、キーが設定されている値)。 |
|
このTPに参加しているジャーナル領域の数(このTPで記述されたTCOM / ZTCOMレコード)。 |
|
Inctn オペコード。可能なすべての値については、gdsfhead.h inctn_opcode_tを参照してください。 |
|
PBLK または AIMG または INCTNレコードに対応するブロック番号。 |
|
PBLK または AIMGレコードのヘッダーフィールドからブロックサイズ。 |
|
PBLK または AIMGレコードのブロックヘッダからのトランザクション番号。 |
|
このブロックのディスク・ブロック版では、PBLKまたはAIMGレコードの作成時に使用されます。0 => V4, 1 => V5. |
|
opcode = 1,2,3の場合は0、opcode = 4,5,6の場合、blks2upgrd; opcode = 7,8,9,10,11,12,13の場合はblknum |
|
$ZTWORMHOLEに対応する文字列 |
|
opcode = 4,5の場合に作成された新しいV4形式のビットマップブロック数。 opcode = 6の場合、csd-> blks_to_upgrd |
|
このPINIレコードを書き込んだユーザーの名前。 |
|
空でない場合、clntunamはサーバー側でこの更新を開始したGT.CMクライアントの名前です。 |