Oracle® TimesTen In-Memory Database TimesTen to TimesTen開発者および管理者ガイド リリース11.2.1 B56053-02 |
|
戻る |
次へ |
この章では、データベースのレプリケーション状態の監視に使用できる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 Jan 29 12:16:27 2009 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
ユーティリティの出力に類似しています。
例12-4 SQLExecDirect関数でのttDataStoreStatusの使用
SQLExecDirect
関数内でttDataStoreStatus
をコールして、masterds
レプリケーション・エージェントのステータスを取得することもできます。
#define STATUS_LEN 30 UCHAR status[STATUS_LEN]; rc = SQLExecDirect( hstmt, (SQLCHAR *) "CALL ttDataStoreStatus ('/tmp/masterds')", SQL_NTS ); if (rc == SQL_SUCCESS) { SQLBindCol(hstmt, 4, SQL_C_CHAR, status, STATUS_LEN, &cbStat); }
マスター・データベースに関する情報を表示できます。
マスター・データベースに関する情報をコマンドラインから表示するには、-self -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin -dsn masterDSN -self -list
例12-5 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 状態であることを示します。 |
マスター・データベースの情報をプログラムから取得するには、次のSQL 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;
レプリケーション保持LSNを取得するには、ttBookmark
プロシージャを使用します(「レプリケート・ログ・レコードの表示」を参照)。
次に、マスター・データベースに対する前述のSELECT
文(「RETURNサービスとログ障害しきい値を使用する複数サブスクライバ・スキーム」を参照)の結果を示します。フィールドは、ホスト名、レプリケーション・ポート番号およびデータベース名です。
< server1, 0, masterds>
例12-6 ttBookmarkを使用したレプリケーション保持LSNの取得
レプリケーション保持LSNを取得するには、ttBookmark
プロシージャをコールします。
> ttIsql masterds Command> call ttBookMark(); < 10, 928908, 10, 280540, 10, 927692 > 1 row found.
出力フィールドは、次のように定義されています。
列 | データ型 | 説明 |
---|---|---|
writeLFN |
TT_INTEGER |
最後に書き込まれたトランザクション・ログ・ファイル。 |
writeLFO |
TT_INTEGER |
トランザクション・ログ・ファイルに最後に書き込まれたオフセット。 |
forceLFN |
TT_INTEGER |
ディスク書込みが強制実行された最後のトランザクション・ログ・ファイル。 |
forceLFO |
TT_INTEGER |
ディスク書込みが強制実行された最後のトランザクション・ログ・ファイルのオフセット。 |
holdLFN |
TT_INTEGER |
レプリケーション・ブックマークのトランザクション・ログ・ファイル。 |
holdLFO |
TT_INTEGER |
レプリケーション・ブックマークのログのオフセット。 |
レプリケーションはTimesTenトランザクション・ログを使用して、サブスクライバ・サイトに送信する必要がある情報を保持します。サブスクライバ・データベースとの通信が中断された場合、またはサブスクライバ・サイトが停止した場合、ログ・データが累積します。この項で説明する問合せの出力の一部から、各サブスクライバ・データベースのために累積されたログ・データの量、各サブスクライバ・データベースとの通信に最後に成功してから経過した時間を確認できます。
サブスクライバ・データベースに関する情報を表示できます。
マスター・データベースのサブスクライバに関する情報をコマンドラインから表示するには、-receiver -list
オプションを指定してttRepAdmin
ユーティリティを使用します。
ttRepAdmin
-dsn
masterDSN
-receiver -list
例12-7 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つ分遅れています。この待機時間は高い値です。待機時間の値が高いままでログの数が増え続ける場合、問題が発生していることを示します。
ttRepAdmin
の出力の各フィールドについては、例12-9を参照してください。
TTREP.REPLICATIONS
表に指定したスキームが複数ある場合は、-scheme
オプションを使用して、表示するスキームを指定する必要があります。そうしない場合、次のエラーを受信します。
Must specify -scheme to identify which replication scheme to use
トラブルシューティングに関する最新情報は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のレプリケーションのトラブルシューティングに関する説明を参照してください。
ttReplicationStatus
組込みプロシージャを使用して、特定のレプリケーション・データベースのより詳細なステータスをプログラムから取得できます。
例12-8 プログラムからのttReplicationStatusの使用
ttReplicationStatus
を使用して、マスター・データベースに関するsubscriberds
データベースのレプリケーション・ステータスを取得できます。マスター・データベースから、次のように入力します。
> ttIsql masterds Command> CALL ttReplicationStatus ('subscriberds'); < subscriberds, myhost, 0, start, 1, 152959, repscheme, repl> 1 row found.
出力フィールドについては、例12-9を参照してください。
例12-9 SQLExecDirect関数でのttReplicationStatusの使用
SQLExecDirect
関数内でttReplicationStatus
をコールして、subscriberds
データベースのレプリケーション・ステータスを取得することもできます。
#define STATUS_LEN 30 UCHAR status[STATUS_LEN]; rc = SQLExecDirect( hstmt, (SQLCHAR *) "CALL ttReplicationStatus ('subscriberds')", SQL_NTS ); if (rc == SQL_SUCCESS) { SQLBindCol(hstmt, 4, SQL_C_CHAR, status, STATUS_LEN, &cbStat); }
次の表に、返される行の列を示します。
列 | 説明 |
---|---|
Subscriber name |
サブスクライバ・データベースの名前。 |
Host name |
サブスクライバをホスティングするマシンの名前。 |
Port |
マスターからの更新を受信するサブスクライバ・エージェントで使用されるTCP/IPポート。値が0(ゼロ)の場合は、レプリケーションでポートが自動的に割り当てられたことを示します。 |
State |
マスター・データベースに対するサブスクライバの現在の状態(詳細は、「サブスクライバのレプリケーション状態の設定」を参照)。 |
Logs |
マスター・データベースがこのサブスクライバのために保持しているトランザクション・ログ・ファイルの数。 |
Last Msg Sent |
マスターがサブスクライバに最後にメッセージを送信してから経過した時間(秒)。このようなメッセージには、データベース間で送信されたハートビート・メッセージが含まれます。 |
Replication scheme name |
使用するレプリケーション・スキームの名前。 |
Owner name |
レプリケーション・スキームの所有者の名前。 |
マスターのサブスクライバに関する情報をプログラムから取得するには、次のSQL 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 = t2.tt_store_id AND t2.is_local_store = 0X01 AND p.subscriber_id = t1.tt_store_id AND p.replication_name = 'repscheme' AND p.replication_owner = 'repl' AND (p.state = 0 OR p.state = 1);
次に、前述のSELECT文の出力例を示します。
< 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
ユーティリティまたはSQL 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の場合は、マスターのレプリケーション・エージェントがそのサブスクライバ・レプリケーション・エージェントとの通信を確立していないか、またはデータをサブスクライバ・レプリケーション・エージェントに送信していないことを示します。 |
ttRepSubscriberSync
組込みプロシージャを使用して、そのプロシージャをコールしたサブスクライバが、マスター・データベースでコミットされたすべての更新を受信して適用し、永続的にコミットしたことを確認できます。
例12-10 サブスクライバがすべての更新を受信したことの確認
レプリケーション・スキームの名前はsimple
です。レプリケーション・スキームの所有者はttuser
です。マスター・データベースの名前はmaster1
です。マスター・ホストはhost1
です。この組込みプロシージャは最大300秒待機し、コールの時点でマスターでコミットされていたすべての更新がサブスクライバで受信されて適用されたかどうかを確認します。
Command> call ttRepSubscriberSync('simple','ttuser','master1','host1',300);
この組込みプロシージャは、300秒経過するまでにサブスクライバがすべての更新を受信した場合は0x00
、サブスクライバがすべての更新を受信しなかった場合は0x01
を返します。
例12-11 スタンバイ・データベースがすべての更新を受信したことの確認
ttRepSubscriberSync
組込みプロシージャを使用して、アクティブ・スタンバイ・ペアのスタンバイ・データベースがアクティブ・データベースからすべての更新を受信して適用したかどうかを確認できます。このプロシージャはスタンバイ・データベースからコールします。アクティブ・スタンバイ・ペアのレプリケーション・スキームの名前は常に_activestandby
です。アクティブ・スタンバイ・ペアの所有者を確認するには、TTREP.REPLICATIONS
システム表を参照します。
Command> call ttRepSubscriberSync > ('_activestandby','ttuser','activeDS','activehost',300);
レプリケート・データベースの構成を表示できます。
レプリケート・データベースの構成をttIsql
プロンプトから表示するには、repschemes
コマンドを使用します。
Command> repschemes;
例12-12に、「伝播スキーム」で説明されているレプリケーション・スキームからの構成出力を示します。
例12-12 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-13に、「伝播スキーム」で説明されているレプリケーション・スキームによって構成された伝播済データベースからの構成出力を示します。propds
プロパゲータの待機時間は19.41秒で、マスターよりログ2つ分遅れています。
例12-13 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フィールドの意味については、例12-9を参照してください。Table detailsフィールドには、表およびそのマスター(送信者)とサブスクライバのデータベースの名前が表示されます。
レプリケート・データベースの構成をプログラムから表示するには、次のSQL 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;
レプリケーション保持LSNを取得するには、ttBookmark
プロシージャを使用します(「プログラムから: ttBookMarkプロシージャ」を参照)。
例12-14 SELECT問合せの出力
「伝播スキーム」で説明されているレプリケーション・スキームによって構成されたデータベースに対する前述の問合せの出力例は、次のようになります。
< finance, 0, centralds, 120, 0 > < propds, nethandler, 0, 0, 7, 1004378953, 0, -1.00000000000000, -1, -1, 1 > < repl, tab, centralds, propds > < repl, tab, propds, backup1ds > < repl, tab, propds, backup2ds >
最初の行内の最初の3列については、例12-6を参照してください。4つ目の列は、データベースがメッセージを送信する前に別のデータベースからのレスポンスを待機する時間を定義するTIMEOUT
値です。最後の列は、ログ障害しきい値(「ログ障害しきい値の設定」を参照)です。
2行目については、例12-9を参照してください。最後の3つの行には、レプリケート表およびそのマスター(送信者)とサブスクライバ(受信者)のデータベースの名前が表示されます。
トランザクションは、ログ・レコードの形式でログに保存されます。ブックマークを使用して、マスター・データベースがレプリケートしたログ・レコードまたはレプリケートしていないログ・レコードを検出できます。
ブックマークは、ログ順序番号(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に先行しています。
レプリケーション・ログ・レコードは、次の方法で表示できます。
ブックマークの位置をコマンドラインから表示するには、-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状態であること(または問い合されたデータベースがマスター・データベースではないこと)を示します。 |
Last written LSN |
データベースに対して最後に生成されたトランザクション・ログ・レコードの場所。 |
Last LSN forced to disk |
ディスクに最後に書き込まれたトランザクション・ログ・レコードの場所。 |
ブックマークの位置をプログラムから表示するには、ttBookmark
プロシージャを使用します。
-showstatus
オプションを指定してttRepAdmin
ユーティリティを使用すると、レプリケーション・エージェントの現在のステータスを表示できます。ステータス出力には、問い合されたデータベースのレプリケーション・エージェントで使用されるブックマークの位置、ポート番号および通信プロトコルが含まれます。
ttRepAdmin
-showstatus
の出力には、レプリケーション・エージェントで使用されるメイン・スレッド、TRANSMITTER
スレッドおよびRECEIVER
スレッドのステータスが含まれます。マスター・データベースにはTRANSMITTER
スレッド、サブスクライバ・データベースにはRECEIVER
スレッドがあります。双方向レプリケーション・スキームでマスター/サブスクライバとしての機能するデータベースには、TRANSMITTER
スレッドおよびRECEIVER
スレッドの両方があります。
各レプリケーション・エージェントには、ポートでピア接続をリスニングする単一のREPLISTENER
スレッドがあります。マスター・データベースでは、REPLISTENER
スレッドがサブスクライバ・データベースごとに個別のTRANSMITTER
スレッドを開始します。サブスクライバ・データベースでは、REPLISTENER
スレッドがマスターからの接続のたびに個別のRECEIVER
スレッドを開始します。
TimesTenデーモンがレプリケーション・エージェントの停止を要求した場合、またはレプリケーション・エージェントで使用されている他のいずれかのスレッドで致命的なエラーが発生した場合、メイン・スレッドは他のすべてのスレッドが正常に終了するまで待機します。TimesTenデーモンは、致命的なエラーの種類に応じて、レプリケーション・エージェントを再起動する場合もしない場合もあります。REPLISTENER
スレッドは、レプリケーション・エージェントの存続期間中には終了しません。TRANSMITTER
またはRECEIVER
スレッドは停止する場合がありますが、レプリケーション・エージェントによって再起動されます。RECEIVER
スレッドは、リカバリ不可能なエラーが発生した場合、またはマスターが接続を切断した場合に終了します。
例12-15に、rep1
データベースがマスターで、rep2
データベースがサブスクライバである単方向レプリケーション・スキームのttRepAdmin
-showstatus
出力を示します。最初のttRepAdmin -showstatus
出力は、rep1
データベースおよびそのTRANSMITTER
スレッドのステータスを示します。2つ目の出力はrep2
データベースおよびそのRECEIVER
スレッドのステータスを示します。
例の後の項では、ttRepAdmin
-showstatus
出力の各フィールドの意味について説明します。
例12-16 単方向レプリケーション・スキーム
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サービスがDISABLE RETURN
障害ポリシーによって無効にされているかどうかを確認するには、ttRepSyncSubscriberStatus
組込みプロシージャをコールするか、またはSNMPトラップであるttRepReturnTransitionTrap
を使用します。ttRepSyncSubscriberStatus
プロシージャで返される値が1の場合は、RETURNサービスがサブスクライバに対して無効になっていることを示し、0(ゼロ)の場合は、RETURNサービスが有効であることを示します。
例12-17 ttRepSyncSubscriberStatusを使用したRETURN RECEIPTのステータスの取得
ttRepSyncSubscriberStatus
を使用して、マスター・データベースmasterDSN
に対するデータベースsubscriberds
のRETURN RECEIPTのステータスを取得するには、次のように入力します。
> ttIsql masterDSN Command> CALL ttRepSyncSubscriberStatus ('subscriberds'); < 0 > 1 row found.
この結果は、RETURNサービスが有効であることを示しています。
詳細は、「DISABLE RETURN」を参照してください。
接続ハンドルで最後に実行されたRETURN RECEIPTトランザクションまたはRETURN TWOSAFEトランザクションのステータスは、ttRepXactTokenGet
およびttRepXactStatus
プロシージャをコールして確認できます。
まず、ttRepXactTokenGet
をコールして、最後のRETURNサービス・トランザクションに固有のトークンを取得します。RETURN RECEIPTを使用している場合は、マスター・データベースで最後にコミットされたRETURN RECEIPTトランザクションがトークンによって識別されます。RETURN TWOSAFEを使用している場合は、サブスクライバでのコミットが成功した場合に、マスターのレプリケーション・エージェントによってコミットされる、マスター上の最後のRETURN TWOSAFEトランザクションがトークンによって識別されます。ただし、タイムアウトなどのエラーが発生した場合、トークンによって識別されたRETURN TWOSAFEトランザクションはマスターのレプリケーション・エージェントによってはコミットされません。
次に、ttRepXactTokenGet
によって返されたトークンをttRepXactStatus
プロシージャに渡して、RETURNサービスのステータスを取得します。ttRepXactStatus
プロシージャの出力は、レプリケート・データを受信するように構成されているサブスクライバ、および各サブスクライバに対してトランザクションの現在のステータス(未送信、受信済、コミット済)をレポートします。サブスクライバ・レプリケーション・エージェントがサブスクライバ・データベースへのトランザクションの適用時に問題を検出した場合、ttRepXactStatus
プロシージャにはエラー文字列も含まれます。RETURN TWOSAFEの使用時にタイムアウトなどのエラーを受信した場合は、無条件にコミットするか、コミットを再試行するかを決定できます(「RETURN TWOSAFE」を参照)。
注意: ttRepXactTokenGet で取得したトークンを使用せずにttRepXactStatus をコールすると、接続上でRETURN RECEIPTまたはRETURN TWOSAFEレプリケーション・サービスによって最後にコミットされたトランザクションの状態が返されます。 |
ttRepXactStatus
プロシージャは、各サブスクライバのRETURNサービスのステータスを、次のように書式設定された行セットとして返します。
subscriberName, status, error
例12-18 各サブスクライバのステータスのレポート
たとえば、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; }
レプリケーションのパフォーマンスを向上するには、次のヒントについて検討します。
デフォルトの非同期のレプリケーションを使用します。詳細は、「パフォーマンスとリカバリのトレードオフについての判断」を参照してください。ただし、アクティブ・スタンバイ・ペアを使用している場合、RETURN RECEIPT(半同期レプリケーション)よりもRETURN TWOSAFE(同期レプリケーション)のパフォーマンスの方が優れています。
LogFileSize
およびLogBufMB
初期接続属性を最大値に設定します。詳細は、「ロギングの接続属性の設定」を参照してください。
ワークロードが高く、レプリケーションが遅延することがある場合、メモリー内ログ・バッファからではなく、ディスク上のトランザクション・ログからレプリケート対象の変更を取得する必要があります。できるだけ高速の記憶域をTimesTenトランザクション・ログ用に使用することで、トランザクション・ログのフラッシュとレプリケーションの取得によるI/Oの競合が緩和し、ワークロードが少ない時間帯にレプリケーションが遅れをすばやく取り戻せるようになります。複数の高速ディスクまたはソリッド・ステート・ストレージにRAID 0ストライプを構成した高性能のキャッシュ・ディスク・アレイを使用することを検討してください。
更新が適用されるデータベースへの様々な接続数を試してみてください。同時接続数が65以上必要な場合、Connections
初期接続属性の設定値を高くします。『Oracle TimesTen In-Memory Databaseリファレンス』のConnectionsに関する説明を参照してください。