この章では、データベースのレプリケーション状態の監視に使用できるTimesTenユーティリティおよび組込みプロシージャの一部について説明します。
レプリケーションは、コマンドラインおよびプログラムの両方から監視できます。この章で説明するttStatus
およびttRepAdmin
ユーティリティは、コマンドラインでの問合せに有効です。レプリケーションをプログラムによって監視するには、TimesTen組込みプロシージャ(『Oracle TimesTen In-Memory Databaseリファレンス』を参照)を使用するか、または独自のSQL SELECT
文を作成してレプリケーション表(『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』を参照)を問い合せます。
注意: TimesTenSYS およびTTREP 表には問合せのためにのみアクセスできます。これらの表の内容を変更しようとしないでください。 |
この章の内容は次のとおりです。
レプリケーション・エージェントの現在の状態についての情報を表示できます。
また、特定のレプリケーション・データベースの状態も取得できます(「サブスクライバ・データベース情報の表示」および「レプリケーション・データベースの構成の表示」を参照)。
マスター・データベースのレプリケーション・エージェントが起動されていることを確認するには、ttStatus
ユーティリティを使用します。
例12-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
組込みプロシージャを使用します。
例12-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
ユーティリティの出力に類似しています。
マスター・データベースに関する情報を表示できます。
マスター・データベースに関する情報を表示するには、-self -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -dsn masterDSN -self -list
例12-4 ttRepAdminを使用したマスター・データベースに関する情報の表示
この例では、「RETURNサービスとログ障害しきい値を使用する複数サブスクライバ・クラシック・レプリケーション・スキーム」で説明されているマスター・データベースの出力を示します。
> 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
文(「RETURNサービスとログ障害しきい値を使用する複数サブスクライバ・クラシック・レプリケーション・スキーム」を参照)の結果を示します。フィールドは、ホスト名、レプリケーション・ポート番号およびデータベース名です。
< server1, 0, masterds>
レプリケーションはTimesTenトランザクション・ログを使用して、サブスクライバ・サイトに送信する必要がある情報を保持します。サブスクライバ・データベースとの通信が中断された場合、またはサブスクライバ・サイトが停止した場合、トランザクション・ログ・データが累積します。この項で説明する問合せの出力の一部から、各サブスクライバ・データベースのために累積されたトランザクション・ログ・データの量、各サブスクライバ・データベースとの通信に最後に成功してから経過した時間を確認できます。
次の方法を使用して、サブスクライバ・データベースに関する情報を表示します。
サブスクライバに関する情報を表示するには、-receiver -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -dsn masterDSN
-receiver -list
例12-5 ttRepAdminを使用したサブスクライバに関する情報の表示
この例では、「RETURNサービスとログ障害しきい値を使用する複数サブスクライバ・クラシック・レプリケーション・スキーム」で説明されているサブスクライバの出力を示します。
> 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つ以上のサブスクライバ・データベースのステータスを表示できます(レポートされるのは、この組込みプロシージャがコールされたマスター・データベースのサブスクライバのステータスのみです)。
例12-6 このマスターの単一サブスクライバに関するステータスの表示
次の例は、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
です。
例12-7 このマスターのすべてのサブスクライバに関するステータスの表示
サブスクライバまたはサブスクライバのホスト名のいずれも提供しない場合、このマスターのすべてのサブスクライバに関するステータスが返されます。次の例では、このマスターに対してサブスクライバが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;
例12-8に、「伝播スキーム」で説明されているレプリケーション・スキームからの構成出力を示します。
例12-8 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
例12-9に、「伝播スキーム」で説明されているレプリケーション・スキームによって構成された伝播済データベースからの構成出力を示します。propds
プロパゲータの待機時間は19.41秒で、マスターよりログ2つ分遅れています。
例12-9 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;
例12-10 問合せの出力
問合せの出力例は、「伝播スキーム」で説明されているレプリケーション・スキームによって構成されたデータベースに対するものです。
最初の問合せの出力は次のようになります。
< 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に先行しています。
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.
ttLogHolds
組込みプロシージャの詳細は、『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
組込みプロシージャを使用します。
例12-11 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
スレッドは、リカバリ不可能なエラーが発生した場合、またはマスターが接続を切断した場合に終了します。
例12-11に、rep1
データベースがマスターで、rep2
データベースがサブスクライバである単方向レプリケーション・スキームのttRepAdmin
-showstatus
出力を示します。最初のttRepAdmin
-showstatus
出力は、rep1
データベースおよびそのTRANSMITTER
スレッドのステータスを示します。2つ目の出力はrep2
データベースおよびそのRECEIVER
スレッドのステータスを示します。
例の後の項では、ttRepAdmin
-showstatus
出力の各フィールドの意味について説明します。
例12-12 単方向レプリケーション・スキーム
rep1
データベースからrep2
データベースへの単方向レプリケーション・スキームについて考えてみます。
CREATE REPLICATION r ELEMENT e1 TABLE t MASTER rep1 SUBSCRIBER rep2;
rep1
データベースのレプリケーション・ステータスは、次のようになります。
> ttRepAdmin -showstatus rep1 DSN : rep1 Process ID : 1980 Replication Agent Policy : MANUAL Host : MYHOST RepListener Port : 1113 (AUTO) Last write LSN : 0.1487928 Last LSN forced to disk : 0.1487928 Replication hold LSN : 0.1486640 Replication Peers: Name : rep2 Host : MYHOST Port : 1154 (AUTO) Replication State : STARTED Communication Protocol : 12 TRANSMITTER thread(s): For : rep2 Start/Restart count : 2 Send LSN : 0.1485960 Transactions sent : 3 Total packets sent : 10 Tick packets sent : 3 MIN sent packet size : 48 MAX sent packet size : 460 AVG sent packet size : 167 Last packet sent at : 17:41:05 Total Packets received: 9 MIN rcvd packet size : 48 MAX rcvd packet size : 68 AVG rcvd packet size : 59 Last packet rcvd'd at : 17:41:05 Earlier errors (max 5): TT16060 in transmitter.c (line 3590) at 17:40:41 on 08-25-2004 TT16122 in transmitter.c (line 2424) at 17:40:41 on 08-25-2004
Replication hold LSN
、Last write LSN
およびLast LSN forced to disk
が非常に近いため、レプリケーションは適切に実行されていることがわかります。Replication hold LSN
がLast write LSN
およびLast LSN
より遅れる場合、レプリケーションはマスターの更新に追い付いていません。
rep2
データベースのレプリケーション・ステータスは、次のようになります。
> ttRepAdmin -showstatus rep2 DSN : rep2 Process ID : 2192 Replication Agent Policy : MANUAL Host : MYHOST RepListener Port : 1154 (AUTO) Last write LSN : 0.416464 Last LSN forced to disk : 0.416464 Replication hold LSN : -1.-1 Replication Peers: Name : rep1 Host : MYHOST Port : 0 (AUTO) Replication State : STARTED Communication Protocol : 12 RECEIVER thread(s): For : rep1 Start/Restart count : 1 Transactions received : 0 Total packets sent : 20 Tick packets sent : 0 MIN sent packet size : 48 MAX sent packet size : 68 AVG sent packet size : 66 Last packet sent at : 17:49:51 Total Packets received: 20 MIN rcvd packet size : 48 MAX rcvd packet size : 125 AVG rcvd packet size : 52 Last packet rcvd'd at : 17:49:51
次のフィールドは、問い合されたデータベースのレプリケーション・エージェント内のMAIN
スレッドの出力です。
MAINスレッド | 説明 |
---|---|
DSN |
問合せ対象のデータベースの名前。 |
Process ID |
レプリケーション・エージェントのプロセスID。 |
Replication Agent Policy |
再起動ポリシー(「レプリケーション・エージェントの起動および停止」を参照)。 |
Host |
このデータベースをホスティングするマシンの名前。 |
RepListener Port |
レプリケーション・エージェントがリモート・レプリケーション・エージェントのTRANSMITTER スレッドからの接続をリスニングするために使用するTCP/IPポート。値が0(ゼロ)の場合は、このポートがレプリケーション・スキームの一部として指定されているのでなく、レプリケーション・エージェントに自動的に割り当てられている(デフォルト)ことを示します。 |
Last write LSN |
データベースに対して最後に生成されたトランザクション・ログ・レコードの場所。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
Last LSN forced to disk |
ディスクに最後に書き込まれたトランザクション・ログ・レコードの場所。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
Replication hold LSN |
サブスクライバに送信できるようにログ内に保持されている最下位(最も古い)レコードの場所。値が-1/-1の場合は、レプリケーションがすべてのサブスクライバに対してstop 状態であることを示します。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
次のフィールドは、問い合されたデータベースのレプリケーション・スキームに関連している各レプリケーション・ピアの出力です。ピアは、マスター、サブスクライバ、プロパゲータ、または双方向レプリケーション・スキームではマスターとサブスクライバの両方の役割を果たすことができます。
レプリケーション・ピア | 説明 |
---|---|
Name |
このデータベースのレプリケーション・ピアであるデータベースの名前。 |
Host |
ピア・データベースのホスト。 |
Port |
ピア・データベースのレプリケーション・エージェントが使用するTCP/IPポート。値が0(ゼロ)の場合は、このポートがレプリケーション・スキームの一部として指定されているのでなく、レプリケーション・エージェントに自動的に割り当てられている(デフォルト)ことを示します。 |
Replication State |
問い合されたデータベースに対するレプリケーション・ピアの現在のレプリケーション状態(詳細は、「サブスクライバ・データベース情報の表示」を参照)。 |
Communication Protocol |
レプリケーションがピア間で通信を行うために使用する内部プロトコル。(内部使用専用。) |
次のフィールドは、マスター・レプリケーション・エージェントがトランザクション更新をサブスクライバに送信するために使用する各TRANSMITTER
スレッドの出力です。対応する複数のサブスクライバがあるマスターは、複数のTRANSMITTER
スレッドを持つことになります。
注意: TRANSMITTER 出力のカウントは、レプリケーション・エージェントを起動すると、累積し始めます。これらのカウントは、レプリケーション・エージェントを起動または再起動した場合にのみ0(ゼロ)にリセットされます。 |
TRANSMITTERスレッド | 説明 |
---|---|
For |
レプリケート・データをこのデータベースから受信するサブスクライバ・データベースの名前。 |
Start/Restart count |
処理のタイムアウトやネットワーク障害などの一時エラーが発生したため、レプリケーション・エージェントによってこのTRANSMITTER スレッドが起動または再起動された回数。 |
Send LSN |
このピアに最後に送信されたLSN。詳細は、「レプリケート・ログ・レコードの表示」を参照してください。 |
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時間制の時刻)。 |
Earlier errors (max 5) |
このスレッドによって最後に生成された5つのエラー。 |
次のフィールドは、サブスクライバ・レプリケーション・エージェントがマスターからトランザクション更新を受信するために使用する各RECEIVER
スレッドの出力です。複数のマスターによって更新されるサブスクライバは、複数のRECEIVER
スレッドを持つことになります。
注意: RECEIVER 出力のカウントは、レプリケーション・エージェントを起動すると、累積し始めます。これらのカウントは、レプリケーション・エージェントを起動または再起動した場合にのみ0(ゼロ)にリセットされます。 |
RECEIVERスレッド | 説明 |
---|---|
For |
レプリケート・データをこのデータベースから送信するマスター・データベースの名前。 |
Start/Restart count |
処理のタイムアウトやネットワーク障害などの一時エラーが発生したため、レプリケーション・エージェントによってこのRECEIVER スレッドが起動または再起動された回数。 |
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時間制の時刻)。 |
次の項では、RETURNサービスのステータスを確認する方法および最後に返されたステータスを確認する方法を説明します。
特定のサブスクライバに対するRETURNサービスがDISABLE RETURN
障害ポリシーによって無効にされているかどうかを確認するには、ttRepSyncSubscriberStatus
組込みプロシージャをコールするか、またはSNMPトラップであるttRepReturnTransitionTrap
を使用します。ttRepSyncSubscriberStatus
組込みプロシージャで返される値が1の場合は、RETURNサービスがサブスクライバに対して無効になっていることを示し、0(ゼロ)の場合は、RETURNサービスが有効であることを示します。
例12-13 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
例12-14 各サブスクライバのステータスのレポート
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に関する説明を参照してください。 |