共用方式為


解析常見 Notification Services 問題

Microsoft 已將 Notification Services 使用者遇到的問題及解決方案彙編為下列清單。

ms172473.note(zh-tw,SQL.90).gif重要事項:
對 Notification Services 應用程式進行疑難排解時,請先查看 Windows 事件檢視器中的應用程式記錄檔。應用程式記錄檔中的事件通常是應用程式問題來源的最佳判斷方式。

部署及管理疑難排解

建立執行個體因逾時錯誤而失敗

建立 Notification Services 執行個體的處理序會執行數個工作,每個工作都有時間限制。資料庫建立處理序比其他作業需要更長的時間,這個作業的時間限制為 10 分鐘,遠比一般時間來得多。然而,如果執行個體組態或應用程式定義指定非常大的資料庫大小 (數 GB),建立處理序可能會逾時;這個情況如果發生,會顯示逾時訊息。

若要順利建立執行個體,必須在 ADF 及組態檔中縮減資料庫檔案大小,再重新建立執行個體。接著您可以使用 SQL Server Management Studio 或 Transact-SQL 陳述式來增加資料庫檔案大小。

建立執行個體因交易記錄已滿而失敗

如果您加入的記錄已滿或幾乎已滿,建立 Notification Services 執行個體可能會失敗。請增加交易記錄的 sizemaxsize 值,然後再試一次。

更新執行個體失敗

更新 Notification Services 執行個體可能會因為應用程式定義或執行個體組態中的錯誤而失敗。更新執行個體之前,您應該先驗證所有 XML 檔案來減少這個錯誤發生的可能性。如果發生錯誤,請修復檔案,再嘗試重新執行更新。

因為更新執行個體會修改執行個體和應用程式資料庫,在更新執行個體前請一律備份執行個體和應用程式資料庫。

如需有關更新執行個體的詳細資訊,請參閱<更新執行個體內容>。如需有關更新應用程式的詳細資訊,請參閱<更新應用程式>。

Windows 服務無法啟動

如果使用 NS$<instanceName> Windows 服務來執行 Notification Services 引擎元件,而 Windows 服務未啟動,表示服務密碼可能不正確、嘗試啟動的執行個體名稱可能不完全符合 Notification Services 執行個體名稱、資料庫可能無法存取,或者設定服務執行所用的 Windows 使用者帳戶可能沒有登入為服務的權限。請嘗試下列步驟來解決問題:

  • 驗證此服務帳戶是 Windows 中 SQLServer2005NotificationServicesUser$<ComputerName> **群組的成員。**SQLServer2005NotificationServicesUser$<ComputerName> 群組的成員,具有讀取和執行 Notification Services 二進位檔 (包括 NSService.exe) 的權限。
  • **重設 Windows 密碼。**當您使用 Notification Services 命令來設定服務密碼,而密碼中包含有特殊字元或輸入錯誤,NS$<instanceName> 服務就會無法啟動。
    若要解決這個錯誤,請使用服務應用程式來更新密碼:
    1. 請開啟 [控制台] 的 [系統管理工具]
    2. 開啟 [服務]
    3. NS$<instanceName> 服務上按一下滑鼠右鍵 (<instanceName> 表示 Notification Services 執行個體的名稱),再按一下 [屬性]
    4. 按一下 [登入] 索引標籤,在 [密碼][確認密碼] 文字方塊中輸入密碼。 按一下 [確定]。
    5. 在服務上按一下滑鼠右鍵,再按一下 [啟動]
  • 檢查資料庫。 如果服務無法存取執行個體和應用程式資料庫,則無法啟動。
    • 執行個體登錄中的資料庫名稱是否正確?
    • 主控執行個體和應用程式資料庫的 Database Engine 執行個體是否正在執行中?
    • 執行個體和應用程式資料庫是否可用?
    • 是否有任何防止服務存取資料庫的網路問題?
  • 從 [服務] 應用程式啟動服務。 當使用 net start 命令來啟動服務時,在命令提示字元所使用的字元必須符合組態檔中所用的 Unicode 字元。如果字元不符,即無法啟動執行個體。
    若要解決這個錯誤,請使用 Windows 服務應用程式來啟動服務:
    1. 請開啟 [控制台] 的 [系統管理工具]
    2. 開啟 [服務]
    3. NS$<instanceName> 服務上按一下滑鼠右鍵,再按一下 [啟動]

錯誤未寫入應用程式記錄檔中

如果 Notification Services 引擎無法啟動,但應用程式記錄檔中沒有指出原因的錯誤存在,則表示應用程式記錄檔可能已滿。若要重新設定應用程式記錄檔,請執行下列步驟:

  1. 請開啟 [控制台] 的 [系統管理工具]
  2. 開啟 [事件檢視器]
  3. [應用程式] 上按一下滑鼠右鍵,再按一下 [屬性]
  4. 執行下列其中一個或兩個項目:
    • 增加 [最大記錄大小] 的值。
    • 選取 [視需要覆寫事件]

非預期的錯誤出現在應用程式記錄檔中

如果應用程式記錄檔中收到非預期的錯誤,請嘗試重新啟動 Notification Services 引擎。

例如,如果您在 Windows 服務執行中時,從執行個體移除應用程式,則在已移除之應用程式的事件記錄檔中就會顯示錯誤;重新啟動 Windows 服務應能使這類錯誤不再出現。

如需詳細資訊,請參閱<啟動與停止 Notification Services 的執行個體>。

事件收集疑難排解

我無法提交事件到應用程式

對事件收集進行疑難排解時,請確認下列項目:

  • 如果使用主控的事件提供者,請確認執行事件提供者的 Notification Services 引擎正在執行。
  • 確定事件收集已啟用。您可以正在執行 nscontrol status 命令來迅速檢視執行個體元件的狀態。如果事件是在「已停用」或「啟用暫止」狀態,就無法提交事件。
    如需有關檢視狀態的詳細資訊,請參閱<檢視執行個體、應用程式與元件的狀態>。
    如需有關啟用和停用元件的詳細資訊,請參閱<啟用與停用執行個體、應用程式或元件>。
  • 確認用來執行事件提供者的帳戶具有執行個體和應用程式資料庫中的 NSEventProvider 權限。

檔案系統監看員事件提供者失敗

如果伺服器上的效能計數器損毀,檔案系統監看員事件提供者可能會失敗。如果事件記錄檔中收到下列錯誤,表示效能計數器已損毀:

事件識別碼:2980

如果效能計數器損毀,計數器就不會傳回值。若要嘗試解決損毀情況,請執行下列步驟:

  1. 如果執行個體正在執行,請停止執行個體。如需詳細資訊,請參閱<啟動與停止 Notification Services 的執行個體>。
  2. 關閉查詢 Notification Services 效能計數器的任何應用程式,例如系統監視器。
  3. 重新註冊執行個體。如需詳細資訊,請參閱<更新註冊資訊>。

如此可重新建立執行個體的效能計數器。您可能需要多次執行這些步驟。

通知產生和傳遞疑難排解

產生了重複的通知

如果訂閱者收到重複的通知,請確認收集和使用事件的方法:

  • 請確認通知產生規則不是直接存取通知資料表,而是應該存取以通知類別命名的檢視。檢視只會傳回目前的事件組,而通知資料表則包含尚未移除的所有事件。
    例如,如果事件類別的名稱是 StockEvent,請在訂閱規則中使用 StockEvent 檢視,而不要使用 NSStockEventEvents 資料表。
  • 如果您是從其他來源 (如事件紀事輯或外部資料表) 取得事件,查詢包含的邏輯必須只選取您想要用以建立通知的資料。例如,您可能會包括前 24 小時內提交的事件或資料行中具有特定值的事件。訂閱規則中的陳述式可以修改事件來源中的值,讓您追蹤事件的使用。
  • 確認您沒有多次提交相同的事件資料。

如需有關撰寫訂閱規則的詳細資訊,請參閱<定義訂閱規則>。

通知未產生或傳遞

如果無法從應用程式傳遞通知,請檢查下列項目:

  • 執行產生器元件的 Notification Services 引擎是否正在執行?是否已啟用?
  • 是否有可用的事件?
    執行執行個體資料庫中的 NSDiagnosticEventClass 預存程序。查看 EventBatchesCollectedCount 資料行,了解事件是否在預期時間到達。
  • 有任何訂閱嗎?
    使用應用程式資料庫中的 NSSubscriptionClassNameView 檢視來確認應用程式有訂閱可供評估。
  • 已排程的訂閱是否已正確排程?
    使用應用程式資料庫中的 NSSubscriptionClassNameView 檢視或執行應用程式資料庫中的 NSScheduledSubscriptionListNSScheduledSubscriptionDetails 預存程序來檢視訂閱詳細資料。
  • 通知中參考的訂閱者裝置是否存在?
    您必須在訂閱規則中提供訂閱者識別碼和訂閱者裝置名稱。訂閱者裝置名稱必須符合為訂閱者定義的訂閱者裝置名稱。若要檢視訂閱者裝置,請使用執行個體資料庫中的 NSSubscriberDeviceView
  • 規則是否逾時?
    如果產生通知的訂閱規則逾時,應用程式將不會產生通知。確認規則是有效率的、對事件和訂閱資料定義了適當的索引、正在執行移除以移除舊資料,以及規則沒有被伺服器上執行的其他處理序封鎖。如需有關開發訂閱規則的詳細資訊,請參閱<定義訂閱規則>。
  • 是否有產生通知?
    執行執行個體資料庫中的 NSDiagnosticNotificationClass 預存程序,來確認通知正在產生中。查看 NotificationsGenerated 資料行中您所預期產生通知的間隔。如果沒有通知,可能是沒有事件或訂閱,也可能是訂閱類別對應規則未將任何通知插入通知類別函數中。如需有關規則的詳細資訊,請參閱<定義訂閱規則>。
  • 通知是否失敗?
    執行 NSDiagnosticFailedNotifications 預存程序,以檢查是否有失敗的通知。
  • 通知是否傳往正確的傳遞通道?
    確認應用程式為通知類別定義了正確的通訊協定,並確認新增至應用程式的訂閱是使用正確的傳遞通道。
  • 傳遞通道是否運作正常?
    執行 NSDiagnosticDeliveryChannel 報表,以了解傳遞通道是否可以作業。
  • 是否已啟用散發者?
    如需有關啟用和停用元件的詳細資訊,請參閱<啟用與停用執行個體、應用程式或元件>。

發生一般傳遞錯誤

有些傳遞錯誤實際上可能是組態錯誤。例如,如果 SMTP 傳遞通道設定錯誤,當 Notification Services 嘗試使用傳遞通道來傳遞通知時,您可能會收到類似下列訊息:

SMTP 傳遞通知一般錯誤

如果收到數個類似這樣的錯誤,請確認傳遞通道是否設定正確。如需詳細資訊,請參閱<定義傳遞通道>。

SMTP 傳遞失敗

搭配本機 IIS SMTP 服務使用 Internet Information Services (IIS) SMTP 通訊協定時,Notification Services 必須在 IIS 目錄中搜尋,以判定將通知傳遞到何處。只有管理員可以存取這個資訊。

若要使用本機 IIS SMTP 服務,用來執行散發者引擎元件的帳戶必須是本機管理員群組的成員。

散發者逾時

如果您在記錄檔中收到各種逾時錯誤,表示散發者的記錄層級可能過高。通常只有當資料庫系統正在處理大量的通知而無法同時處理散發和記錄工作時,才會發生這個情形。

若要解決問題,請關閉記錄。如需詳細資訊,請參閱<指定傳遞通訊協定執行設定>。

Vacuumer 疑難排解

資料未移除,導致事件和通知資料表變大

如果資料未如預期從應用程式資料庫中移除,請檢查下列項目:

  • 您的應用程式定義有提供 Vacuuming 排程嗎?如需詳細資訊,請參閱<設定資料移除>。
  • 您有指定合理的保留時間嗎?(保留時間愈長,資料表中累積的資料愈多。)
  • Vacuuming 是在低系統活動量期間執行嗎?如果不是,則 Vacuuming 可能沒有足夠的系統資源能有效率地移除資料:
    請注意,啟動時間是 UTC 值。例如,如果您指定 02:00:00 的值作為啟動時間,這是 2:00 A.M. 格林威治時間。若要指定您時區中 2:00 A.M. 的時間,請加上或減去您時區和格林威治時間之間的時差。例如,太平洋時間晚格林威治時間 8 小時。若要在太平洋時間 2:00 A.M. 執行移除,請指定 10:00:00 的啟動時間。
  • Vacuuming 持續期間是否足夠?您可能需要較長的時間來執行 Vacuuming (視資料量而定)。

若要評估移除效能,請使用下列資源:

Web 應用程式疑難排解

我的訂閱管理應用程式無法存取 Notification Services 執行個體

您的訂閱管理應用程式必須能夠找出並存取執行個體和應用程式資料庫。這需要在應用程式執行所在的伺服器上註冊執行個體,並將應用程式所用帳戶加入執行個體和應用程式資料庫中的 NSSubscriberAdmin 角色中。如需詳細資訊,請參閱<部署訂閱管理介面>。

請參閱

工作

關於 Notification Services 的常見問題集
設定 Notification Services 事件記錄
使用事件訊息

說明及資訊

取得 SQL Server 2005 協助