ヘッダーをスキップ
Oracle® TimesTen In-Memory Database TimesTen to TimesTen開発者および管理者ガイド
リリース11.2.1
B56053-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

12 レプリケーションの監視

この章では、データベースのレプリケーション状態の監視に使用できるTimesTenユーティリティおよびプロシージャの一部について説明します。

レプリケーションは、コマンドラインおよびプログラムの両方から監視できます。この章で説明するttStatusおよびttRepAdminユーティリティは、コマンドラインでの問合せに有効です。レプリケーションをプログラムによって監視するには、TimesTen組込みプロシージャ(『Oracle TimesTen In-Memory Databaseリファレンス』を参照)を使用するか、または独自のSQL SELECT文を作成してレプリケーション表(Oracle TimesTen In-Memory Databaseのシステム表および制限に関するマニュアルを参照)を問い合せます。


注意:

TimesTen SYSおよびTTREP表には問合せのためにのみアクセスできます。これらの表の内容を変更しようとしないでください。

この章の内容は次のとおりです。

レプリケーション・エージェントの状態の表示

レプリケーション・エージェントの現在の状態についての情報を表示できます。

また、特定のレプリケーション・データベースの状態も取得できます(「サブスクライバ・データベース情報の表示」および「レプリケーション・データベースの構成の表示」を参照)。

コマンドラインから: ttStatus

マスター・データベースのレプリケーション・エージェントが起動されていることを確認するには、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.

コマンドラインから: ttAdmin -query

データベースに対するポリシー設定(「レプリケーション・エージェントの起動および停止」で説明されているレプリケーション再起動ポリシーを含む)を確認するには、-queryオプションを指定してttAdminユーティリティを使用します。

例12-2 ttAdminを使用したポリシー設定の確認

> ttAdmin -query masterDSN
RAM Residence Policy : inUse
Manually Loaded In Ram : False
Replication Agent Policy : manual
Replication Manually Started : True
Cache Agent Policy : manual
Cache Agent Manually Started : False

プログラムから: ttDataStoreStatus

レプリケーション・エージェントの状態をプログラムから取得するには、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);
  }

マスター・データベース情報の表示

マスター・データベースに関する情報を表示できます。

コマンドラインから: ttRepAdmin -self -list

マスター・データベースに関する情報をコマンドラインから表示するには、-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文

マスター・データベースの情報をプログラムから取得するには、次の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トランザクション・ログを使用して、サブスクライバ・サイトに送信する必要がある情報を保持します。サブスクライバ・データベースとの通信が中断された場合、またはサブスクライバ・サイトが停止した場合、ログ・データが累積します。この項で説明する問合せの出力の一部から、各サブスクライバ・データベースのために累積されたログ・データの量、各サブスクライバ・データベースとの通信に最後に成功してから経過した時間を確認できます。

サブスクライバ・データベースに関する情報を表示できます。

ttRepAdminを使用したサブスクライバのステータスの表示

マスター・データベースのサブスクライバに関する情報をコマンドラインから表示するには、-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を使用したサブスクライバのステータスの表示

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を使用したサブスクライバに関する情報の表示

マスターのサブスクライバに関する情報をプログラムから取得するには、次のSQL SELECT文を使用して、TTREP.REPPEERSTTREP.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 マスター・データベースがサブスクライバのために保持しているトランザクション・ログ・ファイルの数。


注意:

LatencyTPSおよび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コマンド

レプリケート・データベースの構成を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

コマンドラインから: ttRepAdmin -showconfig

レプリケート・データベースの構成をコマンドラインから表示するには、-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文

レプリケート・データベースの構成をプログラムから表示するには、次のSQL SELECT文を使用して、TTREP.TTSTORESTTREP.REPSTORESTTREP.REPPEERSSYS.MONITORTTREP.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 LSNlast 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に先行しています。

レプリケーション・ログ・レコードは、次の方法で表示できます。

コマンドラインから: ttRepAdmin -bookmark

ブックマークの位置をコマンドラインから表示するには、-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プロシージャ

ブックマークの位置をプログラムから表示するには、ttBookmarkプロシージャを使用します。

例12-15 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が定義されます。

レプリケーション・ステータスの表示

-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 LSNLast write LSNおよびLast LSN forced to diskが非常に近いため、レプリケーションは適切に実行されていることがわかります。Replication hold LSNLast 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スレッドの出力です。

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スレッドを持つことになります。


注意:

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スレッドを持つことになります。


注意:

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-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;
}

レプリケーションのパフォーマンス

レプリケーションのパフォーマンスを向上するには、次のヒントについて検討します。