Broker:会话事件类

适用于:SQL ServerAzure SQL 托管实例

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 捕获的事件类的类型。 总是 124Broker:Conversation 27
EventSequence int 此事件的序列号。 51
EventSubClass nvarchar 事件子类的类型。 它提供了有关每个事件类的详细信息。 21
GUID uniqueidentifier 对话的会话 ID。 此标识符将作为消息的一部分进行传输,并在会话双方之间共享。 54
HostName nvarchar 正在运行客户端程序的计算机的名称。 如果客户端提供了主机名,则填充此数据列。 若要确定主机名,请使用函数 HOST_NAME 8
IsSystem int 指示事件是发生在系统进程中还是发生在用户进程中。

0 = user
1 = 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。 错误。 此端点发生错误。 ErrorSeverityState 列包含了具体错误的信息。
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生成事件。