SQL Server Management Studio 和 Microsoft SQL Server Agent 可讓您使用警示來監視事件,例如復寫代理程式事件。 SQL Server Agent 會監視 Windows 應用程式記錄檔中與警示相關聯的事件。 如果發生這類事件,SQL Server Agent 會執行您已定義的工作,並/或傳送電子郵件或呼叫器訊息給指定的作員,以自動回應。 SQL Server 包含一組預先定義的複寫代理程式警示,您可以設定為執行工作和/或通知作員。 如需了解定義執行工作的更多資訊,請參閱本主題中「自動化警報回應」一節。
當計算機設定為散發者時,會安裝下列警示:
| 訊息識別碼 | 預先定義的警示 | 引發警報的條件 | 在 msdb..sysreplicationalerts 中輸入其他資訊。 |
|---|---|---|---|
| 14150 | 複寫:代理程式成功 | 代理程式已成功關閉。 | 是的 |
| 14151 | 複寫:代理程序失敗 | 代理程式會關閉並且發生錯誤。 | 是的 |
| 14152 | 複寫:代理程式重試 | 代理程式在重試作業失敗后關閉 (代理程序發生錯誤,例如伺服器無法使用、死結、連線失敗或逾時失敗)。 | 是的 |
| 14157 | 複寫:已卸除過期的訂用帳戶 | 已取消過期的訂閱。 | 否 |
| 20572 | 複寫:驗證失敗后重新初始化的訂用帳戶 | 回應作業「在數據驗證失敗時重新初始化訂用帳戶」會成功重新初始化訂閱。 | 否 |
| 20574 | 複寫:訂閱者數據驗證失敗 | 分發或合併代理程式的資料驗證失敗。 | 是的 |
| 20575 | 複寫:訂閱者已通過數據驗證 | 分發代理程式或合併代理程式通過資料驗證。 | 是的 |
| 20578 | 複寫:代理程式自定義關機 | ||
| 22815 | 點對點衝突偵測警示 | 散發代理程式在嘗試在點對點節點套用變更時偵測到衝突。 | 是的 |
除了這些警示之外,復寫監視器還提供一組與狀態和效能相關的警告和警示。 如需詳細資訊,請參閱 在復寫監視器警示基礎結構中設定臨界值和警告 。 如需詳細資訊,請參閱 建立 User-Defined 事件。
設定預先定義的復寫警示
- SQL Server Management Studio: 設定預先定義的復寫警示 (SQL Server Management Studio)
直接檢視應用程式記錄檔
若要檢視 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' 在出版物 'MyPublication' 中訂閱的文章 'SalesOrderHeader' 數據驗證失敗。」
如果您根據訊息建立回應,您必須從訊息手動剖析訂閱者名稱、發行項名稱、發行集名稱和錯誤。 不過,因為散發代理程式和合併代理程式會將相同的資訊寫入 sysreplicationalerts (以及代理程式類型、警示時間、發行集資料庫、訂閱者資料庫和發行集類型等詳細數據),因此響應作業可以直接從數據表查詢相關信息。 雖然確切的數據列無法與警示的特定實例相關聯,但數據表具有 狀態 數據行,可用來追蹤服務專案。 此表中的項目會在歷史保留期間內保留。
例如,如果您要在服務警示訊息 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