プログラムによるレプリケーションの監視

適用対象:SQL ServerAzure SQL Managed Instance

レプリケーション モニターは、レプリケーション トポロジを監視するためのグラフィカル ツールです。 Transact-SQL レプリケーション ストアド プロシージャまたはレプリケーション管理オブジェクト (RMO) を使用すると、同じ監視データにプログラムからアクセスできます。 このオブジェクトにより、次のタスクをプログラムできます。

  • パブリッシャー、パブリケーション、およびサブスクリプションの状態を監視する。

  • 1 つ以上のサブスクライバーにおけるマージ エージェント セッションを監視する。

  • 1 つ以上のサブスクライバーでの適用待ちとなっているトランザクション コマンドを監視する。

  • パブリケーションにユーザーの介入が必要となるしきい値の基準を定義する。

  • トレーサー トークンのステータスを監視する。

Transact-SQL

ディストリビューターでパブリッシャー、パブリケーション、サブスクリプションを監視するには

  1. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelppublisherを実行します。 これにより、このディストリビューターを利用している全パブリッシャーの監視情報が返されます。 結果セットを 1 つのパブリッシャーに限定するには、 @publisherを指定します。

  2. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelppublicationを実行します。 これにより、このディストリビューターを利用している全パブリケーションの監視情報が返されます。 結果セットを 1 つのパブリッシャー、パブリケーション、またはパブリッシュ済みデータベースに限定するには、それぞれ @publisher@publication、または @publisher_dbを指定します。

  3. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelpsubscriptionを実行します。 これにより、このディストリビューターを利用しているすべてのサブスクリプションの監視情報が返されます。 結果セットを 1 つのパブリッシャー、パブリケーション、またはパブリッシュ済みデータベースに属するサブスクリプションに限定するには、それぞれ @publisher@publication、または @publisher_dbを指定します。

サブスクライバーで適用待ちのトランザクション コマンドを監視するには

  1. ディストリビューターのディストリビューション データベースで、 sp_replmonitorsubscriptionpendingcmdsを実行します。 これにより、このディストリビューターを利用しているすべてのサブスクリプションの、待機中の全コマンドに関する監視情報が返されます。 結果セットを 1 つのパブリッシャー、サブスクライバー、パブリケーション、またはパブリッシュ済みデータベースに属するサブスクリプションに適用される待機中コマンドに限定するには、それぞれ @publisher@subscriber@publication、または @publisher_dbを指定します。

アップロードまたはダウンロード待ちのマージ変更を監視するには

  1. パブリッシャーのパブリケーション データベースで、 sp_showpendingchangesを実行します。 この結果セットは、サブスクライバーにレプリケートされるのを待っている変更に関する情報を表示します。 結果セットを 1 つのパブリケーションまたはアーティクルに属する変更に限定するには、それぞれ @publication または @articleを指定します。

  2. サブスクライバー上のサブスクリプション データベースで、sp_showpendingchanges を実行します。 これにより、パブリッシャーにレプリケートされるのを待機している変更に関する情報を含む結果セットが返されます。 結果セットを 1 つのパブリケーションまたはアーティクルに属する変更に限定するには、それぞれ @publication または @articleを指定します。

マージ エージェント セッションを監視するには

  1. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelpmergesessionを実行します。 これにより、このディストリビューターを利用する全サブスクリプションのすべてのマージ エージェント セッションに関する監視情報 ( Session_idを含む) が返されます。 また、 MSmerge_sessions システム テーブルにクエリを実行することでも、 Session_id を取得できます。

  2. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelpmergesessiondetailを実行します。 手順 1. で取得した Session_id の値を @session_idに指定します。 これにより、セッションに関する詳細な監視情報が表示されます。

  3. 目的の各セッションについて、手順 2. を実行します。

サブスクライバー側のプル サブスクリプションのマージ エージェント セッションを監視するには

  1. サブスクライバーのサブスクリプション データベースで、sp_replmonitorhelpmergesession を実行します。 サブスクリプションの @publisher@publicationを指定し、パブリケーション データベースの名前を @publisher_dbに指定します。 これにより、このサブスクリプションの過去 5 回のマージ エージェント セッションに関する監視情報が返されます。 結果セットで、目的のセッションの Session_id の値を確認します。

  2. サブスクライバー側のサブスクリプション データベースで、sp_replmonitorhelpmergesessiondetailを実行します。 手順 1. で取得した Session_id の値を @session_idに指定します。 これにより、セッションに関する詳細な監視情報が表示されます。

  3. 目的の各セッションについて、手順 2. を実行します。

パブリケーションの監視しきい値メトリックを表示および変更するには

  1. ディストリビューターのディストリビューション データベースで、 sp_replmonitorhelppublicationthresholdsを実行します。 これにより、このディストリビューターを利用している全パブリケーションの監視しきい値が返されます。 結果セットを 1 つのパブリッシャー、パブリッシュ済みデータベース、またはパブリケーションに属するパブリケーションに対する監視しきい値に限定するには、それぞれ @publisher@publisher_db、または @publicationを指定します。 変更する必要があるしきい値に対応する Metric_id の値を確認します。 詳細については、「 Set Thresholds and Warnings in Replication Monitor」を参照してください。

  2. ディストリビューターのディストリビューション データベースで、 sp_replmonitorchangepublicationthresholdを実行します。 必要に応じて、次の値を指定します。

    • 手順 1. で得た Metric_id の値を @metric_idに指定します。

    • 監視しきい値の新しい値を @valueに指定します。

    • このしきい値に到達したときに警告をログに記録するには、 @shouldalert1 を指定します。警告が不要な場合には、 0 を指定します。

    • 監視しきい値を有効にするには @mode1 を指定し、無効にするには 2 を指定します。

レプリケーション管理オブジェクト (RMO)

サブスクライバー側でマージ パブリケーションへのサブスクリプションを監視するには

  1. ServerConnection クラスを使用して、サブスクライバーへの接続を作成します。

  2. MergeSubscriberMonitor クラスのインスタンスを作成し、サブスクリプションの PublisherPublicationPublisherDBSubscriberDB の各プロパティを設定します。次に、 ConnectionContext プロパティに対し、手順 1. で作成した ServerConnection を設定します。

  3. 次のいずれかのメソッドを呼び出して、このサブスクリプションのマージ エージェント セッションの情報を取得します。

    • GetSessionsSummary - 過去に発生したマージ エージェント セッションの情報を保持する MergeSessionSummary オブジェクトの配列を返します (最大 5 セッション)。 監視対象のすべてのセッションについて、 SessionId 値を確認してください。

    • GetSessionsSummary - hours パラメーターで指定した過去の時間内に発生したマージ エージェント セッション (直近 5 セッションまで) に関する情報を含む MergeSessionSummary オブジェクトの配列を返します。 監視対象のすべてのセッションについて、 SessionId 値を確認してください。

    • GetLastSessionSummary - 前回のマージ エージェント セッションの情報を保持する MergeSessionSummary オブジェクトを返します。 このセッションの SessionId 値を確認してください。

    • GetSessionsSummaryDataSet - 過去のマージ エージェント セッション (最大 5 セッション) の情報を、1 行あたり 1 セッションの形式で保持する DataSet オブジェクトを返します。 監視対象のすべてのセッションについて、 Session_id 列の値を確認してください。

    • GetLastSessionSummaryDataRow - 前回のマージ エージェント セッションの情報を保持する DataRow オブジェクトを返します。 このセッションの Session_id 列の値を確認してください。

  4. (省略可) RefreshSessionSummary を呼び出して、MergeSessionSummary オブジェクトとして渡された mss のデータを更新するか、または RefreshSessionSummary を呼び出して、DataRow オブジェクトとして渡された drRefresh のデータを更新します。

  5. 手順 3. で取得したセッション ID を使用して次のいずれかのメソッドを呼び出し、特定のセッションの詳細情報を取得します。

ディストリビューターですべてのパブリケーションについてレプリケーション プロパティを監視するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. ReplicationMonitor クラスのインスタンスを作成します。

  3. ConnectionContext プロパティに、手順 1. で作成した ServerConnection を設定します。

  4. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。

  5. 次の 1 つまたは複数のメソッドを実行して、このディストリビューターを使用している、すべてのパブリッシャーのレプリケーション情報を取得します。

    • EnumDistributionAgents - このディストリビューターのすべてのディストリビューション エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumErrorRecords - ディストリビューターに保存されているエラー情報を保持する DataSet オブジェクトを返します。

    • EnumLogReaderAgents - ディストリビューターのすべてのログ リーダー エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumMergeAgents - ディストリビューターのすべてのマージ エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumMiscellaneousAgents - ディストリビューターのその他すべてのレプリケーション エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumPublishers - このディストリビューターのすべてのパブリッシャーに関する情報を保持する DataSet オブジェクトを返します。

    • EnumPublishers2 - このディストリビューターを使用しているパブリッシャーを返す DataSet オブジェクトを返します。

    • EnumQueueReaderAgents - ディストリビューターのすべてのキュー リーダー エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumQueueReaderAgentSessionDetails - 指定されたキュー リーダー エージェントおよびセッションの情報を保持する DataSet オブジェクトを返します。

    • EnumQueueReaderAgentSessions - 指定されたキュー リーダー エージェントのセッション情報を保持する DataSet オブジェクトを返します。

    • EnumSnapshotAgents - ディストリビューターのすべてのスナップショット エージェントに関する情報を保持する DataSet オブジェクトを返します。

ディストリビューターで特定のパブリッシャーのパブリケーション プロパティを監視するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. 次のいずれかの方法で PublisherMonitor オブジェクトを取得します。

    • PublisherMonitor クラスのインスタンスを作成します。 パブリッシャーの Name プロパティを設定し、 ConnectionContext プロパティに手順 1. で作成した ServerConnection を設定します。 LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドから falseが返された場合、パブリッシャー名が正しく定義されていないか、パブリケーションが存在していません。

    • PublisherMonitorCollection から取得します。このコレクションには、既存の PublisherMonitors オブジェクトの ReplicationMonitor プロパティを使用してアクセスできます。

  3. 次の 1 つまたは複数のメソッドを実行して、このパブリッシャーに属している、すべてのパブリケーションのレプリケーション情報を取得します。

    • EnumDistributionAgentSessionDetails - 指定されたディストリビューション エージェントおよびセッションの情報を保持する DataSet オブジェクトを返します。

    • EnumDistributionAgentSessions - 指定されたディストリビューション エージェントのセッション情報を保持する DataSet オブジェクトを返します。

    • EnumErrorRecords - 指定されたエラーのエラー レコード情報を保持する DataSet オブジェクトを返します。

    • EnumLogReaderAgentSessionDetails - 指定されたログ リーダー エージェントおよびセッションの情報を保持する DataSet オブジェクトを返します。

    • EnumLogReaderAgentSessions - 指定されたログ リーダー エージェントのセッション情報を保持する DataSet オブジェクトを返します。

    • EnumMergeAgentSessionDetails - 指定されたマージ エージェントおよびセッションの情報を保持する DataSet オブジェクトを返します。

    • EnumMergeAgentSessionDetails2 - 指定されたマージ エージェントおよびセッションの追加情報を保持する DataSet オブジェクトを返します。

    • EnumMergeAgentSessions - 指定されたマージ エージェントのセッション情報を保持する DataSet オブジェクトを返します。

    • EnumMergeAgentSessions2 - 指定されたマージ エージェントの追加のセッション情報を保持する DataSet オブジェクトを返します。

    • EnumPublications - このディストリビューターのすべてのパブリケーションに関する情報を保持する DataSet オブジェクトを返します。

    • EnumPublications2 - このディストリビューターのすべてのパブリケーションに関する追加情報を保持する DataSet オブジェクトを返します。

    • EnumSnapshotAgentSessionDetails - 指定されたスナップショット エージェントおよびセッションの情報を保持する DataSet オブジェクトを返します。

    • EnumSnapshotAgentSessions - 指定されたスナップショット エージェントのセッション情報を保持する DataSet オブジェクトを返します。

    • EnumSubscriptions - このディストリビューターのパブリケーションに対するすべてのサブスクリプションに関する情報を保持する DataSet オブジェクトを返します。

ディストリビューターで特定のパブリッシャーのプロパティを監視するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. 次のいずれかの方法で PublicationMonitor オブジェクトを取得します。

  3. 次の 1 つまたは複数のメソッドを実行して、このパブリケーションに関する情報を取得します。

    • EnumErrorRecords - 指定されたエラーのエラー レコードを保持する DataSet オブジェクトを返します。

    • EnumLogReaderAgent - このパブリケーションのログ リーダー エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumMonitorThresholds - このパブリケーションに設定されている監視警告のしきい値情報を保持する DataSet オブジェクトを返します。

    • EnumQueueReaderAgent - このパブリケーションで使用されるキュー リーダー エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumSnapshotAgent - このパブリケーションのスナップショット エージェントに関する情報を保持する DataSet オブジェクトを返します。

    • EnumSubscriptions - このパブリケーションのサブスクリプションに関する情報を保持する DataSet オブジェクトを返します。

    • EnumSubscriptions2 - このパブリケーションのサブスクリプションに関する追加情報を保持する DataSet オブジェクトを、指定された SubscriptionResultOptionに基づいて返します。

    • EnumTracerTokenHistory - 指定されたトレーサー トークンの待機時間情報を保持する DataSet オブジェクトを返します。

    • EnumTracerTokens - このパブリケーションに挿入されたすべてのトレーサー トークンに関する情報を保持する DataSet オブジェクトを返します。

サブスクライバーで適用待ち状態になっているトランザクション コマンドを監視するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. 次のいずれかの方法で PublicationMonitor オブジェクトを取得します。

  3. TransPendingCommandInfo メソッドを実行して PendingCommandInfo オブジェクトを取得します。

  4. この PendingCommandInfo オブジェクトのプロパティを使用して、保留状態の推定コマンド数と、コマンドを配信を完了するまでの時間を調べます。

パブリケーションに対して監視警告のしきい値を設定するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. 次のいずれかの方法で PublicationMonitor オブジェクトを取得します。

  3. EnumMonitorThresholds メソッドを実行します。 返された ArrayList オブジェクトの MonitorThreshold で、現在のしきい値設定を確認します。

  4. ChangeMonitorThreshold メソッドを実行します。 次のパラメーターを指定します。

    • metricID - 次の表に示す監視しきい値メトリックを表す Int32 値です。

      説明
      1 expiration - トランザクション パブリケーションへのサブスクリプションに期限が迫っていないかを監視します。
      2 latency - トランザクション パブリケーションへのサブスクリプションのパフォーマンスを監視します。
      4 mergeexpiration - マージ パブリケーションへのサブスクリプションに期限が迫っていないかを監視します。
      5 mergeslowrunduration - 低速回線 (ダイヤルアップ) 接続でのマージの同期時間を監視します。
      6 mergefastrunduration - 高帯域 (LAN) 接続でのマージ同期の期間を監視します。
      7 mergefastrunspeed : 高帯域幅 (LAN) 接続経由でのマージ同期の同期速度を監視します。
      8 mergeslowrunspeed - 低速回線 (ダイヤルアップ) 接続でのマージの同期速度を監視します。
    • enable - Boolean その発行に対してメトリックが有効かどうかを示す値です。

    • thresholdValue - しきい値を設定する整数値です。

    • shouldAlert - このしきい値に対して警告を生成するかどうかを示す整数値です。