主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGateの管理for Windows and UNIX
12c (12.2.0.1)
E70111-04
目次へ移動
目次

前
次

D コミット順序番号について

この付録では、Oracle GoldenGateのコミット順序番号(CSN)の詳細を説明します。

Oracle GoldenGateを使用する場合、コミット順序番号(CSN)を参照する必要がある場合があります。CSNは、トランザクション・ストリームでExtractの位置を指定する場合、証跡でReplicatの位置を再指定する場合、またはその他の目的で必要になることがあります。変換関数の中にはこれを返すものがあります。また、レポートおよび一部のGGSCI出力に含まれます。

CSNは、トランザクションがデータベースにコミットされた時点を一意に識別するOracle GoldenGateによって生成される、単調増加の識別子です。目的は、トランザクションがソースからターゲットにレプリケートされるとき、トランザクション一貫性とデータ整合性を保証することです。

各種のデータベース管理システムでは、各トランザクションの完了時になんらかの一意のシリアル番号が独自に生成され、そのトランザクションのコミットが一意に識別されます。たとえば、Oracle RDBMSがシステム変更番号を生成すると、それはOracle RDBMSによって各イベントに割り当てられる、単調増加の順序番号になります。CSNは、この同じ識別情報を取得して、それを内部的に一連のバイト列として表現します。ただし、CSNは、プラットフォームに依存しない方法で処理されます。それぞれが同じログ・ストリームのトランザクション・コミット・レコードにバインドされた2つの任意のCSN番号を比較することで、2つのトランザクションが完了した順序が正確に示されます。

CSNは、トランザクションID(Oracle GoldenGateの情報出力でXIDと表示されます)でクロスチェックされます。同時にコミットする複数のトランザクションがあるため、同じCSNを持っている場合でも、XIDとCSNの組合せでは、トランザクションが一意に識別されます。たとえば、並列度と高いトランザクション同時並行性があるOracle RAC環境で、これが発生することがあります。

CSN値は、トランザクションのコミットを識別する証跡レコードにトークンとして格納されます。この値は、@GETENV列変換関数を使用して取得することや、ログダンプ・ユーティリティを使用して表示することができます。

Oracle、DB2 LUWおよびDB2 z/OS以外のすべてのデータベース・プラットフォームは、固定長のCSNを持ちます。このCSNには、固定長にするために必要に応じて先行する0(ゼロ)が埋め込まれます。複数のフィールドを含むCSNは、各フィールド内で埋込みが行われることがあります(Sybase CSNなど)。

MySQLではトランザクションIDがイベント・データの一部として作成されないため、Oracle GoldenGateは次の項目の組合せを一意のトランザクション識別子とみなします。


表D-1 Oracle GoldenGateのデータベースごとのCSN値

データベース CSN値

DB2 for i

sequence_number

説明:

  • sequence_numberは、固定長の20桁の10進ベースのDB2 iシステム順序番号です。

例:

12345678901234567890

DB2 LUW

LSNまたはLRI

説明:

  • バージョン9.7以前では、LSNは、可変長の10進ベースのDB2ログ順序番号です。

    例:

    1234567890
  • バージョン10.1以降では、LRIは、DB2ログ・レコード識別子のピリオド区切りの番号のペアです。

    例:

    123455.34645

DB2 z/OS

RBA

説明:

  • RBAは、トランザクション・ログ内のコミット・レコードにおける6バイトの相対バイト・アドレスです。

例:

1274565892

MySQL

LogNum:LogPosition

説明:

  • LogNumは、識別されるトランザクションのSTART TRANSACTIONレコードが含まれるログ・ファイルの名前です。

  • LogPositionは、そのレコードのイベント・オフセット値です。イベント・オフセット値は、ログ・レコードのレコード・ヘッダー・セクションに格納されます。

たとえば、ログ番号が12で、ログ位置が121の場合、CSNは次のようになります。

000012:000000000000121

Oracle

system_change_number

説明:

  • system_change numberは、OracleのSCN値です。

例:

6488359

SQL/MX

sequence_number|RBA

説明:

  • sequence_numberは、先行する0(ゼロ)が埋め込まれた、6桁の10進NonStop TMF監査証跡順序番号です。

  • RBAは、先行する0(ゼロ)が埋め込まれた、そのファイル内の10桁の10進相対バイト・アドレスです。

この2つの要素によって、TMFマスター監査証跡(MAT)の位置を指定します。

例:

000042|0000068242

SQL Server

データベースが値を戻す方法に応じて、次のいずれかになります。

  • 先行する0(ゼロ)が埋め込まれた、0X接頭辞付きのコロン区切りの16進文字列(8:8:4)

  • 先行する0(ゼロ)が埋め込まれた、コロン区切りの10進文字列(10:10:5)

  • 先行する0(ゼロ)のない、0X接頭辞付きのコロン区切りの16進文字列

  • 先行する0(ゼロ)のない、コロン区切りの10進文字列

  • 10進文字列

説明:

  • 最初の値は仮想ログ・ファイル番号、2番目の値は仮想ログ内のセグメント番号、3番目の値はエントリ番号です。

例:

0X00000d7e:0000036b:01bd
0000003454:0000000875:00445
0Xd7e:36b:1bd
3454:875:445
3454000000087500445

Sybase

time_high.time_low.page.row

説明:

  • time_highおよびtime_lowは、ログ・ページのインスタンスIDを表します。これは、各データベース・ログ・ページのヘッダーに格納されます。time_highは2バイトで、time_lowは4バイトです(それぞれ先行する0(ゼロ)が埋め込まれます)。

  • pageは、0(ゼロ)が埋め込まれたデータベース論理ページ番号です。

  • rowは、0(ゼロ)が埋め込まれた行番号です。

これらの構成要素が組み合されて、ログ・ストリーム内で一意の位置を表します。timestamp-highの2バイト整数の有効範囲は、0から65535です。timestamp-lowの4バイト整数の場合、0から4294967295です。

例:

00001.0000067330.0000013478.00026

Teradata

sequence_ID

説明:

  • sequence_IDは、固定長の出力可能な汎用順序IDです。

例:

0x0800000000000000D700000021

TimesTen

TimesTenにはCSNはありません。このデータベースでは、Oracle GoldenGateによる抽出(取得)がサポートされないためです。