我們有幾個遠程位置,我們已經設置了SQL Server 2005複製。有時出版商無法由於像當複製發佈程序無法連接到訂閱系統時,SQL Server如何通過電子郵件發送錯誤消息
1)網絡問題複製各種原因,用戶的
2)不當停機,
3)在域密碼的變化,
4)變化在SQL密碼中,
5)無法打開用戶系統。
有沒有什麼辦法可以讓SQL服務器在發生這種情況時向管理員發送一封電子郵件,以便他可以檢查?
謝謝, 澤。
我們有幾個遠程位置,我們已經設置了SQL Server 2005複製。有時出版商無法由於像當複製發佈程序無法連接到訂閱系統時,SQL Server如何通過電子郵件發送錯誤消息
1)網絡問題複製各種原因,用戶的
2)不當停機,
3)在域密碼的變化,
4)變化在SQL密碼中,
5)無法打開用戶系統。
有沒有什麼辦法可以讓SQL服務器在發生這種情況時向管理員發送一封電子郵件,以便他可以檢查?
謝謝, 澤。
我通常處理這個問題的方法是修改負責啓動/運行復制代理的Sql Agent作業(取決於您的複製拓撲結構,您將在可能不同的位置有各種各樣的代理) 。只要在該步驟完成/失敗時執行「運行代理」步驟後執行,只需將作業步驟添加到適當的代理作業(即日誌讀取器代理,分發代理,合併代理,隊列代理等)取決於你是否使用連續的時間表)。
例如,如果我有事務性單向推送發佈設置,分發代理將在分發服務器上運行。如果我連接到分銷商並找到負責運行此發佈的分發代理的Sql Agent作業,那麼我可以修改該作業並添加一個步驟,以便在「運行代理」步驟失敗/完成時向特定組發送電子郵件。如果我正在使用連續複製計劃,則只需在「運行代理」步驟完成時添加該步驟以發送電子郵件(因爲如果代理由於任何原因而停止,我想要收到通知)。如果我使用的是不連續的日程安排,則可能只會在「運行代理」步驟失敗時才運行電子郵件步驟。您甚至可以配置此「電子郵件」步驟以發送電子郵件,暫停一會,然後嘗試自動重新啓動代理程序(通過簡單地將步驟配置爲「成功進入步驟1」)。
這是一個屏幕鏡頭描繪的工作是什麼樣子的配置爲我勾勒上述代理經銷:
distribution agent configured with notify, pause, restart step http://i45.tinypic.com/2zs4aw9.jpg
你會在上面我已經加入了一個名爲「通知,暫停步驟的PIC注意到,重試「這將在代理程序停止時執行(成功或失敗 - 這是故意的,因爲我使用的是連續複製計劃,只是想知道分發代理程序何時未運行原因)。這一步主要是發送一封電子郵件到特定的組,等待一兩分鐘,然後再次啓動代理。您可以添加代碼以執行任何您喜歡的操作,包括日誌記錄,在特定時間段內僅重新啓動特定次數等。它可以輕鬆編寫腳本並可重複用於任意數量的代理,發佈等。(我有腳本以確保任何新的任何拓撲結構中的複製代理都包含這種類型的配置 - 然後根據您在環境中部署的方式,將它們添加到發佈工具或安排執行的過程簡單。
我對複製沒有太多瞭解,但sp_readerrorlog是一個非常有用的存儲過程,允許您從數據庫實例中訪問數據庫日誌。如果需要,它可能允許您根據特定的錯誤消息做出更恰當的響應,而不僅僅是來自代理作業的成功/失敗分支。您當然也可以直接從存儲的proc發送電子郵件,根據誰可以對錯誤做出最好的響應(例如,白天/夜間班次協調員)來自定義收件人。
也許如果工作成功而不是失敗,發送電子郵件會更合適,考慮到您的潛在故障包括網絡斷開連接?您可能希望在您的最後設置一個交換規則來監視此收件箱,並在您的管理員沒有收到預期的成功消息時向您的管理員發出錯誤通知....人類非常擅長過濾不斷刺激以及缺乏一條成功的消息很容易被忽略。另一方面交易總是(通常)保持警惕。
至於檢測代理問題,您想知道何時停止日誌讀取器和分配器。我也是像chadhoc一樣的連續複製,但我發現使用Alert來告訴我代理是否停止更容易。
USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert
@name=N'Distribution agent stopped',
@message_id=0,
@severity=0,
@enabled=1,
@delay_between_responses=2160,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@performance_condition=N'MSSQL$MYDATABASE:Replication Agents|Running|Distribution|=|0',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_update_notification
@alert_name=N'Distribution agent stopped',
@operator_name=N'Amit',
@notification_method = 1
驗證/同步錯誤不是很容易檢測。您可以設置每晚作業以運行sp_publication_validation並在「驗證失敗」上設置另一個警報。
請分別使用「sql-server-2005」標籤代替「sql」,「server」和「2005」 - 謝謝! – 2009-12-01 14:35:28