ハートビート表のエンドツーエンド・レプリケーション・フロー
ハートビート表のエンドツーエンドのレプリケーション処理は、Oracle GoldenGateの証跡形式の使用に依存しています。この処理について、次に説明します。
-
ADD HEARTBEATTABLE
コマンドを使用して、各データベースにハートビート表を追加します。ハートビート表をすべてのソース・インスタンスおよびターゲット・インスタンスに追加し、既存のOracle GoldenGateプロセスを再起動して、ハートビート機能を有効にします。データベース・システムによっては、ハートビート表データを移入するためにジョブの作成または有効化が必要になることがあります。次の例を参照してください。DBLOGIN USERIDALIAS alias [DOMAIN domain]|[SYSDBA | SQLID sqlid][SESSIONCHARSET character_set]}
ADD HEARTBEATTABLE
-
(オプション) Oracle Databaseの場合、ハートビート更新はOracle
DBMS_SCHEDULER
に依存しているので、これが適切に動作していることを確認する必要があります。DBMS_SCHEDULER
を問い合せるには、次を発行します。SELECT START_DATE, LAST_START_DATE, NEXT_RUN_DATE FROM DBA_SCHEDULER_JOBS
Where
job_name
='GG_UPDATE_HEARTBEATS';
次に、
NEXT_RUN_DATE
(スケジューラを次回実行する日時)の有効な値を探します。これが過去のタイムスタンプである場合、ジョブは実行されないので修正する必要があります。スケジューラが機能しない一般的な理由は、パラメータ
job_queue_processes
の設定値が低すぎる(通常はゼロ)場合です。ALTER SYSTEM SET JOB_QUEUE_PROCESSES = ##;
(##
はジョブ・キュー・プロセス数)コマンドを使用して、データベースに構成されたjob_queue_processes
の数を増やします。 -
Extractを実行します。これにより、論理変更レコード(LCR)を受信時に、
OUTGOING_EXTRACT
列の値がチェックされます。-
Extract名がこの値に一致すると、
OUTGOING_EXTRACT_TS
列が更新され、レコードが証跡に入力されます。 -
Extract名が一致しない場合、LCRは破棄されます。
-
OUTGOING_EXTRACT
値がNULL
の場合、OUTGOING_EXTRACT_TS
とともに移入され、レコードが証跡に入力されます。
-
-
レコードの読取り時にDistribution Serviceによって、
OUTGOING_ROUTING_PATH
列の値がチェックされます。この列には分散パスのリストが含まれています。値が
NULL
の場合、列は現在のグループ名(およびパス、ただしこれがDistribution Serviceの場合)"*"
で更新され、OUTGOING_ROUTING_TS
列を更新して、レコードがそのターゲット証跡ファイルに書き込まれます。値のリストに
"*"
が含まれている場合は、それをgroup name[:pathname],"*"'
で置換して、OUTGOING_ROUTING_TS
列を更新し、レコードがそのターゲット証跡ファイルに書き込まれます。リストの値にアスタリスク(*)が含まれていない場合、分散パス名がリストにあると、リスト内の関連するgroup name[:pathname],"*"'
ペアに指定されたパスにレコードが送信されます。分散パス名がリストにない場合、レコードは破棄されます。Replicatを実行します。これによりレコードの受信時に、
OUTGOING_REPLICA
列の値がチェックされます。-
Replicat名が値に一致すると、ハートビート表の行が更新され、レコードが履歴表に挿入されます。
-
Replicat名が一致しない場合は、レコードが破棄されます。
-
値が
NULL
の場合、Replicatの列マッピングを暗黙的に起動して、ハートビート表とハートビート履歴表の行が更新されます。Replicatの自動列マッピング
REMOTE_DATABASE = LOCAL_DATABASE INCOMING_EXTRACT = OUTGOING_EXTRACT INCOMING_ROUTING_PATH = OUTGOING_ROUTING_PATH with "*" removed INCOMING_REPLICAT = @GETENV ("GGENVIRONMENT", "GROUPNAME") INCOMING_HEARTBEAT_TS = HEARTBEAT_TIMESTAMP INCOMING_EXTRACT_TS = OUTGOING_EXTRACT_TS INCOMING_ROUTING_TS = OUTGOING_ROUTING_TS INCOMING_REPLICAT_TS = @DATE ('UYYYY-MM-DD HH:MI:SS.FFFFFF','JTSLCT',@GETENV ('JULIANTIMESTAMP')) LOCAL_DATABASE = REMOTE_DATABASE OUTGOING_EXTRACT = INCOMING_EXTRACT OUTGOING_ROUTING_PATH = INCOMING_ROUTING_PATH OUTGOING_HEARTBEAT_TS = INCOMING_HEARTBEAT_TS OUTGOING_REPLICAT = INCOMING_REPLICAT OUTGOING_HEARTBEAT_TS = INCOMING_HEARTBEAT_TS
-
その他の考慮事項:
ハートビートがシステムを流れる際の遅延の計算は、ソース・システムとターゲット・システムのクロックが正確に設定されているかどうかに依存します。ターゲット・システムがソース・システムよりも進んでいると、遅延が負の値になる可能性があります。クロックの差異に気付いて修正する措置を取れるよう、遅延は負の数値として表示されます。
システムを流れるタイムスタンプはUTCで設定されています。タイムスタンプにはタイムゾーンが関連付けられていないので、各コンポーネントが異なるタイムゾーンに設定されている場合でも、ハートビート表を表示するときは、すぐに遅延を表示できます。基礎となる表を基に必要なビューを書き込むことができます。UTCが推奨されます。
すべてのハートビート・エントリはUTF-8で証跡に書き込まれます。
送信パスと受信パスを組み合せて一意に行が特定されます。つまり、送信パスが同じで受信パスが異なる2つの行がある場合、2つの一意のエントリとみなされます。
ハートビート表の詳細
GG_HEARTBEAT
表には、エンドツーエンド・レプリケーション時間のタイムスタンプ情報と、異なるコンポーネントのプライマリとセカンダリのExtractおよびReplicatのタイミング情報が表示されます。
片方向環境では、ターゲット・データベースのみにレプリケーション・ラグに関する情報が含まれます。この場合は、レコードがソース・データベースで生成され、ターゲット・データベースでクライアントに見えるようになります。
ノート:
ソース・データベースとリモート・データベースの両方が同じ名前の場合、自動ハートビート表はOUTGOING_%
列にデータを移入しません。データベース名を変更するには、ユーティリティDBNEWID
を使用します。詳細は、DBNEWID
ユーティリティを参照してください。
列 | データ型 | 説明 |
---|---|---|
|
|
リモート・データベースからのレプリケーション時間が計測されるローカル・データベース。 |
|
|
タイムスタンプがリモート・データベースで生成された時点。 |
|
|
タイムスタンプが生成されるリモート・データベース |
|
|
リモート・データベースでのプライマリExtract (取得)の名前 |
|
|
リモート・データベースでのセカンダリExtract (ポンプ)の名前 |
|
|
ローカル・データベースでのReplicatの名前。 |
|
|
情報がローカル・データベースの |
|
|
生成されたタイムスタンプがリモート・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
生成されたタイムスタンプがリモート・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
生成されたタイムスタンプがローカル・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: ローカル・データベースのプライマリExtractの名前。 |
|
|
双方向/N方向レプリケーション: ローカル・データベースのセカンダリExtractの名前。 |
|
|
双方向/N方向レプリケーション: リモート・データベースのReplicatの名前。 |
|
|
双方向/N方向レプリケーション: 情報がリモート・データベースの表に挿入されるときの最終タイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがリモート・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
- |
|
|
- |
|
|
- |
|
|
- |
GG_HEARTBEAT_HISTORY
表には、エンドツーエンド・レプリケーション時間のタイムスタンプ履歴情報と、異なるコンポーネントのプライマリとセカンダリのExtractおよびReplicatのタイミング情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。
タイムスタンプはUTCタイムゾーンで管理されます。この場合は、レコードがソース・データベースで生成され、ターゲット・データベースでクライアントに見えるようになります。
列 | データ型 | 説明 |
---|---|---|
|
|
エンドツーエンド・ラグが計測されるローカル・データベース。 |
|
|
リモート・データベースのタイムスタンプがローカル・データベースで受け取られた時点。 |
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
|
リモート・データベースのプライマリExtractの名前。 |
|
|
リモート・データベースのセカンダリExtractの名前。 |
|
|
ローカル・データベースでのReplicatの名前。 |
|
|
情報がローカル・データベースの |
|
|
生成されたタイムスタンプがリモート・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
生成されたタイムスタンプがリモート・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
生成されたタイムスタンプがローカル・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: ローカル・データベースのプライマリExtractの名前。 |
|
|
双方向/N方向レプリケーション: ローカル・データベースのセカンダリExtractの名前。 |
|
|
双方向/N方向レプリケーション: リモート・データベースのReplicatの名前。 |
|
|
双方向/N方向レプリケーション: 情報がリモート・データベースの表に永続的に挿入されたときの最終タイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがリモート・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
この列は、このハートビート・レコードを処理するときにReplicatによって移入されます。このレコードを処理する際に、現在の低水位標(LWM)がこの列に移入されます。これにより、ReplicatのLWM以降のハートビート・レコードからLOGBSNを選択できます。 |
|
|
この列は、Extractによって移入され、ソース・データベースのハートビート・トランザクションのソース・コミットSCNが含まれています。ソース・データベースのハートビート・ジョブは、コミットSCNを先験的に知らないため、この値を移入できません。 |
|
|
この列は、Extractによって移入され、Extractがこの特定のハートビート・レコードを処理するときの現在のLOGBSNが含まれています。ソース・データベースのハートビート・ジョブはこの値を移入しません。 |
|
|
この列は、Extractによって移入され、Extractがこの特定のハートビート・レコードを処理するときの現在のLOGBSNに対応するUTCのREDOタイムスタンプが含まれています。ソース・データベースのハートビート・ジョブはこの値を移入しません。 |
GG_LAG
ビューには、ローカル・データベースとリモート・データベースのレプリケーション・ラグに関する情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。ラグは秒単位で計測されます。
列 | データ型 | 説明 |
---|---|---|
|
|
リモート・データベースからのエンドツーエンド・レプリケーション・ラグが計測されるローカル・データベース。 |
|
|
ローカル・データベースの現在のタイムスタンプ。 |
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
|
リモート・データベースから受信した最新のハートビートの経過時間。 |
|
|
リモート・データベースからExtractおよびReplicatコンポーネントを含むローカル・データベースへのレプリケーション・パス。 |
|
|
リモート・データベースからローカル・データベースへのレプリケーション・ラグ。この時間は、リモート・データベースでハートビートが生成された時刻から、ローカル・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
ローカル・データベースからリモート・データベースへの最新のハートビートの経過時間。 |
|
|
ローカル・データベースからExtractおよびReplicatコンポーネントを含むリモート・データベースへのレプリケーション・パス。 |
|
|
ローカル・データベースからリモート・データベースへのレプリケーション・ラグ。この時間は、ローカル・データベースでハートビートが生成された時刻から、リモート・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
ソースExtractの再開位置。 |
|
|
リモート・データベースの一意の名前が表示されます。一意の名前が存在しない場合は、 |
|
Timestamp |
ソースExtractのREDOの位置に関連付けられたタイムスタンプ。 |
|
Timestamp |
Extractが現在処理しているソース・データベースで最も古いオープン・トランザクションの経過時間。この列は、 |
|
String |
ハートビートを処理したときのローカルReplicatの低水位標CSN。 |
GG_LAG_HISTORY
ビューには、ローカル・データベースとリモート・データベースのレプリケーション・ラグ履歴に関する履歴情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。
ラグは秒単位です。
列 | データ型 | 説明 |
---|---|---|
|
|
リモート・データベースからのエンドツーエンド・レプリケーション・ラグが計測されるローカル・データベース。 |
|
|
リモート・データベースのタイムスタンプがローカル・データベースで受け取られた時点。 |
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
String | リモート・データベース名。 |
DB_UNIQUE_NAME |
String | リモート・データベースの一意の名前。データベースの一意の名前が存在しない場合、DB_NAME とDB_UNIQUE_NAME は同じになります。
スタンバイへのスイッチオーバーのシナリオでは、 |
|
|
ハートビート表の経過期間。 |
|
|
リモート・データベースからExtractおよびReplicatコンポーネントを含むローカル・データベースへのレプリケーション・パス。 |
|
|
リモート・データベースからローカル・データベースへのレプリケーション・ラグ。この時間は、リモート・データベースでハートビートが生成された時刻から、ローカル・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
|
|
|
ローカル・データベースからExtractおよびReplicatコンポーネントを含むリモート・データベースへのレプリケーション・パス。 |
|
|
ローカル・データベースからリモート・データベースへのレプリケーション・ラグ。この時間は、ローカル・データベースでハートビートが生成された時刻から、リモート・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
ソースExtractの再開位置。 |
|
|
ソースExtractのREDOの位置に関連付けられたタイムスタンプ。 |
|
|
Extractが現在処理しているソース・データベースで最も古いオープン・トランザクションの経過時間。この列は、 |
|
|
ハートビートを処理したときのローカルReplicatの低水位標CSN。 |
|
- |
- |
|
- | - |
|
- | - |
|
- | - |
|
- | - |
|
- | - |
|
- | - |
|
- | - |