管理 Service Broker 标识

每个数据库都包含一个唯一标识符,用于将 Service Broker 消息路由到该数据库。本主题介绍 Broker 标识、Service Broker 如何防止消息误传以及用于管理 Broker 标识的选项。

Service Broker 标识符

每个数据库都包含一个 Service Broker 标识符。sys.databases 目录视图的 service_broker_guid 列显示该实例中每个数据库的 Service Broker 标识符。Service Broker 路由使用 Service Broker 标识符来保证一个会话的所有消息都传递到同一个数据库。因此,Service Broker 标识符在同一网络上的所有实例中应是唯一的。否则,消息可能被误传。

Service Broker 消息传递

为了确保某个 Service Broker 标识符在网络上的所有数据库中是唯一的,SQL Server 提供了一种机制,用于停用某个数据库中的 Service Broker 消息传递。当某个数据库中停用消息传递后,所有发自该数据库的消息都将保留在该数据库的传输队列中。而且,Service Broker 认为该数据库中的服务不可以接收消息。当 Service Broker 路由在实例中查找目标服务时将不考虑这些服务。

停用 Service Broker 消息传递后,可以安全地附加数据库备份以便故障排除或数据恢复,而无需承担误传消息的风险。sys.databasesis_broker_enabled 列显示每个数据库的当前 Service Broker 消息传递状态。

SQL Server 为每个新数据库生成新的 Service Broker 标识符。由于标识符是新的,因此 SQL Server 可以安全地激活新数据库中的 Service Broker 消息传递。网络上的其他数据库应该不会有与之相同的 Service Broker 标识符。

附加或还原数据库时需小心,确保只有一个具有给定 Service Broker 标识符的数据库激活了消息传递。否则,消息可能被误传,而且可能在错误的数据库副本中处理会话。

管理标识符和消息传递

CREATE DATABASE 命令、ALTER DATABASE 命令和 RESTORE DATABASE 命令包含用于激活 Service Broker 消息传递和用于更改数据库 Service Broker 标识符的选项。

附加或还原数据库时,默认情况下不更改 Service Broker 标识符和消息传递状态。一般来说,在还原备份以进行恢复时、配置镜像对时或设置备用服务器的日志传送时都不更改 Service Broker 标识符。复制数据库时,会更改实例标识符。

下面四个选项用于管理标识符和消息传递:

  • ENABLE_BROKER。此选项可激活 Service Broker 消息传递功能,并保留数据库的现有 Service Broker 标识符。
ms166057.note(zh-cn,SQL.90).gif注意:
启动任何数据库中的 SQL Server Service Broker 都需要数据库锁。若要启动 msdb 数据库中的 Service Broker,首先请停止 SQL Server 代理,这样 Service Broker 才能获得必需的锁。
  • DISABLE_BROKER。此选项用于停用 Service Broker 消息传递,同时保留数据库的现有 Service Broker 标识符。
  • NEW_BROKER。此选项用于激活 Service Broker 消息传递,同时为数据库创建新的 Service Broker 标识符。由于该数据库中所有的现有会话都未使用新的实例标识符,因此,此选项将结束这些会话并返回一个错误。
  • ERROR_BROKER_CONVERSATIONS。此选项可激活 Service Broker 消息传递功能,并保留数据库的现有 Service Broker 标识符。Service Broker 结束该数据库中的所有会话并返回一个错误。

但是,无论指定哪个选项,SQL Server 都不允许具有相同 Service Broker 标识符的两个数据库在同一个 SQL Server 实例中同时激活消息传递。如果附加一个数据库,其 Service Broker 标识符与某个现有数据库的 Service Broker 标识符相同,则 SQL Server 将停用正在附加的数据库中的 Service Broker 消息传递。

有关附加数据库的选项的详细信息,请参阅 CREATE DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL)。有关如何激活数据库中的 Service Broker 消息传递的说明,请参阅如何在数据库中激活 Service Broker 消息传递 (Transact-SQL)

请参阅

其他资源

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助