この章では、データベースのレプリケーション状態の監視と管理に使用できるいくつかのTimesTenユーティリティおよび組込みプロシージャについて説明します。
レプリケーションは、コマンドラインとプログラムの両方で管理および監視できます。この章で説明するttStatus
およびttRepAdmin
ユーティリティは、コマンドラインでの問合せに有効です。レプリケーションをプログラムによって管理および監視するには、TimesTen組込みプロシージャ(『Oracle TimesTen In-Memory Databaseリファレンス』を参照)を使用するか、または独自のSQL SELECT
文を作成してレプリケーション表(『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』を参照)を問い合せます。
ノート: TimesTenSYS およびTTREP 表には問合せのためにのみアクセスできます。これらの表の内容を変更しようとしないでください。 |
この章の内容は次のとおりです。
レプリケーション・エージェントの現在の状態についての情報を表示できます。
また、特定のレプリケーション・データベースの状態も取得できます(「サブスクライバ・データベース情報の表示」および「レプリケーション・データベースの構成の表示」を参照)。
マスター・データベースのレプリケーション・エージェントが起動されていることを確認するには、ttStatus
ユーティリティを使用します。
例11-1 ttStatusを使用したレプリケーション・エージェントのステータスの取得
> ttStatus TimesTen status report as of Thu Aug 11 17:05:23 2011 Daemon pid 18373 port 4134 instance ttuser TimesTen server pid 18381 started on port 4136 ------------------------------------------------------------------------ Data store /tmp/masterds There are 16 connections to the data store Shared Memory KEY 0x0201ab43 ID 5242889 PL/SQL Memory KEY 0x0301ab43 ID 5275658 Address 0x10000000 Type PID Context Connection Name ConnID Process 20564 0x081338c0 masterds 1 Replication 20676 0x08996738 LOGFORCE 5 Replication 20676 0x089b69a0 REPHOLD 2 Replication 20676 0x08a11a58 FAILOVER 3 Replication 20676 0x08a7cd70 REPLISTENER 4 Replication 20676 0x08ad7e28 TRANSMITTER 6 Subdaemon 18379 0x080a11f0 Manager 2032 Subdaemon 18379 0x080fe258 Rollback 2033 Subdaemon 18379 0x081cb818 Checkpoint 2036 Subdaemon 18379 0x081e6940 Log Marker 2035 Subdaemon 18379 0x08261e70 Deadlock Detector 2038 Subdaemon 18379 0xae100470 AsyncMV 2040 Subdaemon 18379 0xae11b508 HistGC 2041 Subdaemon 18379 0xae300470 Aging 2039 Subdaemon 18379 0xae500470 Flusher 2034 Subdaemon 18379 0xae55b738 Monitor 2037 Replication policy : Manual Replication agent is running. Cache Agent policy : Manual PL/SQL enabled.
データベースに対するポリシー設定(「レプリケーション・エージェントの起動および停止」で説明されているレプリケーション再起動ポリシーを含む)を確認するには、-query
オプションを指定してttAdmin
ユーティリティを使用します。
レプリケーション・エージェントの状態をプログラムから取得するには、ttDataStoreStatus
組込みプロシージャを使用します。
例11-3 ttDataStoreStatusのコール
masterds
データベースのレプリケーション・エージェントの状態を取得するには、ttDataStoreStatus
組込みプロシージャをコールします。
> ttIsql masterds Command> CALL ttDataStoreStatus('/tmp/masterds'); < /tmp/masterds, 964, 00000000005D8150, subdaemon, Global\DBI3b3234c0.0.SHM.35 > < /tmp/masterds, 1712, 00000000016A72E0, replication, Global\DBI3b3234c0.0.SHM.35 > < /tmp/masterds, 1712, 0000000001683DE8, replication, Global\DBI3b3234c0.0.SHM.35 > < /tmp/masterds, 1620, 0000000000608128, application, Global\DBI3b3234c0.0.SHM.35 > 4 rows found.
ttDataStoreStatus
の出力は、「ttStatusを使用したレプリケーション・エージェントのステータスの取得」のttStatus
ユーティリティの出力に類似しています。
サブスクライバ・レプリケーション・エージェントの状態は、そのマスター・データベースによって記述されます。障害が発生したサブスクライバ・データベースをリカバリする場合は、レプリケーション・スキームで通信するマスター・データベースに対するサブスクライバ・データベースのレプリケーション状態を再設定する必要があります。サブスクライバ・データベースの状態は、コマンドラインまたはプログラムから再設定できます。
コマンドラインから、ttRepAdmin
-state
を使用して、いずれかのサブスクライバ・データベースのレプリケーション状態を再設定するようにマスター・データベースに指示します。
ttIsqlから、ttRepSubscriberStateSet
組込みプロシージャをコールして、いずれかまたはすべてのサブスクライバ・データベースのレプリケーション状態を再設定するようにマスター・データベースに指示します。
データベースの状態の問合せについては、「レプリケーション・エージェントの状態の表示」を参照してください。
マスター・データベースは、サブスクライバ・データベースをstart
、pause
またはstop
のいずれかの状態に設定できます。データベースの状態は、表11-1に示すとおり、TTREP.REPPEERS
表のSTATE
列に整数値として示されます。
表11-1 データベースの状態
状態 | 説明 |
---|---|
|
レプリケーション更新が収集され、できるかぎり早くサブスクライバ・データベースに送信されます。サブスクライバ・データベースのレプリケーションが動作していない場合、更新は、送信可能になるまでトランザクション・ログ・ファイルに保存されます。 |
|
レプリケーション更新は、送信を試行されずにログに保存されます。状態が |
|
レプリケーション更新は、サブスクライバ・データベースに送信されずに破棄されます。サブスクライバ・データベースを 警告: このサブスクライバの再起動を計画している場合、停止と再起動の間、更新は格納されません。このため、サブスクライバを再起動すると、サブスクライバには、マスターからの更新はすべて含まれません。再起動を計画している場合、サブスクライバを停止するかわりに、一時停止します。 |
|
しきい値(ログ・データ)を超えているため、サブスクライバへのレプリケーションは失敗したとみなされます。この状態は、システムによって設定され、システムが状態を |
マスター・データベースがそのサブスクライバの1つをstart
状態に設定すると、そのサブスクライバに対する更新がマスターのログに保存されます。サブスクライバがstop
状態の場合、サブスクライバに対する更新は破棄されます。
サブスクライバがpause
状態の場合、サブスクライバに対する更新はマスターのログに保存されますが、サブスクライバ・データベースには送信されません。マスターがサブスクライバをpause
からstart
に変更すると、マスターのログに保存された更新のバックログがサブスクライバに送信されます。(これには例外があります。第14章「データベースのフェイルオーバーおよびリカバリの管理」を参照してください。)マスター・データベースは、状態が示されたサブスクライバに接続を確立できない場合、成功するまで接続の確立を定期的に試行します。
例11-4 ttRepAdminを使用したサブスクライバの状態の設定
コマンドラインからttRepAdmin
を使用して、subscriberds
サブスクライバ・データベースの状態をstop
に設定するようにmasterds
マスター・データベースに指示するには、次のように入力します。
ttRepAdmin -dsn masterds -receiver -name subscriberds -state stop
ノート: 異なるホストに同じ名前のサブスクライバが複数ある場合は、ttRepAdmin ユーティリティの-host オプションで変更対象のサブスクライバのホストを識別します。 |
例11-5 ttRepSubscriberStateSetを使用したサブスクライバの状態の設定
マスター・データベースで、ttRepSubscriberStateSet
組込みプロシージャをコールして、repscheme
レプリケーション・スキームのサブスクライバ・データベース(subscriberds ON system1
)の状態をstop
に設定します。
Command> CALL ttRepSubscriberStateSet('repscheme', 'repl', 'subscriberds', 'system1', 2);
マスターのすべてのサブスクライバを特定の状態に設定する場合は、ttRepSubscriberStateSet
のみを使用できます。ttRepAdmin
ユーティリティに同等の機能はありません。
マスター・データベースに関する情報を表示できます。
マスター・データベースに関する情報を表示するには、-self -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -dsn masterDSN -self -list
例11-6 ttRepAdminを使用したマスター・データベースに関する情報の表示
この例は、複数サブスクライバのクラシック・レプリケーション・スキームで説明したマスター・データベースの出力を示しています。
> ttRepAdmin -dsn masterds -self -list Self host "server1", port auto, name "masterds", LSN 0/2114272
次の表に、フィールドの説明を示します。
フィールド | 説明 |
---|---|
host |
データベースのホストの名前。 |
port |
このデータベースからの更新を受信する別のデータベースのレプリケーション・エージェントで使用されるTCP/IPポート。値が0(ゼロ)の場合は、レプリケーションでポートが自動的に割り当てられたことを示します。 |
name |
データベースの名前。 |
Log file / Replication hold LSN |
サブスクライバに送信するために保持されているトランザクション・ログ内の最も古い場所を示します。値が-1/-1 の場合は、レプリケーションがすべてのサブスクライバに対してstop 状態であることを示します。 |
マスター・データベースに関する情報を取得するには、次のSELECT
文を使用して、TTREP.TTSTORES
およびTTREP.REPSTORES
レプリケーション表を問い合せます。
SELECT t.host_name, t.rep_port_number, t.tt_store_name FROM ttrep.ttstores t, ttrep.repstores s WHERE t.is_local_store = 0x01 AND t.tt_store_id = s.tt_store_id;
これは、複数サブスクライバのクラシック・レプリケーション・スキームで説明したマスター・データベースのSELECT
文の出力です。フィールドは、ホスト名、レプリケーション・ポート番号およびデータベース名です。
< server1, 0, masterds>
レプリケーションはTimesTenトランザクション・ログを使用して、サブスクライバ・サイトに送信する必要がある情報を保持します。サブスクライバ・データベースとの通信が中断された場合、またはサブスクライバ・サイトが停止した場合、トランザクション・ログ・データが累積します。この項で説明する問合せの出力の一部から、各サブスクライバ・データベースのために累積されたトランザクション・ログ・データの量、各サブスクライバ・データベースとの通信に最後に成功してから経過した時間を確認できます。
次の方法を使用して、サブスクライバ・データベースに関する情報を表示します。
サブスクライバに関する情報を表示するには、-receiver -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -dsn masterDSN
-receiver -list
例11-7 ttRepAdminを使用したサブスクライバに関する情報の表示
この例は、複数サブスクライバのクラシック・レプリケーション・スキームで説明したサブスクライバの出力を示しています。
> ttRepAdmin -dsn masterds -receiver -list Peer name Host name Port State Proto ---------------- ------------------------ ------ ------- ----- subscriber1ds server2 Auto Start 10 Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs ------------- ------------- ------- ------- --------- ---- 0:01:12 - 19.41 5 5 52 2 Peer name Host name Port State Proto ---------------- ------------------------ ------ ------- ----- subscriber2ds server3 Auto Start 10 Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs ------------- ------------- ------- ------- --------- ---- 0:01:04 - 20.94 4 48 2
最初の行には、サブスクライバの定義が表示されます。その次の行には、このサブスクライバのために保持されているトランザクション・ログ・ファイルの数とともに、待機時間および速度の情報が表示されます。subscriber1ds
の待機時間は19.41秒で、マスターよりログ2つ分遅れています。この待機時間は高い値で、待機時間の値が高いままでログの数が増え続ける場合、問題が発生していることを示します。
TTREP.REPLICATIONS
表に指定したスキームが複数ある場合は、-scheme
オプションを使用して、リストするスキームを指定する必要があります。そうしない場合、次のエラーを受信します。
Must specify -scheme to identify which replication scheme to use
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttRepAdmin」を参照してください。
ttIsql内でttReplicationStatus
組込みプロシージャを使用することにより、1つ以上のサブスクライバ・データベースのステータスを表示できます(レポートされるのは、この組込みプロシージャがコールされたマスター・データベースのサブスクライバのステータスのみです)。
例11-8 このマスターの単一サブスクライバに関するステータスの表示
次の例は、host1
に配置されているサブスクライバmaster2
のステータスを取得します。ホスト名が除外されている場合、サブスクライバは、その名前のホストのみに配置されています。
Command> call ttReplicationStatus('master2', 'host1'); < MASTER2, HOST1, 0, start, 1, 26, _ACTIVESTANDBY , TTREP > 1 row found.
表示される情報は、host1
に配置されており、自動的に割り当てられたポートでリスニングしているサブスクライバmaster2
に関するステータスです。TCP/IPポートは、マスターからの更新を受信するサブスクライバ・エージェントで使用されます。ただし、値が0 (ゼロ)の場合は、レプリケーションでポートが自動的に割り当てられたことを示します。
このサブスクライバは、起動状態です。このピアに対しては1つのトランザクション・ログのみが保持されており、最後のレプリケーションから26秒が経過しています。レプリケーション・スキームの名前は_ACTIVESTANDBY
、所有者はTTREP
です。
例11-9 このマスターのすべてのサブスクライバに関するステータスの表示
サブスクライバまたはサブスクライバのホスト名のいずれも提供しない場合、このマスターのすべてのサブスクライバに関するステータスが返されます。次の例では、このマスターに対してサブスクライバが1つのみ設定されているので、前述と同じステータスが示されます。
Command> call ttReplicationStatus(); < MASTER2, HOST1, 0, start, 1, 26, _ACTIVESTANDBY , TTREP > 1 row found.
詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttReplicationStatusに関する説明を参照してください。
次のSELECT
文を使用してTTREP.REPPEERS
表、TTREP.TTSTORES
表およびSYS.MONITOR
表を問い合せることにより、マスターのサブスクライバに関する同じ情報をプログラムから取得できます。
SELECT t1.tt_store_name, t1.host_name, t1.rep_port_number, p.state, p.protocol, p.timesend, p.timerecv, p.latency, p.tps, p.recspersec, t3.last_log_file - p.sendlsnhigh + 1 FROM ttrep.reppeers p, ttrep.ttstores t1, ttrep.ttstores t2, sys.monitor t3 WHERE p.tt_store_id = t1.tt_store_id AND t2.is_local_store = 0X01 AND p.subscriber_id = t2.tt_store_id AND p.replication_name = 'repscheme' AND p.replication_owner = 'repl' AND (p.state = 0 OR p.state = 1);
次に、前述の3つの文の出力例を示します。
< subscriber1ds, server2, 0, 0, 7, 1003941635, 0, -1.00000000000000, -1, -1, 1 > < subscriber2ds, server3, 0, 0, 7, 1003941635, 0, -1.00000000000000, -1, -1, 1 >
表示されるサブスクライバ情報の詳細は、「サブスクライバ情報」を参照してください。
ttRepAdmin
ユーティリティまたはSELECT
文の出力には、次のフィールドが含まれます。
フィールド | 説明 |
---|---|
Peer name |
サブスクライバ・データベースの名前 |
Host name |
サブスクライバをホスティングするマシンの名前 |
Port |
マスターからの更新を受信するサブスクライバ・エージェントで使用されるTCP/IPポート。値が0(ゼロ)の場合は、レプリケーションでポートが自動的に割り当てられたことを示します。 |
State |
マスター・データベースに対するサブスクライバの現在のレプリケーション状態(詳細は、「サブスクライバ・データベース情報の表示」を参照)。 |
Protocol |
このマスターとマスターに対応するサブスクライバ間で通信するレプリケーションで使用される内部プロトコル。この値は無視できます。 |
Last message sent |
マスターがサブスクライバに最後にメッセージを送信してから経過した時間(秒)。このようなメッセージには、データベース間で送信されたハートビート・メッセージが含まれます。 |
Last message received |
このサブスクライバがマスターから最後のメッセージを受信してから経過した時間(秒)。 |
Latency |
マスターがメッセージを送信してからサブスクライバから最後の確認応答を受信するまでの平均待機時間(秒)。(「ノート」を参照。) |
Transactions per second |
マスターでコミットされ、サブスクライバで処理される、1秒当たりの平均トランザクション数。(「ノート」を参照。) |
Records per second |
1秒当たりに送信される平均レコード数。(「ノート」を参照。) |
Logs |
マスター・データベースがサブスクライバのために保持しているトランザクション・ログ・ファイルの数。 |
ノート: Latency 、TPS およびRecordsPS は、レコードのバッチのレプリケート中に検出された平均値をレポートします。これらの値は、ワークロードが比較的一定でない場合、不安定になる可能性があります。値が-1の場合は、マスターのレプリケーション・エージェントがそのサブスクライバ・レプリケーション・エージェントとの通信を確立していないか、またはデータをサブスクライバ・レプリケーション・エージェントに送信していないことを示します。 |
レプリケート・データベースの構成を表示できます。
レプリケート・データベースの構成をttIsql
プロンプトから表示するには、repschemes
コマンドを使用します。
Command> repschemes;
例11-10に、「伝播スキーム」で説明されているレプリケーション・スキームからの構成出力を示します。
例11-10 ttIsql repschemesコマンドからの出力
Replication Scheme PROPAGATOR: Element: A Type: Table TAB Master Store: CENTRALDS on FINANCE Transmit Durable Subscriber Store: PROPDS on NETHANDLER Element: B Type: Table TAB Propagator Store: PROPDS on NETHANDLER Transmit Durable Subscriber Store: BACKUP1DS on BACKUPSYSTEM1 Subscriber Store: BACKUP2DS on BACKUPSYSTEM2 Store: BACKUP1DS on BACKUPSYSTEM1 Port: (auto) Log Fail Threshold: (none) Retry Timeout: 120 seconds Compress Traffic: Disabled Store: BACKUP2DS on BACKUPSYSTEM2 Port: (auto) Log Fail Threshold: (none) Retry Timeout: 120 seconds Compress Traffic: Disabled Store: CENTRALDS on FINANCE Port: (auto) Log Fail Threshold: (none) Retry Timeout: 120 seconds Compress Traffic: Disabled Store: PROPDS on NETHANDLER Port: (auto) Log Fail Threshold: (none) Retry Timeout: 120 seconds Compress Traffic: Disabled
レプリケート・データベースの構成を表示するには、-showconfig
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -showconfig -dsn masterDSN
例11-11に、「伝播スキーム」で説明されているレプリケーション・スキームによって構成された伝播元データベースからの構成出力を示します。propds
プロパゲータの待機時間は19.41秒で、マスターよりログ2つ分遅れています。
例11-11 ttRepAdmin出力
> ttRepAdmin -showconfig -dsn centralds Self host "finance", port auto, name "centralds", LSN 0/155656, timeout 120, threshold 0 List of subscribers ----------------- Peer name Host name Port State Proto ---------------- ------------------------ ------ ------- ----- propds nethandler Auto Start 10 Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs ------------- ------------- ------- ------- --------- ---- 0:01:12 - 19.41 5 52 2 List of tables and subscriptions -------------------------------- Table details ------------- Table : tab Timestamp updates : - Master Name Subscriber Name ----------- ------------- centralds propds Table details ------------- Table : tab Timestamp updates : - Master Name Subscriber name ----------- ------------- propds backup1ds propds backup2ds
「List of subscribers」フィールドの意味は、「レプリケーション表の問合せによるサブスクライバに関する情報の表示」を参照してください。Table detailsフィールドには、表およびそのマスター(送信者)とサブスクライバのデータベースの名前が表示されます。
構成情報を表示するには、次のSELECT
文を使用して、TTREP.TTSTORES
、TTREP.REPSTORES
、TTREP.REPPEERS
、SYS.MONITOR
、TTREP.REPELEMENTS
およびTTREP.REPSUBSCRIPTIONS
表を問い合せます。
SELECT t.host_name, t.rep_port_number, t.tt_store_name, s.peer_timeout, s.fail_threshold FROM ttrep.ttstores t, ttrep.repstores s WHERE t.is_local_store = 0X01 AND t.tt_store_id = s.tt_store_id; SELECT t1.tt_store_name, t1.host_name, t1.rep_port_number, p.state, p.protocol, p.timesend, p.timerecv, p.latency, p.tps, p.recspersec, t3.last_log_file - p.sendlsnhigh + 1 FROM ttrep.reppeers p, ttrep.ttstores t1, ttrep.ttstores t2, sys.monitor t3 WHERE p.tt_store_id = t2.tt_store_id AND t2.is_local_store = 0X01 AND p.subscriber_id = t1.tt_store_id AND (p.state = 0 OR p.states = 1); SELECT ds_obj_owner, DS_OBJ_NAME, t1.tt_store_name,t2.tt_store_name FROM ttrep.repelements e, ttrep.repsubscriptions s, ttrep.ttstores t1, ttrep.ttstores t2 WHERE s.element_name = e.element_name AND e.master_id = t1.tt_store_id AND s.subscriber_id = t2.tt_store_id ORDER BY ds_obj_owner, ds_obj_name;
例11-12 問合せの出力
問合せの出力例は、「伝播スキーム」で説明されているレプリケーション・スキームによって構成されたデータベースに対するものです。
最初の問合せの出力は次のようになります。
< finance, 0, centralds, 120, 0 >
これには、ホスト名、ポート番号およびデータベース名が表示されます。4番目の値(120)は、データベースがメッセージを送信する前に別のデータベースからのレスポンスを待機する時間を定義するTIMEOUT
値です。最後の値(0)は、ログ障害しきい値(「トランザクション・ログ障害しきい値の設定」を参照)です。
2番目の問合せの出力は次のようになります。
< propds, nethandler, 0, 0, 7, 1004378953, 0, -1.00000000000000, -1, -1, 1 >
フィールドの説明は、「レプリケーション表の問合せによるサブスクライバに関する情報の表示」を参照してください。
最後の問合せの出力は次のようになります。
< repl, tab, centralds, propds > < repl, tab, propds, backup1ds > < repl, tab, propds, backup2ds >
これらの行には、レプリケート表およびそのマスター(送信者)とサブスクライバ(受信者)のデータベースの名前が表示されます。
レプリケート・データベースでは、トランザクションがサブスクライバで完全に処理されたことをマスター・レプリケーション・エージェントが確認するまで、トランザクションはトランザクション・ログ・バッファおよびトランザクション・ログ・ファイルに保持されます。サブスクライバが含まれるアクティブ・スタンバイ・ペアのレプリケーション・スキームでは、トランザクションがスタンバイ・マスターとすべてのサブスクライバの両方で処理されたとアクティブ・マスターにより確認されるまで、トランザクションはトランザクション・ログに残ります。アクティブ・マスターは、これを確認した時点でのみ、ログ・バッファおよびトランザクション・ログ・ファイルからのパージが必要であると認識します。ログ領域を使い果たすと、マスター・データベースでの後続の更新が強制終了されます。
ノート: トランザクション・ログの増大の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクション・ログ・ファイルの蓄積の監視に関する説明を参照してください。 |
トランザクションは、ログ・レコードの形式でログに保存されます。ブックマークを使用して、マスター・データベースがレプリケートしたログ・レコードまたはレプリケートしていないログ・レコードを検出できます。ブックマークは、ログ順序番号(LSN)で構成されており、この番号は、レプリケーションのパフォーマンスを測定するために使用可能なトランザクション・ログ内の特定のレコードの位置を識別できます。ブックマークに関連付けられているLSNは、hold LSN、last written LSNおよびlast LSN forced to diskです。hold LSNは、サブスクライバに送信できるようにログ内に保持されている最下位(最も古い)レコードの場所を示します。hold LSNとlast written LSNを比較することによって、サブスクライバに送信されていないトランザクション・ログ内のデータの量を確認できます。last LSN forced to diskは、トランザクション・ログ・ファイルに保存された最後のレコードを示します。
ユーザーは次のツールを使って、ブックマークとログの順序番号でレプリケーションを監視できます。
特定のサブスクライバへのレプリケーションを正確に監視する方法として、サブスクライバのsend LSNを監視するという方法があり、send LSNは、TTREP.REPPEERS
表のSENDLSNHIGH
およびSENDLSNLOW
フィールドで構成されています。send LSN値とは対照的に、ブックマーク内に返されるhold LSNは、すべてのサブスクライバの最小のsend LSNを示すために10秒ごとに計算されるため、hold LSNは、レプリケーションの進行状況の概要を示し、個々のサブスクライバへのレプリケーションの進行状況は明示されません。レプリケーションの確認応答はパフォーマンスを向上させるために非同期であるため、send LSNは少し遅れる可能性もあります。ただし、サブスクライバのsend LSNは、使用できる最も正確な値であり、常にhold LSNに先行しています。
SYS.GV$LOG_HOLDS
またはSYS.V$LOG_HOLDS
システム・ビューから選択するか、ttLogHolds
組込みプロシージャをコールして、レプリケーション・ログの保持に関する情報を取得します。
次の例は、アクティブ・スタンバイ・ペアのレプリケーション・スキームに対するttLogHolds
組込みプロシージャの出力を示しています(アクティブ・マスターはmaster1
、スタンバイ・マスターはmaster2
、単一のサブスクライバはsubscriber1
)。すべてのトランザクションはまずアクティブ・マスターからスタンバイ・マスターにレプリケートされ、それからスタンバイ・マスターによりトランザクションがサブスクライバに伝播されます。したがって、サブスクライバの進捗状況はスタンバイ・マスターの進捗状況から少し遅れます。
アクティブ・マスターはスタンバイ・マスターとサブスクライバの進捗状況の両方を監視するので、スタンバイ・マスターがなんらかの理由で停止した場合は、サブスクライバへのレプリケーションをアクティブ・マスターが引き受けます。アクティブ・マスターは、トランザクションがサブスクライバに適用されると確認を受け取るので、アクティブ・マスターはスタンバイ・マスターに障害が発生した場合に必要となる可能性がある関連のログ・レコードをいつリリースできるかがわかります(スタンバイ・マスターに障害が発生すると、アクティブ・マスターが直接サブスクライバにレプリケートするように切り替えられます)。トランザクションはスタンバイ・マスターとサブスクライバの両方で処理されるまで、トランザクション・ログに残ります。
Command> call ttLogHolds; < 0, 3569664, Checkpoint , master1.ds0 > < 0, 15742976, Checkpoint , master1.ds1 > < 0, 16351496, Replication , ADC6160529:SUBSCRIBER1 > < 0, 16351640, Replication , ADC6160529:MASTER2 > 4 rows found.
AWTキャッシュ・グループを使用している場合は、レプリケーション・エージェントを使用してトランザクションをOracle Databaseに非同期で伝播します。ttLogHolds
組込みプロシージャをコールすると、説明フィールドに「_ORACLE
」と表示され、AWTキャッシュ・グループの伝播のためにトランザクション・ログが保留されていることが示されます。
Command> call ttLogHolds(); < 0, 18958336, Checkpoint , cachealone1.ds0 > < 0, 19048448, Checkpoint , cachealone1.ds1 > < 0, 19050904, Replication , ADC6160529:_ORACLE > 3 rows found.
ログの保留の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のSYS.GV$LOG_HOLDSまたはSYS.V$LOG_HOLDSに関する項、または『Oracle TimesTen In-Memory Databaseリファレンス』のttLogHoldsに関する項を参照してください。
ブックマークの位置を表示するには、-bookmark
オプションを指定してttRepAdmin
ユーティリティを使用します。
> ttRepAdmin -dsn masterds -bookmark Replication hold LSN ...... 10/927692 Last written LSN .......... 10/928908 Last LSN forced to disk ... 10/280540 Each LSN is defined by two values: Log file number / Offset in log file
ttRepAdmin
-bookmark
のLSN出力は次のようになります。
行 | 説明 |
---|---|
Replication hold LSN |
サブスクライバに送信できるようにログ内に保持されている最下位(最も古い)レコードの場所。値が-1/-1の場合は、レプリケーションがすべてのサブスクライバに対してstop 状態であること(または問い合されたデータベースがマスター・データベースではないこと)を示します。
1つ以上のサブスクライバを持つアクティブ・スタンバイ・ペアを監視している場合は、この値がレプリケーション・スキームに含まれるすべてのノードに対して保管されている、最も古いレコードを示します。たとえば、サブスクライバを持つアクティブ・スタンバイ・ペアでは、最も古いレコードがスタンバイ・マスターまたはいずれかのサブスクライバ用のログに保管される可能性があります。 |
Last written LSN |
データベースに対して最後に生成されたトランザクション・ログ・レコードの場所。 |
Last LSN forced to disk |
ディスクに最後に書き込まれたトランザクション・ログ・レコードの場所。 |
ブックマークの位置を表示するには、ttBookmark
組込みプロシージャを使用します。
例11-13 ttBookmarkを使用したブックマーク位置の表示
> ttIsql masterds Command> call ttBookMark(); < 10, 928908, 10, 280540, 10, 927692 > 1 row found.
返された行内の最初の2列で、Last written LSNが、次の2列でLast LSN forced to diskが、最後の2列でReplication hold LSNが定義されます。
1つ以上のサブスクライバを持つアクティブ・スタンバイ・ペアを監視している場合は、「Replication hold LSN」がレプリケーション・スキームに含まれるすべてのノードに対して保管されている、最も古いレコードを示します。たとえば、サブスクライバを持つアクティブ・スタンバイ・ペアでは、最も古いレコードがスタンバイ・マスターまたはいずれかのサブスクライバ用のログに保管される可能性があります。
-showstatus
オプションを指定してttRepAdmin
ユーティリティを使用すると、レプリケーション・エージェントの現在のステータスを表示できます。ステータス出力には、問い合されたデータベースのレプリケーション・エージェントで使用されるブックマークの位置、ポート番号および通信プロトコルが含まれます。
ttRepAdmin
-showstatus
の出力には、レプリケーション・エージェントで使用されるメイン・スレッド、TRANSMITTER
スレッドおよびRECEIVER
スレッドのステータスが含まれます。マスター・データベースにはTRANSMITTER
スレッド、サブスクライバ・データベースにはRECEIVER
スレッドがあります。双方向レプリケーション・スキームでマスター/サブスクライバとしての機能するデータベースには、TRANSMITTER
スレッドおよびRECEIVER
スレッドの両方があります。
各レプリケーション・エージェントには、ポートでピア接続をリスニングする単一のREPLISTENER
スレッドがあります。マスター・データベースでは、REPLISTENER
スレッドがサブスクライバ・データベースごとに個別のTRANSMITTER
スレッドを開始します。サブスクライバ・データベースでは、REPLISTENER
スレッドがマスターからの接続のたびに個別のRECEIVER
スレッドを開始します。
TimesTenデーモンがレプリケーション・エージェントの停止を要求した場合、またはレプリケーション・エージェントで使用されている他のいずれかのスレッドで致命的なエラーが発生した場合、メイン・スレッドは他のすべてのスレッドが正常に終了するまで待機します。TimesTenデーモンは、致命的なエラーの種類に応じて、レプリケーション・エージェントを再起動する場合もしない場合もあります。REPLISTENER
スレッドは、レプリケーション・エージェントの存続期間中には終了しません。TRANSMITTER
またはRECEIVER
スレッドは停止する場合がありますが、レプリケーション・エージェントによって再起動されます。RECEIVER
スレッドは、リカバリ不可能なエラーが発生した場合、またはマスターが接続を切断した場合に終了します。
例11-14に、ttRepAdmin
-showstatus
の出力を示します。
例の後の項では、ttRepAdmin
-showstatus
出力の各フィールドの意味について説明します。
例11-14 アクティブ・スタンバイ・ペアのレプリケーション・スキームのステータス
次に、アクティブ・スタンバイ・ペアのレプリケーション・スキーム内でrep1
データベースがアクティブ・マスターで、rep2
データベースがスタンバイ・マスターであるアクティブ・スタンバイ・ペアのレプリケーション・スキームを示します。
この例のReplicationParallelism
接続属性は2に設定されており、これはソース・データベースのTRANSMITTERスレッド数およびターゲット・データベースのRECEIVERスレッド数を示します。
$ ttRepAdmin -showstatus -detail rep1 Replication Agent Status as of: 2019-09-03 10:01:31 DSN : rep1 Process ID : 9012 (Started) Replication Agent Policy : manual Host : MYHOST RepListener Port : 56209 (AUTO) Main thread's state : STATE_MM_IDLE_STATE Last write LSN : 0.22169832 Last LSN forced to disk : 0.22169600 Replication hold LSN : 0.22159592
Replication hold LSN
、Last write LSN
およびLast LSN forced to disk
が非常に近いので、レプリケーションは適切に実行されていることがわかります。Replication hold LSN
がLast write LSN
およびLast LSN
より遅れる場合、レプリケーションはマスターの更新に追い付いていません。
Replication Peers: Name : REP2 Host : MYHOST2 Port : 51509 (AUTO) (Connected) Replication State : STARTED Communication Protocol : 47 Name : REP2 Host : MYHOST2 Port : 51509 (AUTO) (Connected) Replication State : STARTED Communication Protocol : 47
ReplicationParallelism
は2に設定されているため、rep2
用のレプリケーション・ピアについては2つのエントリがあります。
REPHOLD thread (REPHOLD:140175402608384): Start/Restart count : 1 Current state : STATE_REPHOLD_SLEEPING Current DB context : 0x7f7d180008c0 REPLISTENER thread (REPLISTENER:140175393158912): Start/Restart count : 1 Current state : STATE_LISTENER_WAIT_FOR_PEER_CONN Current DB context : 0x7f7c9c0008c0 Most recent errors (max 5): TT16999 in receiver.c (line 2608) at 09:55:38 on 09-03-2019 TT16999 in receiver.c (line 2608) at 09:55:55 on 09-03-2019 LOGFORCE thread (LOGFORCE:140175407265536): Start/Restart count : 1 Current state : STATE_LOGFORCE_SLEEPING Current DB context : 0x7f7d140afae0
アクティブ・スタンバイ・ペアでは、各マスターが他のマスターへのトランスミッタと他のマスターからのレシーバの両方を持ちます。ReplicationParallelism
設定により決定されるトランスミッタとレシーバの数。この例では、ReplicationParallelism
が2に設定されているため、アクティブ・マスターとスタンバイ・マスターの間に2つのTRANSMITTERスレッドとRECEIVERスレッドがあります(出力ではトラック0とトラック1として示されています)。
TRANSMITTER thread(s) (TRANSMITTER(S):140172775343872): For : REP2 (track 1)(SSL) Start/Restart count : 1 Current state : STATE_XMTR_FLUSH_SENDING_DONE Current DB context : 0x7f7ca44ff640 Send LSN : 0.22159592 Replication Tables CTN: 1567529721.542 Transactions sent : 101 Total packets sent : 36 Tick packets sent : 25 MIN sent packet size : 64 MAX sent packet size : 16384 AVG sent packet size : 876 Last packet sent at : 10:01:26 Total Packets received: 34 MIN rcvd packet size : 64 MAX rcvd packet size : 128 AVG rcvd packet size : 119 Last packet rcvd'd at : 10:01:26 TXNs Allocated : 102 TXNs In Use : 0 ACTs Allocated : 101 ACTs In Use : 0 ACTs Data Allocated : 0 Timeout : 7200 Adapted Timeout Max : 7200 Adapted Timeout Time : 1567530021 current txn : 0.0 Longest batch runtime : 0 Longest batch 1st txn : 0.0 Longest batch lst txn : 0.0 Largest txn (ops) : 1567529721.441 Largest txn (#ops) : 1 Longest txn (time) : 0.0 Longest txn (secs) : 0 Most recent errors (max 5): TT16999 in transmitter.c (line 1465) at 09:55:56 on 09-03-2019 RECEIVER thread(s) (RECEIVER:140173241992960): For : REP2 (track 1)(SSL) Start/Restart count : 1 Current state : STATE_RCVR_READ_NETWORK_LOOP Current DB context : 0x7f7c9c4b0b90 Transactions received : 0 Total packets sent : 28 Tick packets sent : 0 MIN sent packet size : 64 MAX sent packet size : 128 AVG sent packet size : 122 Last packet sent at : 10:01:19 Total Packets received: 29 MIN rcvd packet size : 64 MAX rcvd packet size : 156 AVG rcvd packet size : 68 Last packet rcvd'd at : 10:01:19 rxWaitCTN : 0.0 prevCTN : 0.0 current txn : 0.0 STA Blk Data Allocated: 0 STA Data Allocated : 0 Longest batch runtime : 0 Longest batch 1st txn : 0.0 Longest batch lst txn : 0.0 Largest txn (ops) : 0.0 Largest txn (#ops) : 0 Longest txn (time) : 0.0 Longest txn (secs) : 0 TRANSMITTER thread(s) (TRANSMITTER(M):140175390009088): For : REP2 (track 0)(SSL) Start/Restart count : 1 Current state : STATE_META_PEER_INFO Current DB context : 0x7f7c980008c0 Send LSN : 0.22159592 Replication Tables CTN: 1567529721.386 Transactions sent : 100 Total packets sent : 88 Tick packets sent : 74 MIN sent packet size : 64 MAX sent packet size : 16384 AVG sent packet size : 394 Last packet sent at : 10:01:26 Total Packets received: 86 MIN rcvd packet size : 64 MAX rcvd packet size : 128 AVG rcvd packet size : 123 Last packet rcvd'd at : 10:01:26 TXNs Allocated : 101 TXNs In Use : 0 ACTs Allocated : 100 ACTs In Use : 0 ACTs Data Allocated : 0 Timeout : 7200 Adapted Timeout Max : 7200 Adapted Timeout Time : 1567529956 current txn : 0.0 Longest batch runtime : 0 Longest batch 1st txn : 0.0 Longest batch lst txn : 0.0 Largest txn (ops) : 1567529721.286 Largest txn (#ops) : 1 Longest txn (time) : 0.0 Longest txn (secs) : 0 Most recent errors (max 5): TT16999 in transmitter.c (line 1465) at 09:55:38 on 09-03-2019 RECEIVER thread(s) (RECEIVER:140173245142784): For : REP2 (track 0)(SSL) Start/Restart count : 1 Current state : STATE_RCVR_READ_NETWORK_LOOP Current DB context : 0x7f7c944a41f0 Transactions received : 0 Total packets sent : 79 Tick packets sent : 0 MIN sent packet size : 64 MAX sent packet size : 128 AVG sent packet size : 125 Last packet sent at : 10:01:29 Total Packets received: 80 MIN rcvd packet size : 64 MAX rcvd packet size : 156 AVG rcvd packet size : 65 Last packet rcvd'd at : 10:01:29 rxWaitCTN : 0.0 prevCTN : 0.0 current txn : 0.0 STA Blk Data Allocated: 0 STA Data Allocated : 0 Longest batch runtime : 0 Longest batch 1st txn : 0.0 Longest batch lst txn : 0.0 Largest txn (ops) : 0.0 Largest txn (#ops) : 0 Longest txn (time) : 0.0 Longest txn (secs) : 0
次のフィールドは、問い合されたデータベースのレプリケーション・エージェント内のMAIN
スレッドの出力です。
MAINスレッド | 説明 |
---|---|
DSN |
問合せ対象のデータベースの名前。 |
Process ID |
レプリケーション・エージェントのプロセスID。 |
Replication Agent Policy |
再起動ポリシー(「レプリケーション・エージェントの起動および停止」を参照)。 |
Host |
このデータベースをホスティングするマシンの名前。 |
RepListener Port |
レプリケーション・エージェントがリモート・レプリケーション・エージェントのTRANSMITTER スレッドからの接続をリスニングするために使用するTCP/IPポート。値が0(ゼロ)の場合は、このポートがレプリケーション・スキームの一部として指定されているのでなく、レプリケーション・エージェントに自動的に割り当てられている(デフォルト)ことを示します。 |
Main thread's state |
内部使用のみ。 |
Last write LSN |
データベースに対して最後に生成されたトランザクション・ログ・レコードの場所。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
Last LSN forced to disk |
ディスクに最後に書き込まれたトランザクション・ログ・レコードの場所。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
Replication hold LSN |
サブスクライバに送信できるようにログ内に保持されている最下位(最も古い)レコードの場所。値が-1/-1の場合は、レプリケーションがすべてのサブスクライバに対してstop 状態であることを示します。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
次のフィールドは、問い合されたデータベースのレプリケーション・スキームに関連している各レプリケーション・ピアの出力です。ピアは、マスター、サブスクライバ、プロパゲータ、または双方向レプリケーション・スキームではマスターとサブスクライバの両方の役割を果たすことができます。
レプリケーション・ピア | 説明 |
---|---|
Name |
このデータベースのレプリケーション・ピアであるデータベースの名前。 |
Host |
ピア・データベースのホスト。 |
Port |
ピア・データベースのレプリケーション・エージェントが使用するTCP/IPポート。値が0(ゼロ)の場合は、このポートがレプリケーション・スキームの一部として指定されているのでなく、レプリケーション・エージェントに自動的に割り当てられている(デフォルト)ことを示します。 |
Replication State |
問い合されたデータベースに対するレプリケーション・ピアの現在のレプリケーション状態(詳細は、「サブスクライバ・データベース情報の表示」を参照)。 |
Communication Protocol |
レプリケーションがピア間で通信を行うために使用する内部プロトコル。(内部使用専用。) |
ノート: REPHOLD 、REPLISTENER およびLOGFORCE スレッド・セクションは、内部使用専用です。 |
次のフィールドは、マスター・レプリケーション・エージェントがトランザクション更新をサブスクライバに送信するために使用する各TRANSMITTER
スレッドの出力です。対応する複数のサブスクライバがあるマスターは、複数のTRANSMITTER
スレッドを持つことになります。
ノート: TRANSMITTER 出力のカウントは、レプリケーション・エージェントを起動すると、累積し始めます。これらのカウントは、レプリケーション・エージェントを起動または再起動した場合にのみ0(ゼロ)にリセットされます。 |
TRANSMITTERスレッド | 説明 |
---|---|
For |
レプリケート・データをこのデータベースから受信するサブスクライバ・データベースの名前。また、レプリケーション・エージェントのトランスミッタがTransport Layer Security (TLS)を使用しているかどうか(SSLで示される)。 |
Start/Restart count |
処理のタイムアウトやネットワーク障害などの一時エラーが発生したため、レプリケーション・エージェントによってこのTRANSMITTER スレッドが起動または再起動された回数。 |
Current state |
内部使用のみ。 |
Current DB context |
内部使用のみ。 |
Send LSN |
このピアに最後に送信されたLSN。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
Replication Tables CTN |
内部使用のみ。 |
Transactions sent |
サブスクライバに送信されたトランザクションの合計数。 |
Total packets sent |
サブスクライバに送信されたパケットの合計数(ティック・パケットを含む)。 |
Tick packets sent |
送信されたティック・パケットの合計数。ティック・パケットは、マスターとサブスクライバの間のハートビートを維持するために使用されます。この値を使用すると、レプリケート・データと関連していない「Total packets sent」パケットの数を確認できます。 |
MIN sent packet size |
サブスクライバに送信された最小パケットのサイズ。 |
MAX sent packet size |
サブスクライバに送信された最大パケットのサイズ。 |
AVG sent packet size |
サブスクライバに送信されたパケットの平均サイズ。 |
Last packet sent at |
パケットが最後に送信された時刻(24時間制の時刻)。 |
Total packets received |
サブスクライバから受信したパケットの合計数(ティック・パケットおよび確認応答データ)。 |
MIN rcvd packet size |
受信した最小パケットのサイズ。 |
MAX rcvd packet size |
受信した最大パケットのサイズ。 |
AVG rcvd packet size |
受信したパケットの平均サイズ。 |
Last packet rcvd at |
パケットを最後に受信した時刻(24時間制の時刻)。 |
TXNs Allocated
|
内部使用のみ。 |
Largest txn (ops) |
処理数。 |
Longest txn (secs) |
最長トランザクションの処理に要した時間(秒単位)。 |
Most recent errors (max 5) |
このスレッドによって最後に生成された5つのエラー。 |
次のフィールドは、サブスクライバ・レプリケーション・エージェントがマスターからトランザクション更新を受信するために使用する各RECEIVER
スレッドの出力です。複数のマスターによって更新されるサブスクライバは、複数のRECEIVER
スレッドを持つことになります。
ノート: RECEIVER 出力のカウントは、レプリケーション・エージェントを起動すると、累積し始めます。これらのカウントは、レプリケーション・エージェントを起動または再起動した場合にのみ0(ゼロ)にリセットされます。 |
RECEIVERスレッド | 説明 |
---|---|
For |
レプリケート・データをこのデータベースから送信するマスター・データベースの名前。また、レプリケーション・エージェントのレシーバがTransport Layer Security (TLS)を使用しているかどうか(SSLで示される)。 |
Start/Restart count |
処理のタイムアウトやネットワーク障害などの一時エラーが発生したため、レプリケーション・エージェントによってこのRECEIVER スレッドが起動または再起動された回数。 |
Current state |
内部使用のみ。 |
Current DB context |
内部使用のみ。 |
Transactions received |
マスターから受信したトランザクションの合計数。 |
Total packets sent |
マスターに送信されたパケットの合計数(ティック・パケットおよび確認応答データ)。 |
Tick packets sent |
マスターに送信されたティック・パケットの合計数。ティック・パケットは、マスターとサブスクライバの間のハートビートを維持するために使用されます。この値を使用すると、確認応答データと関連していない「Total packets sent」パケットの数を確認できます。 |
MIN sent packet size |
マスターに送信された最小パケットのサイズ。 |
MAX sent packet size |
マスターに送信された最大パケットのサイズ。 |
AVG sent packet size |
マスターに送信されたパケットの平均サイズ。 |
Last packet sent at |
パケットがマスターに最後に送信された時刻(24時間制の時刻)。 |
Total packets received |
マスターから受信した確認応答データのパケットの合計数。 |
MIN rcvd packet size |
受信した最小パケットのサイズ。 |
MAX rcvd packet size |
受信した最大パケットのサイズ。 |
AVG rcvd packet size |
受信したパケットの平均サイズ。 |
Last packet rcvd at |
パケットを最後に受信した時刻(24時間制の時刻)。 |
rxWaitCTN
|
内部使用のみ。 |
Largest txn (ops) |
処理数。 |
Longest txn (secs) |
最長トランザクションの処理に要した時間(秒単位)。 |
次の項では、RETURNサービスのステータスを確認する方法および最後に返されたステータスを確認する方法を説明します。
特定のサブスクライバに対するRETURNサービスがDISABLE RETURN
障害ポリシーによって無効にされているかどうかを確認するには、ttRepSyncSubscriberStatus
組込みプロシージャをコールします。ttRepSyncSubscriberStatus
組込みプロシージャで返される値が1の場合は、RETURNサービスがサブスクライバに対して無効になっていることを示し、0(ゼロ)の場合は、RETURNサービスが有効であることを示します。
例11-15 ttRepSyncSubscriberStatusを使用したRETURN RECEIPTのステータスの取得
ttRepSyncSubscriberStatus
を使用して、マスター・データベースmasterDSN
に対するデータベースsubscriberds
のRETURN RECEIPTのステータスを取得するには、次のように入力します。
> ttIsql masterDSN Command> CALL ttRepSyncSubscriberStatus ('subscriberds'); < 0 > 1 row found.
この結果は、RETURNサービスが有効であることを示しています。
RETURNサービスを有効化または無効化する方法の詳細は、「RETURNサービス・タイムアウト・エラーおよびレプリケーションの状態変化の管理」を参照してください。
接続ハンドルで最後に実行されたRETURN RECEIPTトランザクションまたはRETURN TWOSAFEトランザクションのステータスは、ttRepXactTokenGet
およびttRepXactStatus
プロシージャをコールして確認できます。
まず、ttRepXactTokenGet
組込みプロシージャをコールして、最後のRETURNサービス・トランザクションの固有トークンを取得します。RETURN RECEIPTを使用している場合は、マスター・データベースで最後にコミットされたRETURN RECEIPTトランザクションがトークンによって識別されます。RETURN TWOSAFEを使用している場合は、サブスクライバでのコミットが成功した場合に、マスターのレプリケーション・エージェントによってコミットされる、マスター上の最後のRETURN TWOSAFEトランザクションがトークンによって識別されます。ただし、タイムアウトなどのエラーが発生した場合、トークンによって識別されたTWOSAFEトランザクションはマスターのレプリケーション・エージェントによってはコミットされません。
次に、ttRepXactTokenGet
によって返されたトークンをttRepXactStatus
組込みプロシージャに渡して、RETURNサービスのステータスを取得します。ttRepXactStatus
組込みプロシージャの出力は、レプリケート・データを受信するように構成されているサブスクライバ、および各サブスクライバに対してトランザクションの現在のステータス(未送信、受信済、コミット済)をレポートします。サブスクライバ・レプリケーション・エージェントがサブスクライバ・データベースへのトランザクションの適用時に問題を検出した場合、ttRepXactStatus
組込みプロシージャにはエラー文字列も含まれます。RETURN TWOSAFEの使用時にタイムアウトなどのエラーを受信した場合は、無条件にコミットするか、コミットを再試行するかを決定できます。これは、「RETURNサービスの使用」で説明されます。
ノート: ttRepXactTokenGet で取得したトークンを使用せずにttRepXactStatus をコールすると、接続上でRETURN RECEIPTまたはRETURN TWOSAFEレプリケーション・サービスによって最後にコミットされたトランザクションの状態が返されます。 |
ttRepXactStatus
組込みプロシージャは、各サブスクライバのRETURNサービスのステータスを、次のように書式設定された行セットとして返します。
subscriberName, status, error
例11-16 各サブスクライバのステータスのレポート
GetRSXactStatus
関数でttRepXactTokenGet
およびttRepXactStatus
組込みプロシージャをコールすると、レプリケート・システムの各サブスクライバのステータスをレポートできます。
SQLRETURN GetRSXactStatus (HDBC hdbc) { SQLRETURN rc = SQL_SUCCESS; HSTMT hstmt = SQL_NULL_HSTMT; char xactId [4001] = ""; char subscriber [62] = ""; char state [3] = ""; /* get the last RS xact id executed on this connection */ SQLAllocStmt (hdbc, &hstmt); SQLExecDirect (hstmt, "CALL ttRepXactTokenGet ('R2')", SQL_NTS); /* bind the xact id result as a null terminated hex string */ SQLBindCol (hstmt, 1, SQL_C_CHAR, (SQLPOINTER) xactId, sizeof (xactId), NULL); /* fetch the first and only row */ rc = SQLFetch (hstmt); /* close the cursor */ SQLFreeStmt (hstmt, SQL_CLOSE); if (rc != SQL_ERROR && rc != SQL_NO_DATA_FOUND) { /* display the xact id */ printf ("\nRS Xact ID: 0x%s\n\n", xactId); /* get the status of this xact id for every subscriber */ SQLBindParameter (hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARBINARY, 0, 0, (SQLPOINTER) xactId, strlen (xactId), NULL); /* execute */ SQLExecDirect (hstmt, "CALL ttRepXactStatus (?)", SQL_NTS); /* bind the result columns */ SQLBindCol (hstmt, 1, SQL_C_CHAR, (SQLPOINTER) subscriber, sizeof (subscriber), NULL); SQLBindCol (hstmt, 2, SQL_C_CHAR, (SQLPOINTER) state, sizeof (state), NULL); /* fetch the first row */ rc = SQLFetch (hstmt); while (rc != SQL_ERROR && rc != SQL_NO_DATA_FOUND) { /* report the status of this subscriber */ printf ("\n\nSubscriber: %s", subscriber); printf ("\nState: %s", state); /* are there more rows to fetch? */ rc = SQLFetch (hstmt); } } /* close the statement */ SQLFreeStmt (hstmt, SQL_DROP); return rc; }
ttXactLog
ユーティリティで-logAnalyze
コマンドを使用すると、レプリケーション・ログを分析し、次のことを確認できます。
現時点でどれだけマスターからサブスクライバにレプリケートされずに残っているか。レプリケーションにかかっている時間が想定以上に長い場合は、レプリケートするトランザクションがどれだけ残っているか、またはレプリケーションが長時間実行トランザクションを実行しているかどうかを確認できます。
現在の構成で、パラレル・レプリケーション用に手動トラックおよび自動トラック全体に適切に負荷を分散させられるか。
特定のデータ・ストアにログ分析コマンドを実行し、次の情報を生成します。
レプリケートされるのを待機しているトランザクションの数。レプリケートされていないトランザクションごとに収集された情報には、各トランザクションの操作の数、各トランザクションの合計サイズ(部分ロールバックを含む)が含まれます。
特定のタイプ(DDLまたはDML)を含む各トランザクションに残されている操作の量、および各トランザクションの各文タイプの数。ツールでも、レプリケートされずに残っているすべての操作の合計サイズが生成されます。
ワークロードがどのようにトラック全体に分散されるかに関する情報を取得します。手動パラレル・レプリケーションを使用する場合は、-logAnalyze
を使用して、アプリケーションがレプリケーション・トラック全体に均等に作業を分散しているかどうかを監視できます。
レプリケートされずに残っている最も大きいトランザクションを返します。
開始および終了のLSNを返します。開始LSNは、トランザクション・ログでトランスミッタが読取りを開始する箇所であり、終了LSNは、トランザクション・ログの末尾です。
ノート: トランザクション・ログの分析出力では、トランザクションはコミット順に表示されます。 |
冗長コマンドで表示される情報の量を指定できます。たとえば、冗長を1に設定すると、次のように表示されます。
% ttXactLog -v1 -logAnalyze rep1 Summary: Total transactions left to replicate: 4 Total rows left to replicate: 4 Size of transactions left to replicate: 1.86 KiB Size of rows left to replicate: 488.00 B Total inserts remaining: 4 Total partial rollbacks: 5 Total rollbacks: 3 Start LSN = 0.3793736 End LSN = 0.18769920
サブスクライバを指定すると、そのサブスクライバのサマリーのみが表示されます。ただし、デフォルトではすべてのサブスクライバのサマリーが表示されます。
冗長を2に設定すると、全体のサマリー情報に加え、各パラレル・トラックのサマリーが表示されます。
% ttXactLog -v2 -logAnalyze rep1 Track analysis for track number: 0 Transactions left to replicate: 2 Rows left to replicate: 2 Size of transactions left to replicate: 880.00 B Size of rows left to replicate: 312.00 B Total inserts remaining: 1 Total partial rollbacks: 4 Track analysis for track number: 1 Transactions left to replicate: 2 Rows left to replicate: 2 Size of transactions left to replicate: 1.14 KiB Size of rows left to replicate: 244.00 B Total inserts remaining: 2 Total partial rollbacks: 1 Total rollbacks: 3 Summary: Total transactions left to replicate: 4 Total rows left to replicate: 4 Size of transactions left to replicate: 2.00 KiB Size of rows left to replicate: 556.00 B Total inserts remaining: 3 Total partial rollbacks: 5 Total rollbacks: 3 Start LSN = 0.3793736 End LSN = 0.20506624
冗長レベル3を指定すると、生成される情報には、すべてのトラックにおけるすべてのトランザクションの内容に関する説明を含むトランザクション分析が含まれるようになります。
% ttXactLog -v3 -logAnalyze rep1 Transaction id: 3.10 Track for this xid: 1 Logmarker before this xid: 275 Rows left to replicate: 1 Transaction size: 800.00 B Size of rows left: 122.00 B Total inserts remaining: 1 Transaction id: 2.1 Track for this xid: 0 Logmarker before this xid: 276 Rows left to replicate: 1 Transaction size: 368.00 B Size of rows left: 122.00 B Total inserts remaining: 1 Transaction id: 2.19 Track for this xid: 1 Logmarker before this xid: 823 Rows left to replicate: 1 Transaction size: 368.00 B Size of rows left: 122.00 B Total inserts remaining: 1 Transaction id: 3.2 Track for this xid: 0 Logmarker before this xid: 842 Rows left to replicate: 1 Transaction size: 368.00 B Size of rows left: 122.00 B Total inserts remaining: 1 Track analysis for track number: 0 Transactions left to replicate: 2 Rows left to replicate: 2 Size of transactions left to replicate: 736.00 B Size of rows left to replicate: 244.00 B Total inserts remaining: 2 Total partial rollbacks: 4 Track analysis for track number: 1 Transactions left to replicate: 2 Rows left to replicate: 2 Size of transactions left to replicate: 1.14 KiB Size of rows left to replicate: 244.00 B Total inserts remaining: 2 Total partial rollbacks: 1 Total rollbacks: 3 Summary: Total transactions left to replicate: 4 Total rows left to replicate: 4 Size of transactions left to replicate: 1.86 KiB Size of rows left to replicate: 488.00 B Total inserts remaining: 4 Total partial rollbacks: 5 Total rollbacks: 3 Start LSN = 0.3793736 End LSN = 0.21444608
XIDを指定すると、トランザクション分析がXIDに基づく冗長レベル3の出力が表示されます。2つの別々のトランザクションで1つのXIDが使用されると、レポートには、LogMarker
エントリとともに、各トランザクションの開始直前のトランザクション・ログ内で最も近い箇所が表示されます。
% ttXactLog -logAnalyze -xid 2.19 rep1; Transaction id: 2.19 Track for this xid: 1 Logmarker before this xid: 823 Rows left to replicate: 1 Transaction size: 368.00 B Size of rows left: 122.00 B Total inserts remaining: 1 Track analysis for track number: 0 Transactions left to replicate: 0 Rows left to replicate: 0 Size of transactions left to replicate: 0.00 B Size of rows left to replicate: 0.00 B Track analysis for track number: 1 Transactions left to replicate: 1 Rows left to replicate: 1 Size of transactions left to replicate: 368.00 B Size of rows left to replicate: 122.00 B Total inserts remaining: 1 Summary: Total transactions left to replicate: 1 Total rows left to replicate: 1 Size of transactions left to replicate: 368.00 B Size of rows left to replicate: 122.00 B Total inserts remaining: 1 Start LSN = 0.3793736 End LSN = 0.20514816
ノート: 詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttXactLogに関する説明を参照してください。 |