共用方式為


使用複寫代理程式事件的警示

適用於:SQL Server

SQL Server Management Studio 和 Microsoft SQL Server Agent 提供使用警示來監視事件 (如複寫代理程式事件) 的方法。 SQL Server Agent 會監視 Windows 應用程式記錄檔中與警示相關的事件。 如果發生這類事件, SQL Server Agent 會藉由執行已經定義的工作,及 (或) 向指定操作員傳送電子郵件或呼叫器訊息,進行自動回應。 SQL Server 包含一組預先定義的複寫代理程式警示,您可以設定這類警示來執行工作和 (或) 通知操作員。 如需定義要執行之工作的詳細資訊,請參閱自動化回應警示一節。

當電腦設定為「散發者」時,會安裝下列警示:

訊息 ID 預先定義的警示 觸發警示的條件 msdb..sysreplicationalerts 輸入其他資訊
14150 複寫: 代理程式成功 代理程式成功關閉。
14151 複寫: 代理程式失敗 代理程式關閉時發生錯誤。
14152 複寫: 代理程式重試 代理程式於重試動作不成功之後關閉 (代理程式遇到錯誤,例如伺服器無法使用、鎖死、連線失敗、或逾時失敗)。
14157 複寫: 已卸除逾期的訂閱 已卸除逾期的訂閱。
20572 複寫:驗證失敗後重新初始化訂閱 回應作業「重新初始化資料驗證失敗的訂閱」成功重新初始化訂閱。
20574 複寫:訂閱者資料驗證失敗 散發或合併代理程式的資料驗證失敗。
20575 複寫:訂閱者已經通過資料驗證 散發或合併代理程式通過資料驗證。
20578 複寫: 代理程式自訂關閉 透過 sp_publication_validation 叫用資料驗證,且 @shutdown_agent 設定為 1 時,散發代理程式會在驗證完成之後關閉。 Yes
22815 點對點衝突偵測警示 散發代理程式在嘗試將變更套用到對等節點上時偵測到衝突。

除了這些警示外,複寫監視器還提供與狀態和效能相關的警告與警示集合。 如需相關資訊,請參閱 Set Thresholds and Warnings in Replication Monitor。 您也可以使用 SQL Server 警示基礎結構,為其他複寫事件定義警示。 如需詳細資訊,請參閱建立使用者定義的事件

若要設定預先定義的複寫警示

直接檢視應用程式記錄檔

若要檢視 Windows 應用程式記錄檔,請使用 Microsoft Windows 事件檢視器。 應用程式記錄檔包含 SQL Server 錯誤訊息,以及電腦上其他許多活動的訊息。 與 SQL Server 錯誤記錄檔不同,每次啟動 SQL Server 時不會建立新的應用程式記錄檔 (每個 SQL Server 工作階段都會將新的事件寫入現有的應用程式記錄檔),但您可以指定記錄事件的保留期限。 檢視 Windows 應用程式記錄檔時,您可以篩選特定事件的記錄檔。 如需詳細資訊,請參閱 Windows 文件集。

自動回應警示

複寫為資料驗證失敗的訂閱提供回應作業,還提供架構,可建立對警示的其他自動回應。 回應作業命名為 [重新初始化資料驗證失敗的訂閱],並儲存在 SQL Server Management Studio 中 SQL Server Agent 的 [作業] 資料夾中。 如需啟用此回應作業的詳細資訊,請參閱設定預先定義的複寫警示 (SQL Server Management Studio)。 如果交易式發行集中的發行項驗證失敗,回應作業只會重新初始化失敗的發行項。 如果合併式發行集中的發行項驗證失敗,回應作業將重新初始化發行集中的所有發行項。

自動回應架構

通常在觸發警示時,協助您了解造成警示原因和採取適當動作的唯一資訊,都包含在警示訊息中。 剖析此資訊可能較費時,並且很容易出錯。 複寫透過提供 sysreplicationalerts 系統資料表中警示的其他資訊,簡化了自動回應;提供的資訊已剖析成易於自訂程式使用的形式。

例如,如果「訂閱者 A」的 Sales.SalesOrderHeader 資料表資料驗證失敗,則 SQL Server 會觸發 20574 訊息,通知您驗證失敗。 您收到的訊息將會是:「訂閱者 'A' 訂閱的發行項 'SalesOrderHeader' (在發行集 'MyPublication' 中) 未通過資料驗證」。

如果您根據此訊息建立回應,必須手動從訊息中剖析「訂閱者」名稱、發行項名稱、發行集名稱及錯誤。 但由於「散發代理程式」和「合併代理程式」會將相同資訊寫入 sysreplicationalerts (包括代理程式類型、警示時間、發行集資料庫、「訂閱者」資料庫以及發行集類型等詳細資料),回應作業可從資料表中直接查詢相關資訊。 儘管實際資料列無法與警示的特定執行個體相關聯,但資料表含 status 資料行,該資料可用於追蹤已服務的項目。 在記錄保留期限內將保留此資料表中的項目。

例如,若要在處理警示訊息 20574 的 Transact-SQL 中建立回應作業,您可以會使用下列邏輯:

declare @publisher sysname, @publisher_db sysname, @publication sysname, @publication_type int, @article sysname, @subscriber sysname, @subscriber_db sysname, @alert_id int  
declare hc cursor local for select publisher, publisher_db, publication, publication_type, article, subscriber,   
  subscriber_db, alert_id from   
  msdb..sysreplicationalerts where  
  alert_error_code = 20574 and status = 0  
  for read only  
open hc  
fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id  
while (@@fetch_status <> -1)  
begin  
/* Do custom work  */  
/* Update status to 1, which means the alert has been serviced. This prevents subsequent runs of this job from doing this again */  
update msdb..sysreplicationalerts set status = 1 where alert_id = @alert_id  
 fetch hc into  @publisher, @publisher_db, @publication, @publication_type, @article, @subscriber, @subscriber_db, @alert_id  
end  
close hc  
deallocate hc