共用方式為


Notification Services 事件的原因和解決方案

更新: 2006 年 7 月 17 日

Notification Services 事件可分成四個種類:錯誤、警告、參考和詳細。您可以利用這些種類來設定 Notification Services 要將哪些事件類型寫入應用程式記錄檔中。如需有關如何設定事件記錄的詳細資訊,請參閱<設定 Notification Services 事件記錄>。

事件類型

下表依照事件檢視器所顯示來提供事件識別碼範圍、每個範圍中的事件描述,以及事件類型:

事件識別碼範圍 描述 事件類型

0 - 9999

擴充預存程序以外之所有來源的錯誤

錯誤

10000 - 19999

所有來源的警告

警告

20000 - 29999

所有來源的資訊

資訊

30000 - 39999

所有來源的詳細資訊

資訊

如果您在使用記錄監視應用程式,您應該監視 0 - 19999 範圍中的錯誤和警告。參考事件的監視比較不重要,通常是為了追蹤特定活動 (如啟動和停止服務),才會執行這個動作。

ms164113.note(zh-tw,SQL.90).gif附註:
請利用唯一事件識別碼來監視事件。請勿針對特定文字來剖析事件描述,因為文字可能會基於地區設定而有所改變,在未來的 Notification Services 版本中也可能會改變。

事件的原因和解決方案

下列清單包含 Notification Services 使用者最常遭遇之事件,以及這些事件的可能解決方案。

事件編號 訊息、原因和解決方案

1006

嘗試開啟要求的資料庫失敗。

原因

此錯誤對應到 SQL Server 錯誤 4060。此錯誤指出目前的使用者權限不足,不能登入指定的資料庫。

此錯誤的事件記錄項目包含導致該事件之 SQL Server 錯誤的描述。此描述與下列類似:

    無法開啟在登入 'database_name' 中所要求的資料庫。登入失敗。

解決方案

檢查 Notification Services 所使用的帳戶是否擁有錯誤訊息所指出之資料庫的 SQL Server 登入帳戶和權限。如需詳細資訊,請參閱<為 Notification Services 的執行個體設定 SQL Server 權限>。

1008

指定的定序名稱無效。請參閱《SQL Server 線上叢書》中的有效名稱。

原因

此錯誤對應到 SQL Server 錯誤 448。此錯誤指出指定的定序名稱 (通常是在應用程式定義中) 無效。

此錯誤的事件記錄項目包含導致該事件之 SQL Server 錯誤的描述。此描述與下列類似:

    無效的定序 'collation_name'。

解決方案

在應用程式定義中有數個位置可以指定定序。請搜尋事件記錄項目中所指出的 collation_name 資訊,然後使用有效的定序名稱加以取代。如需有關排序定序的詳細資訊,請參閱<COLLATE (Transact-SQL)>。

1009

逾時期間在 Transact-SQL 陳述式完成之前即耗盡。

原因

當查詢或預存程序未在指定的逾時期間內完成時,就會發生這個錯誤。通常會指出 SQL Server 太忙碌。如果事件規則或訂閱規則的執行超過應用程式定義所指定的逾時期間,就會傳回不同的錯誤訊息。

此錯誤的事件記錄項目包含導致該事件之實際錯誤的描述。

解決方案

檢查事件記錄項目是否具有關於逾時之動作的詳細資訊。

如果失敗的原因是移除 (Vacuuming),則可能需要移除過期的事件和通知。如需詳細資訊,請參閱<移除過時的應用程式資料>。

Notification Services 對許多作業都使用 30 秒的逾時值。如果可能,請減少受影響動作的處理,使動作能在 30 秒內完成。

1010

在主執行個體資料庫和應用程式資料庫之間發生定序不符的情況。

原因

此錯誤對應到 SQL Server 錯誤 446。此錯誤是指定作業被授予定序不符的物件而造成。

此錯誤的事件記錄項目包含導致該事件之實際錯誤的描述。此描述與下列類似:

無法解決 operation_name 作業的定序衝突。

解決方案

從事件記錄項目判斷失敗的作業,並確定指定作業的引數具有相符的定序。例如,如果相同的資料表中有兩個分別使用希臘文和拉丁文定序的資料行,則類似下列的 WHERE 子句會導致此錯誤:

    WHERE GreekCol = LatinCol

導致的錯誤具有下列的額外描述:

    無法解決等於作業的定序衝突。

必須解決此錯誤中指出的問題,系統才能正常運作。

如需詳細資訊,請參閱<COLLATE (Transact-SQL)>。

1011

嘗試登入 SQL Server 失敗。

原因

此錯誤對應到 SQL Server 錯誤 18456。此錯誤指出指定的使用者沒有適當的登入權限。

此錯誤的事件記錄項目包含觸發該事件之 SQL Server 錯誤的描述。此描述與下列類似:

使用者 user_name 的登入失敗。

解決方案

檢查錯誤訊息中指出的使用者名稱具有適當的權限。

如需詳細資訊,請參閱<解析常見 Notification Services 問題>。

2009

Notification Services 無法具現化事件提供者。

原因

Notification Services 無法建立事件提供者的執行個體。如果自訂事件提供者不是使用 .NET Framework 2.0.50727 版所建立,就可能發生這個錯誤。當 Notification Services 和自訂元件是使用不同版本的 .NET Framework 時,類別庫中的差異可能會導致應用程式錯誤。

解決方案

如果可能,請使用 .NET Framework 2.0.50727 版建置自訂元件。如果必須使用 .NET Framework 的其他組建建置自訂元件,則可以強制 Notification Services 使用相同的版本。若要執行這項作業,請將 <startup> 節點新增至 NSService.exe.config 檔案。這個檔案位於 Notification Services 的 vN.N.N.N\Bin 資料夾中。下列範例顯示了 <startup> 節點:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<startup>

<supportedRuntime version="v2.1"/>

<supportedRuntime version="v2.0.50727"/>

</startup>

...

<supportedRuntime> 元素限制 Notification Services 可以使用的 .NET Framework 版本。列出的版本順序決定 Notification Services 嘗試載入 .NET Framework 版本的順序。在前面的範例中,Notification Services 會先嘗試載入 .NET Framework 2.1 版。如果無法使用,Notification Services 會嘗試載入 .NET Framework 2.0.50727 版。請注意 2.1 版不是真正的版本號碼,而只是用來說明的範例。

您必須重新啟動 Notification Services 的執行個體,以套用對 NSService.exe.config 所做的變更。

2023

在指定的組件中找不到指定的事件提供者類別名稱。請確定應用程式定義中的類別名稱和組件名稱正確。

原因

當提供者主機因為應用程式定義的提供者設定所指定的組件不包含指定的事件提供者類別,而無法啟動事件提供者時,就會發生這個錯誤。如果發生這個錯誤,事件提供者就無法執行。

Notification Services 藉由載入應用程式定義的 AssemblyName 屬性所指定的組件,然後建立 ClassName 屬性所指定之類別的物件來建立事件提供者的執行個體。此錯誤指出 Notification Services 無法從指定的 DLL 建立類別名稱的執行個體。最常見的情況是,錯誤的 DLL 是由 AssemblyName 屬性所指定,或者錯誤的類別是由 ClassName 屬性所指定。

此錯誤的事件記錄項目包含所擲出之例外狀況的描述。

解決方案

首先,請確定正確指定了 ClassName 和 AssemblyName 屬性。如果進行了變更,請更新 Notification Services 應用程式,然後再啟用事件。提供者主機接著會嘗試重新啟動事件提供者。如果在更新期間服務停止,提供者主機就會在服務重新啟動時,嘗試重新啟動事件提供者。

4012

存在包括當前時間的已完成配量。

原因

在正常的作業中,Notification Services 處理的時間間隔應該發生在過去。當裝載資料庫之伺服器上的系統時鐘已經變更時,最可能發生這個錯誤。

解決方案

將資料庫系統上的時鐘重設為正確的時間。

6007

無法載入包含傳遞通訊協定的組件。

原因

當散發者無法載入指定給自訂傳遞通訊協定的組件時,就會發生這個錯誤。

解決方案

在執行個體的組態中檢查 Protocols 屬性,以確定指定給自訂通訊協定的組件名稱正確無誤。組件名稱必須包含完整路徑。例如,如果組件稱為 myprotocol.dll 且位於 C:\bin\CustomComponents 目錄中,則必須將組件名稱指定為 C:\bin\CustomComponents\myprotocol.dll。

您指定的組件名稱必須指向有效的 Managed 程式碼組件。您可以嘗試在 ildasm.exe 工具中開啟檔案,以確認該檔案是否為 Managed 程式碼組件 (Microsoft .NET Framework SDK 中有提供此工具)。

9028

組件版本不符合資料庫版本。

原因

當 Notification Services 不符合執行個體資料庫中所儲存的版本時,就會發生這個事件。

Notification Services 需要服務可執行檔 (NSService.exe) 版本符合上次修改 (建立、更新或升級) 的資料庫版本。事件記錄項目包含 AssemblyVersion (也就是服務可執行檔的版本),以及 DatabaseVersion。

解決方案

這種情況有三種可能的解決方案:

  • 執行符合執行個體資料庫版本的服務可執行檔版本。
  • 將執行個體資料庫升級為可執行檔的版本。如需詳細資訊,請參閱<移轉 Notification Services 執行個體>。
  • 重新建立執行個體資料庫。應該將此視為最後的手段,因為執行個體中的所有資訊都會遺失。

9041

資料庫是由不同的 Notification Services 版本建立或升級。請使用該資料庫需要的 Notification Services 版本。

原因

當 Notification Services 的版本 (例如 Standard 或 Enterprise) 不符合儲存在執行個體資料庫中的版本時,就會發生這個事件。

Notification Services 需要服務可執行檔案 (NSService.exe) 的版本符合執行個體資料庫中的版本。事件記錄項目的主體包含 Notification Services 版本 (服務可執行檔的版本) 以及資料庫版本。這些值都必須相同。

解決方案

這種情況有三種可能的解決方案:

  • 如果 NSService.exe 檔案的版本符合執行個體資料庫的版本,請執行 NSService.exe。
  • 如果執行個體資料庫的版本早於 NSService.exe 檔案的版本,請將執行個體資料庫升級為可執行檔的版本。如需詳細資訊,請參閱<移轉 Notification Services 執行個體>。
  • 最後的手段是重新建立執行個體資料庫。請注意,這個動作會移除執行個體中的所有資訊。

16001

因為在傳遞通道上有太多連續的失敗,所以停止工作項目的處理。

原因

當散發者因為發生太多連續的傳遞失敗而放棄處理工作項目時,就會發生這個警告。這通常代表傳遞通道發生某種延長的失敗狀況。

解決方案

請檢查個別通知的傳遞狀態以判斷失敗的本質,並決定要採取什麼動作以更正此狀況。

您可以控制散發者放棄工作項目之前,必須發生的連續傳遞失敗次數。若要這麼做,可以針對通知類別所支援的每個通訊協定,在應用程式定義的 ProtocolExecutionSettings 區段中指定 FailuresBeforeAbort 設定的值。如果沒有提供這個屬性的值,則會使用預設值 20。

4093 - 4099

無法更新效能計數器。

原因

Notification Services 無法更新效能計數器。Notification Services 會在下一個配量間隔嘗試更新計數器。

如果這個錯誤發生了數次,很可能是因為 Notification Services 效能計數器已損毀,而且在損毀狀況解決之前都無法更新。損毀之所以發生的可能原因有數種,包括登錄中有損毀的項目,以及其他的效能監視器 DLL 中發生問題。

解決方案

如果不需要更新 Windows 效能計數器,則可以安全無虞地忽略此項警告。如需建議的解決方案和其他資訊,請參閱<解決損毀的 Notification Services 效能計數器>(英文) 知識庫文件。

請參閱

工作

檢視 Notification Services 事件

概念

Notification Services 事件格式

其他資源

Notification Services 錯誤和事件
使用事件訊息

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

變更的內容:
  • 新增最常見的事件訊息及其解決方案的清單。