Notification Services 事件的原因和解决方法

更新日期: 2006 年 7 月 17 日

Notification Services 事件分为四种类别:错误、警告、信息和详细。使用这些类别配置 Notification Services 写入到应用程序日志的事件类型。有关如何配置事件日志记录的详细信息,请参阅配置 Notification Services 事件日志记录

事件类型

下表显示事件 ID 的范围、每个范围内的事件描述以及显示在事件查看器中的事件类型。

事件 ID 范围 说明 事件类型

0 - 9999

来自除扩展存储过程以外的所有源的错误

错误

10000 - 19999

来自所有源的警告

警告

20000 - 29999

来自所有源的信息

信息

30000 - 39999

来自所有源的详细信息

信息

如果使用日志监视应用程序,应该监视 0 - 19999 范围内的错误和警告。监视信息事件不太重要,它通常用于跟踪特定的活动,如启动和停止服务。

ms164113.note(zh-cn,SQL.90).gif注意:
用唯一的事件 ID 监视事件。请不要分析特定文本的事件描述,因为此文本可能会根据区域设置或在将来的 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 太忙。如果执行事件规则或订阅规则时超出应用程序定义中指定的超时期限,则会返回不同的错误消息。

此错误的事件日志项中包含导致该错误的实际错误的描述。

解决方法

检查事件日志项,了解有关超时操作的详细信息。

如果是由于删除操作导致失败,则可能需要删除过期的事件和通知。有关详细信息,请参阅删除过时的应用程序数据

Notification Services 对许多操作使用 30 秒的超时值。请尽量减少对受影响操作的处理,以便该操作可以在 30 秒内完成。

1010

主实例数据库与应用程序数据库之间的排序规则不匹配。

原因

此错误映射到 SQL Server 错误 446。此错误表明使用了不匹配的排序规则为指定的操作赋予对象。

此错误的事件日志项中包含导致该错误的实际错误的描述。该描述如下所示:

无法解决 operation_name 操作的排序规则冲突。

解决方法

根据事件日志项确定失败的操作,并确保指定操作的参数具有匹配的排序规则。例如,如果同一表中有两列的排序规则分别为 Greek 和 Latin,则类似于下面的 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 使用相同的版本。为此,请在 NSService.exe.config 文件中添加一个 <startup> 节点。该文件位于 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

在给定的程序集内找不到指定的事件提供程序类名。确保应用程序定义中的类名和程序集名称正确。

原因

如果由于应用程序定义的 Providers 设置中指定的程序集不包含指定的事件提供程序类,而导致提供程序宿主未启动事件提供程序,则会发生此错误。发生此错误时,事件提供程序将不再运行。

Notification Services 首先加载应用程序定义中 AssemblyName 属性指定的程序集,然后创建 ClassName 属性中指定类型的对象,从而创建事件提供程序的实例。此错误表明 Notification Services 无法通过给定的 DLL 创建类名实例。这通常是因为 AssemblyName 属性指定了错误的 DLL 或者 ClassName 属性指定了错误的类。

此错误的事件日志项中包含对所引发异常的描述。

解决方法

首先,确保正确指定了 ClassName 和 AssemblyName 属性。如果进行了更改,请更新 Notification Services 应用程序,然后启用事件。提供程序宿主之后将尝试重新启动事件提供程序。如果在更新期间服务停止,则提供程序宿主将在服务重新启动后尝试重新启动事件提供程序。

4012

存在已完成的量程,该量程包括当前实际时间。

原因

在正常操作中,Notification Services 处理的时间间隔应当发生在过去。如果承载数据库的服务器系统时钟发生了变化,则很有可能发生此错误。

解决方法

将数据库系统上的时钟重置为正确的时间。

6007

无法加载包含传递协议的程序集。

原因

当分发服务器无法加载为自定义传递协议指定的程序集时会发生此错误。

解决方法

在实例配置中,检查“协议”属性,确保为自定义协议指定的程序集名称是正确的。程序集名称必须包含完整路径。例如,如果程序集名为 myprotocol.dll 并且位于 C:\bin\CustomComponents 目录,则必须将程序集名称指定为 C:\bin\CustomComponents\myprotocol.dll。

指定的程序集名称必须指向有效的托管代码程序集。可以使用 Microsoft .NET Framework SDK 中的 ildasm.exe 工具尝试打开该文件,验证它是否为托管代码程序集。

9028

程序集版本与数据库版本不匹配。

原因

当 Notification Services 的版本与实例数据库中存储的版本不匹配时会发生此错误。

Notification Services 要求服务可执行文件 (NSService.exe) 的版本必须与最后修改(创建、更新或升级)的数据库版本相匹配。事件日志项包含 AssemblyVersion(服务可执行文件的版本)和 DatabaseVersion。

解决方法

此种情况有三种可能的解决方法:

  • 运行与实例数据库版本相匹配的服务可执行文件版本。
  • 将实例数据库升级到可执行文件的版本。有关详细信息,请参阅迁移 Notification Services 实例
  • 重新创建实例数据库。这应当是最后不得已时才考虑使用的方法,因为实例中的所有信息都将丢失。

9041

使用了不同版本的 Notification Services 创建数据库或将数据库升级到了 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 日

更改的内容:
  • 添加了最常见事件消息及其解决方法的列表。