以程式設計方式監視複寫

適用于:SQL Server (所有支援的版本) Azure SQL 受控執行個體

「複寫監視器」是一個允許您監視複寫拓撲之全面健全狀況的圖形化工具。 您可以使用 Transact-SQL 複寫預存程式或複寫管理物件,以程式設計方式存取相同的監視資料, (RMO) 。 這些物件可用來設計下列工作:

  • 監視「發行者」、發行集和訂閱的狀態。

  • 在一個或多個「訂閱者」端監視「合併代理程式」的工作階段。

  • 監視在一個或多個「訂閱者」端等候套用的交易式命令。

  • 定義臨界值標準,以決定發行集何時需要介入。

  • 監視追蹤 Token 的狀態。

本主題內容:

Transact-SQL

Replication Management Objects (RMO)

Transact-SQL

若要從散發者監視發行者、發行集和訂閱

  1. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelppublisher。 這會為所有使用此「散發者」的「發行者」傳回監視資訊。 若要將結果集限制為單一發行者,請指定 @publisher

  2. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelppublication。 這會為所有使用此「散發者」的發行集傳回監視資訊。 若要將結果集限制為單一發行者、發行集或已發佈的資料庫,請分別指定 @publisher@publication@publisher_db

  3. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelpsubscription。 這會為所有使用此「散發者」的訂閱傳回監視資訊。 若要將結果集限制為屬於單一發行者、發行集或已發佈資料庫的訂閱,請分別指定 @publisher@publication@publisher_db

若要監視在訂閱者端等候套用的交易式命令

  1. 在散發資料庫的「散發者」端,執行 sp_replmonitorsubscriptionpendingcmds。 這會為所有使用此「散發者」的訂閱傳回所有暫止命令的監視資訊。 若要將結果集限制為屬於單一發行者、訂閱者、發行集或已發佈資料庫的訂閱擱置中的命令,請分別指定 @publisher@subscriber@publication@publisher_db

若要監視等候上傳或下載的合併變更

  1. 在發行集資料庫的「發行者」端,執行 sp_showpendingchanges。 這會傳回結果集,顯示正等候複寫至「訂閱者」之變更的相關資訊。 若要將結果集限制為屬於單一發行集或發行項的變更,請分別指定 @publication@article

  2. 在訂閱資料庫的「訂閱者」端,執行 sp_showpendingchanges。 這會傳回結果集,顯示正等候複寫至「發行者」之變更的相關資訊。 若要將結果集限制為屬於單一發行集或發行項的變更,請分別指定 @publication@article

若要監視合併代理程式的工作階段

  1. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelpmergesession。 這會針對所有使用此「散發者」的訂閱,傳回有關「合併代理程式」工作階段的監視資訊,包括 Session_id。 您也可以藉由查詢 MSmerge_sessions 系統資料表來取得 Session_id

  2. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelpmergesessiondetail。 針對@session_id指定步驟 1的Session_id值。 這會顯示有關工作階段的詳細監視資訊。

  3. 針對每個感興趣的工作階段重複步驟 2。

若要從訂閱者監視提取訂閱的合併代理程式工作階段

  1. 在訂閱資料庫的「訂閱者」端,執行 sp_replmonitorhelpmergesession。 針對指定的訂閱,指定 @publisher@publication,以及 @publisher_db的發行集資料庫名稱。 這會傳回此訂閱最後五個「合併代理程式」工作階段的監視資訊。 請注意結果集中感興趣之工作階段的 Session_id 值。

  2. 在訂閱資料庫的「訂閱者」端,執行 sp_replmonitorhelpmergesessiondetail。 針對@session_id指定步驟 1的Session_id值。 這會顯示有關工作階段的詳細監視資訊。

  3. 針對每個感興趣的工作階段重複步驟 2。

若要檢視和修改發行集的監視臨界值標準

  1. 在散發資料庫的「散發者」端,執行 sp_replmonitorhelppublicationthresholds。 這會傳回為所有使用此「散發者」的發行集所設定的監視臨界值。 若要限制結果集監視屬於單一發行者或已發佈資料庫或單一發行集之發行集的臨界值,請分別指定 @publisher@publisher_db@publication。 請注意必須變更之任何臨界值的 Metric_id 值。 如需相關資訊,請參閱 Set Thresholds and Warnings in Replication Monitor

  2. 在散發資料庫的「散發者」端,執行 sp_replmonitorchangepublicationthreshold。 視需要指定下列項目:

    • 針對@metric_id,在步驟 1 中取得的Metric_id值。

    • @value監視閾值計量的新值。

    • 達到此閾值時要記錄警示之@shouldalert值為1,如果不需要警示,則為0

    • @mode的值為1,可啟用監視閾值計量或2的值來停用它。

Replication Management Objects (RMO)

若要監視訂閱者端合併式發行集的訂閱

  1. 使用 ServerConnection 類別建立與「訂閱者」的連接。

  2. 建立 MergeSubscriberMonitor 類別的執行個體、設定訂閱的 PublisherPublicationPublisherDBSubscriberDB 屬性,以及將 ConnectionContext 屬性設定為步驟 1 中所建立的 ServerConnection

  3. 呼叫下列其中一個方法,以傳回此訂閱的「合併代理程式」工作階段的相關資訊:

    • GetSessionsSummary - 傳回 MergeSessionSummary 物件的陣列,最多提供最後五個「合併代理程式」工作階段的相關資訊。 請注意感興趣之任何工作階段的 SessionId 值。

    • GetSessionsSummary - 傳回 MergeSessionSummary 物件,提供在經過的小時數期間 (如 hours 參數所指定) 所發生的「合併代理程式」工作階段的相關資訊 (最多達最後五個工作階段)。 請注意感興趣之任何工作階段的 SessionId 值。

    • GetLastSessionSummary - 傳回 MergeSessionSummary 物件,提供最後一個「合併代理程式」工作階段的相關資訊。 請注意此工作階段的 SessionId 值。

    • GetSessionsSummaryDataSet - 傳回 DataSet 物件,最多提供最後五個「合併代理程式」工作階段的相關資訊 (每個資料列顯示一個工作階段)。 請記下感興趣之任何工作階段的 Session_id 資料行值。

    • GetLastSessionSummaryDataRow - 傳回 DataRow 物件,提供最後一個「合併代理程式」工作階段的相關資訊。 請記下此工作階段的 Session_id 資料行值。

  4. (選擇性) 呼叫 RefreshSessionSummary ,以重新整理以 MergeSessionSummary 所傳遞之 mss, 物件的資料,或呼叫 RefreshSessionSummary ,以重新整理以 DataRow 所傳遞之 drRefresh

  5. 使用步驟 3 中取得的工作階段識別碼,呼叫下列其中一個方法來傳回有關特定工作階段詳細資料的資訊。

若要監視在散發者端所有發行集的複寫屬性

  1. 使用 ServerConnection 類別建立與散發者的連接。

  2. 建立 ReplicationMonitor 類別的執行個體。

  3. ConnectionContext 屬性設定為在步驟 1 中建立的 ServerConnection

  4. 呼叫 LoadProperties 方法以取得物件的屬性。

  5. 執行下列其中一或多個方法,以針對使用此散發者的所有發行者傳回複寫資訊。

若要監視在散發者端特定發行者的發行集屬性

  1. 使用 ServerConnection 類別建立與散發者的連接。

  2. 以下列其中一種方法取得 PublisherMonitor 物件。

  3. 執行下列其中一或多個方法,針對屬於此「發行者」的所有發行集傳回複寫資訊。

若要監視散發者端特定發行集的屬性

  1. 使用 ServerConnection 類別建立與散發者的連接。

  2. 以下列其中一種方法取得 PublicationMonitor 物件。

  3. 執行下列其中一或多個方法,傳回有關此發行集的詳細資訊。

若要監視在訂閱者端等候套用的交易式命令

  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 - 代表此臨界值是否應產生警示的整數。