SQL Server 生成一个Broker:Conversation事件,用于报告服务代理对话的进展。
Broker:Conversation 事件类数据列
| 数据列 | 类型 | 描述 | 列号 | 可筛选 |
|---|---|---|---|---|
ApplicationName |
nvarchar | 客户端应用程序的名称,该客户端应用程序创建了指向 SQL Server 实例的连接。 该列由应用程序传递的值填充,而不是由所显示的程序名填充。 | 10 | 是 |
ClientProcessID |
int | 由主机分配给正在运行客户端应用程序的进程的 ID。 如果客户端提供了客户端进程 ID,则填充此数据列。 | 9 | 是 |
DatabaseID |
int | 由该语句指定的 USE <database> 数据库ID。 如果没有 USE <database> 发出声明,该列指定默认数据库的ID。 如果在跟踪中捕获 ServerName 数据列且服务器可用,SQL Server Profiler 将显示数据库名称。 通过函数 DB_ID 确定数据库的值。 |
3 | 是 |
EventClass |
int | 捕获的事件类的类型。 总是 124 。Broker:Conversation |
27 | 否 |
EventSequence |
int | 此事件的序列号。 | 51 | 否 |
EventSubClass |
nvarchar | 事件子类的类型。 它提供了有关每个事件类的详细信息。 | 21 | 是 |
GUID |
uniqueidentifier | 对话的会话 ID。 此标识符将作为消息的一部分进行传输,并在会话双方之间共享。 | 54 | 否 |
HostName |
nvarchar | 正在运行客户端程序的计算机的名称。 如果客户端提供了主机名,则填充此数据列。 若要确定主机名,请使用函数 HOST_NAME 。 |
8 | 是 |
IsSystem |
int | 指示事件是发生在系统进程中还是发生在用户进程中。 0 = user1 = system |
60 | 否 |
LoginSid |
image | 已登录用户的安全标识号 (SID)。 服务器中的每个登录名都具有唯一的 SID。 | 41 | 是 |
MethodName |
nvarchar | 会话所属的会话组。 | 47 | 否 |
NTDomainName |
nvarchar | 用户所属的 Windows 域。 | 7 | 是 |
NTUserName |
nvarchar | 拥有生成此事件的连接的用户的名称。 | 6 | 是 |
ObjectName |
nvarchar | 对话的会话句柄。 | 34 | 否 |
Priority |
int | 会话的优先级 | 5 | 是 |
RoleName |
nvarchar | 会话句柄的角色。 这要么是initiatortarget。 |
38 | 否 |
ServerName |
nvarchar | 正在跟踪的 SQL Server 实例的名称。 | 26 | 否 |
Severity |
int | 如果此事件报告错误,则 SQL Server 错误严重性。 | 29 | 否 |
SPID |
int | 由 SQL Server 分配给与客户端关联的进程的会话 ID。 | 12 | 是 |
StartTime |
datetime | 该事件的启动时间(如果可用)。 | 14 | 是 |
TextData |
ntext | 会话的当前状态。 可以是下列值之一: | 1 | 是 |
SO。 已开始出站。 SQL Server 处理了BEGIN CONVERSATION这次对话,但没有发送任何消息。 |
||||
SI。 已开始入站。 另一个 数据库引擎 实例与当前实例发起了新对话,但当前实例还没收到第一条消息。 如果第一条消息已碎片或 SQL Server 按顺序接收消息,SQL Server 可能会创建处于此状态的会话。 然而,如果第一次接收到的传输包含完整的第一条消息,SQL Server可能会在该CO状态下创建对话。 |
||||
CO。 正在进行会话。 会话已建立,会话的双方都可以发送消息。 典型服务的大部分通信都在会话处于此状态时发生。 |
||||
DI。 已断开连接的入站。 远程对话端发出了 END CONVERSATION. 对话保持此状态,直到本地对话端发出 END CONVERSATION。 应用程序仍然可以接收会话消息。 由于远程端的对话已经结束了对话,应用程序无法在这段对话中发送消息。 当应用发出 时 END CONVERSATION,会话会进入关闭CD()状态。 |
||||
DO。 已断开连接的出站。 本地对话方面已发出 END CONVERSATION。 对话保持此状态,直到远端确认。END CONVERSATION 应用程序无法发送或接收对话中的消息。 当对话的远端确认时 END CONVERSATION,对话进入关闭CD()状态。 |
||||
ER。 错误。 此端点发生错误。
Error、 Severity和 State 列包含了具体错误的信息。 |
||||
CD。 已关闭。 会话端点不再使用。 |
||||
TransactionID |
bigint | 系统为事务分配的 ID。 | 4 | 否 |
下表列出了此事件类的子类值。
| ID | 子类 | 描述 |
|---|---|---|
| 1 | SEND Message |
当数据库引擎执行语SEND句时,SQL Server会SEND Message生成事件。 |
| 2 | END CONVERSATION |
当数据库引擎执行END CONVERSATION的语句不包含该WITH ERROR子句时,SQL Server会END CONVERSATION生成事件。 |
| 3 | END CONVERSATION WITH ERROR |
当数据库引擎执行END CONVERSATION包含该WITH ERROR子句的语句时,SQL Server会END CONVERSATION WITH ERROR生成事件。 |
| 4 | Broker Initiated Error |
每当服务代理生成错误消息时,SQL Server 都会Broker Initiated Error生成事件。 例如,当服务代理无法成功路由某个对话的消息时,代理会为该对话创建错误消息并生成该事件。 当应用程序因错误结束对话时,SQL Server 不会生成此事件。 |
| 5 | Terminate Dialog |
Service Broker 终止了对话框。 Service Broker 会在遇到导致无法继续对话但不是错误或正常结束的条件时终止对话。 例如,删除服务会导致 Service Broker 终止该服务的所有对话。 |
| 6 | Received Sequenced Message |
当SQL Server收到包含消息序列号的消息时,SQL Server会Received Sequenced Message生成事件类。 所有用户定义的消息类型都是已编序的消息。 Service Broker 在两种情况下生成未排队的消息:Service Broker 生成的错误消息将被取消排队。 消息确认可能是无序的。 为了提高效率,Service Broker 将任何可用的确认信息作为顺序消息的一部分。 然而,如果应用程序在一定时间内未向远程端点发送顺序消息,Service Broker 会为消息确认创建无序列消息。 |
| 7 | Received END CONVERSATION |
当SQL Server收到对话另一端的“结束对话”消息时,SQL Server会Received END CONVERSATION生成事件。 |
| 8 | Received END CONVERSATION WITH ERROR |
当SQL Server收到来自对话另一端的用户自定义错误时,SQL Server会Received END CONVERSATION WITH ERROR生成事件。 当SQL Server收到代理定义错误时,SQL Server不会生成该事件。 |
| 9 | Received Broker Error Message |
当服务代理收到来自对话另一端的代理定义错误消息时,SQL Server 会Received Broker Error Message生成事件。 当 Service Broker 收到由应用程序生成的错误消息时,SQL Server 不会生成该事件。例如,如果当前数据库包含转发数据库的默认路由,Service Broker 会将具有未知服务名称的消息路由到转发数据库。 如果该数据库无法路由该消息,该数据库中的代理会生成错误消息并将该错误消息返回给当前数据库。 当当前数据库接收到转发数据库中介生成的错误时,当前数据库会生成事件 Received Broker Error Message 。 |
| 10 | Received END CONVERSATION Ack |
当对话的另一方确认End Dialog该方发送的消息Error时,SQL Server 会Received END CONVERSATION Ack生成事件类。 |
| 11 | BEGIN DIALOG |
当 数据库引擎 执行命令BEGIN DIALOG时,SQL Server 会BEGIN DIALOG生成一个事件。 |
| 12 | Dialog Created |
当服务代理为对话创建端点时,SQL Server 会Dialog Created生成事件。 无论当前数据库是发起方还是对话目标,Service Broker 都会在建立新对话时创建终结点。 |
| 13 | END CONVERSATION WITH CLEANUP |
当数据库引擎执行END CONVERSATION包含该WITH CLEANUP子句的语句时,SQL Server会END CONVERSATION WITH CLEANUP生成事件。 |