1、显示服务:sys.services
- name ? ?[服务名称]
- service_id ? ?[服务的对象ID]
- principal_id ? ?[拥有这个契约的principal ID]
- service_queue_id ? ?[服务队列的对象ID]
2、显示服务契约:sys.service_contracts
- name [契约名称]
- service_contract_id [契约的对象ID]
- principal_id [拥有这个契约的principal ID]
3、显示契约中使用了哪些消息类型:sys.service_contract_message_usages
- service_contract_id [服务契约的对象ID]
- message_type_id [上面的契约所使用的消息类型的对象ID]
- is_sent_by_initiator [如果为1,消息类型是由源发送的]
- is_sent_by_target [如果为1,消息类型是由目标发送的]
4、显示消息类型:sys.service_message_types
- name [消息类型名称]
- message_type_id [消息类型的对象ID]
- principal_id [拥有这个契约的principal ID]
- validation [消息类型请求的验证类型。可以是以下值:
?? ? ? ? ? ? N表示无(即没有验证) ?? ? ? ? ? ? X表示XML(由Service Broker验证XML) ?? ? ? ? ? ? E表示空(消息主体总是为空)]
- validation_desc [上面列的具体文本,值为NONE、XML或EMPTY]
- xml_collection_id [XML集合的对象ID]
5、显示服务队列定义:sys.service_queues
- max_readers Service Broker [同时运行的队列读取器的最大数量]
- activation_procedure [已激活的存储过程的名称]
- execute_as_principal_id [已激活的存储过程将作为这个principal运行]
- is_activation_enabled [如果值为1,在这个队列上启用了激活]
- is_receive_enabled [如果值为1,服务可以在这个队列上发送RECEIVE命令]
- is_enqueue_enabled [如果值为1,服务可以在这个队列上发送SEND命令]
- is_retention_enabled [如果值为1,在这个队列上启用了保持]
6、显示哪个服务正在使用这个队列:sys.service_queue_usages
- service_id [服务的对象ID]
- service_queue_id [队列的对象ID]
7、显示针对其他Broker的路由:sys.routes
- name [路由的唯一名称]
- route_id [路由的对象ID]
- principal_id [拥有这个路由的principal ID]
- remote_service_name 远程服务名称]
- broker_instance [远程Service Broker的唯一实例标识符,这个Service Broker拥有上面的远程服务]
- lifetime [这个路由过期的日期和时间(UTC时间)]
- address [远程Service Broker的网络地址]
- mirror_address [远程Service Broker镜像的网络地址。这个列是可选的,仅在Service Broker启用了数据库镜像之后使用]
8、显示远程服务绑定:sys.remote_service_bindings
- Name [远程服务绑定的唯一名称]
- remote_service_binding_id [远程服务绑定的对象ID]
- principal_id [拥有这个远程服务绑定的principal ID]
- remote_service_name [远程服务名称]
- service_contract_id [服务契约的对象ID]
- remote_principal_id [远程principal的对象ID。当与该服务通信时,使用与这个principal关联的证书]
- is_anonymous_on [如果值为1,这个远程服务的会话将是匿名的,即无法知道哪个用户开始了这个会话]
9、显示端点:sys.service_broker_endpoints
- is_message_forwarding_enabled [如果值为1,这个端点支持转发消息]
- message_forwarding_size [tempdb中用于转发消息的空间的大小,单位MB]
- connection_auth [使用这个端点的连接所需要的身份认证类型,可以是以下值:
1表示NTLM 2表示Kerberos 3表示Negotiate 4表示证书 5表示NTLM、证书 6表示Kerberos、证书 7表示Negotiate、证书 8表示证书、NTLM 9表示证书、Kerberos 10表示证书、Negotiate]
-
connection_auth_desc [以上这些值的文本表示,可以是以下值:
NTLM KERBEROS NEGOTIATE CERTIFICATE NTLM,CERTIFICATE KERBEROS,CERTIFICATE NEGOTIATE,CERTIFICATE CERTIFICATE,NTLM CERTIFICATE,KERBEROS CERTIFICATE,NEGOTIATE
]
-
certificate_id [用于身份认证的证书的对象ID]
-
encryption_algorithm [加密算法:
0表示None 1表示RC4 2表示AES 3表示None、RC4 4表示None、AES 5表示RC4、AES 6表示AES、RC4 7表示None、RC4、AES 8表示None、AES、RC4
]
-
encryption_algorithm_desc
NONE
RC4 AES NONE,RC4 NONE,AES RC4,AES AES,RC4,AES NONE,AES,RC4
]
10、显示会话端点:sys.conversation_endpoints
- conversation_handle [用于通过编程方式访问这个会话的唯一标识符]
- conversation_id [会话的唯一标识符]
- is_initiator [如果值为1,这个端点就是会话的开始点。如果值为0,这个端点就是会话的目标点]
- conversation_group_id [拥有这个会话的会话组的唯一标识符]
- lifetime [这个会话过期的日期和时间]
- State [这个会话的当前状态:
SO表示开始对外会话 SI表示开始对内会话 CO表示交谈 DI表示断开的对内会话 DO表示断开的对外会话 ER表示错误 CD表示关闭]
-
state_desc [以上状态字段的文字描述,值如下所示:
STARTED_OUTBOUND STARTED_INBOUND CONVERSING DISCONNECTED_INBOUND DISCONNECTED_OUTBOUND ERROR CLOSED
]
-
far_service [远端服务名称]
-
far_broker_instance [远端Service Broker的唯一标识符]
-
principal_id [拥有本地会话使用的证书的principal对象ID]
-
far_principal_id [拥有远端会话使用的证书的principal对象ID]
-
outbound_session_key_identifier [用于对外加密的唯一标识符]
-
inbound_session_key_identifier [用于对内加密的唯一标识符]
-
security_timestamp [本地会话键创建的时间]
-
dialog_timer [Service Broker发送DialogTimer消息的时间]
-
send_sequence [这个号码表示发送序列中下一个号码]
-
last_send_tran_id [最后一个发送操作的事务标识符]
-
end_dialog_sequence [结束对话框消息的序列号码]
-
receive_sequence [这个号码表示下一个等待接受的序列号码]
-
receive_sequence_frag [这个号码表示下一个等待接受的消息片段序列号码]
-
system_sequence [这个会话中看到的系统消息的最后一个序列号码]
-
first_out_of_order_sequence [第1个次序颠倒的消息的序列号码]
-
last_out_of_order_sequence [最后一个次序颠倒的消息的序列号码]
-
last_out_of_order_frag [最后一个次序颠倒的消息片段的序列号码]
-
is_system [如果值为1,这就是一个系统对话框]
11、显示会话组:sys.conversation_groups
- conversation_group_id [拥有这个会话的会话组的唯一标识符]
- service_id [服务的对象ID]
- is_system [如果值为1,这就是一个系统级会话组,并不是供用户使用的]
12、显示队列内容:select * from <user_queue_name>
0表示已收到的消息 1表示准备好了 2表示还没有完成 3表示保留的发送消息
]
-
queuing_order [队列中的消息顺序号]
-
conversation_group_id [拥有这个会话的会话组的唯一标识符]
-
conversation_handle [用于通过编程方式访问这个会话的唯一标识符]
-
message_sequence_number [会话流中这个消息的相对位置]
-
service_name [这个消息发送到的服务的名称]
-
service_id [服务的对象ID]
-
service_contract_name [服务契约的名称]
-
service_contract_id [服务契约的对象ID]
-
message_type_name [消息的类型名称]
-
message_type_id [消息类型的对象ID]
-
validation [消息类型请求的验证类型。可以是以下值:
N表示无(即没有验证) X表示XML(由Service Broker验证XML) E表示空(消息主体总是为空)
]
-
message_body [这个消息的二进制有效内容。注意,这里的数据格式完全由应用程序决定]
-
message_id [这个消息的唯一标识符]
13、显示Broker的连接:sys.dm_broker_connections
- connection_id [连接的唯一标识符]
- transport_stream_id [传输流的唯一标识符]
- state [连接的当前状态:
1表示新连接 2表示正在连接中 3表示已连接 4表示登录成功 5表示连接关闭
]
-
state_desc [上面状态的文字描述:NEW、CONNECTING、CONNECTED、LOGGED_IN和CLOSED]
-
connect_time [连接打开的日期和时间]
-
login_time [登录发生的日期和时间]
-
authentication_method [Windows所使用的身份认证方式]
-
principal_name [用于验证连接权限的登录名]
-
remote_user_name [用于做Windows身份认证的远程用户名]
-
last_activity_time [连接最后一次发送和接收数据的日期和时间]
-
is_accept [如果值为1,这个连接是从远程获得的如果为0,这个连接是从本地建立的]
-
login_state [这个数字表示登录过程的当前状态:
0表示Initial 1表示Negotiate 2表示SSPI 3表示Public Key Login 4表示Public Key Tentative 5表示Logged In 6表示Arbitration
]
-
login_state_desc
Initial
Negotiate SSPI PublicKeyLogin PublicKeyTentative LoggedIn Arbitration
]
-
peer_certificate_id [身份验证远程实例所用证书的本地对象ID]
-
receives_posted [这个连接尚未完成的异步网络接收数目]
-
is_receive_flow_controlled [如果值为1,表示由于网络流控制,网络接收已经延迟]
-
sends_posted [这个连接尚未完成的异步网络发送数目]
-
is_send_flow_controlled [如果值为1,表示由于网络流控制,网络发送已经延迟]
-
total_bytes_sent [这个连接上总共的发送字节数]
-
total_bytes_received [这个连接上总共的接收字节数]
-
total_fragments_sent [这个连接上总共发送的消息片段数目]
-
total_fragments_received [这个连接上总共接收的消息片段数目]
-
total_sends [这个连接上总共网络发送请求数]
-
total_receives [这个连接上总共网络接收请求数]
-
encalg [所使用的加密算法:
1表示没有加密 2表示RC4 3表示AES
]
13、显示活动的任务:sys.dm_broker_activated_tasks
- spid [已激活的存储过程的会话ID]
- database_id [数据库的对象ID]
- queue_id [服务队列的对象ID]
- procedure_name [已激活的存储过程的名称]
- execute_as [运行存储过程的用户的对象ID]
14、显示队列监视器:sys.dm_broker_queue_monitors
- database_id [数据库的对象ID]
- queue_id [服务队列的对象ID]
- state [队列监视器的当前状态,可以是以下值:
INACTIVE NOTIFIED RECEIVES_OCCURRING
]
-
last_empty_rowset_time [最后一次RECEIVE返回一个空行集的日期和时间]
-
last_activated_time [最后一次存储过程被激活的日期和时间]
-
tasks_waiting [当前正在等待消息的RECEIVE语句数量]
15、数据库列表:sys.databases
- service_broker_guid [这个数据库中的Service Broker的唯一标识符]
- is_broker_enabled [如果值为1,表示这个数据库上启用了Service Broker]
16、数据库所有端点列表:sys.endpoints
- Name [这是该端点的唯一名称。你可以决定端点的名字,但是你必须给出一种方法防止出现重名]
- endpoint_id [这是一个唯一的整型值,它也定义了这个端点。由于这是一个整型值,所以对于与其他表做JOIN十分有用,它可能是其他视图的外键]
- principal_id [拥有这个端点的SQL Server principle的标识符ID]
- Protocol [整型值,用于识别这个端点使用了什么协议。Service Broker端点总是使用TCP/IP作为协议,所以这里的值是2]
- protocol_desc [这个字段包含了对该端点协议设置的文字描述,Service Broker端点总是显示TCP]
- Type [这个字段描述了端点负载的类型。所有的Service Broker端点都是3]
- type_desc [Type字段的文字描述。对于Service Broker端点,这里是SERVICE_BROKER]
- State [从诊断的角度看,下面两列最重要,因为它们描述了Service Broker端点的当前状态。值如下所示:
0表示端点处于启动状态(Started) 1表示端点处于停止状态(Stopped) 2表示端点处于禁用状态(Disabled)
]
-
state_desc [状态字段的文字描述。值如下所示:STARTED、STOPPED或DISABLED]
-
is_admin_endpoint [对于Service Broker端点,这个字段总是0]
17、数据库安全证书:sys.certificates ?? 当配置Service Broker把Kerberos作为安全对话框的加密方式时,你会把公钥和私钥保存在证书中,而这些证书会导入当前数据库。另外,为了防止配置错误,用于安全对话框的证书必须这样表示。sys.certificates视图包含一个is_active_for_begin_dialog列,是一个位类型的字段。如果位值为1,表示这个证书是由Service Broker使用的。如果值为0,Service Broker就无法使用这个证书。 ?? 尝试使用一个没有被标记为激活的BEGIN DIALOG证书会导致一个错误,该错误会在sys. transmission_queue/transmission_status中显示。要在现有的证书上启用这个标记,可以使用ALTER CERTIFICATE命令,然后设置WITH ACTIVE FOR BEGIN DIALOG = ON。
18、对称密钥:sys.symmetric_keys ?? Service Broker需要为适当的安全通信操作准备两个对称密钥。服务主密钥(Service Master Key)和数据库主密钥(Database Master Key)以行的形式保存在这个视图中,如果这两个密钥没有找到,你会收到一个来自Service Broker的错误。要创建这两个密钥其实很简单,可以使用CREATE SYMMETRIC KEY命令。 19、Service Broker任务:sys.sysprocesses ?? 许多服务器中的后台任务都为Service Broker处理服务。cmd列显示了任务的名称。有关Service Broker的任务以及它们的职责如下所示。
- BRKR ASYNC CONN。这个任务负责连接远端Service Broker。
- BRKR CMPLTN HDLR。这个任务负责处理IO完成(IO completion)。
- BRKR MSG XMITTER。这是消息发送器任务。所有通过网络发送的消息都要通过这个任务。
- BRKR MSG DSPTCHR。这个消息分配器负责在本地和远程发送消息。
- BRKR EVENT HNDLR。这个任务负责处理内部事件。
- BRKR INITIALIZER。SQL Server在被要求启动之后快速初始化,这样,系统的用户可以快速开始使用系统。但是前提是你有一个包含数百万激活对话框的数据库。启动的时间可能比较长。Service Broker初始化任务允许服务器继续启动,然后在后台异步初始化激活的Service Broker。在通常情况下,在后台看这个任务不会有任何警告。但如果系统已经运行了很长时间,或者并非大量对话框要初始化,这个任务不应该被绕过。
- BRKR TASK。这是一个内部激活的存储过程。
- DBCC SSB CHECK。这个任务会检查数据库的一致性。只有在DBCC CHECKDB运行时,你才会看到这个任务。
20、Service Broker作整体监控:Perfmon
?? 在Perfmon中找到的Service Broker信息确实要更加全局化,因此相对于服务级别的问题诊断,它更适合于对Service Broker作整体监控。与SQL Profiler一样,Perfmon中收集到的信息也可以由SQL Server的SQLDiag工具收集,但SQLDiag并不需要Perfmon。有3种Perfmon计数器分类: Broker激活、Broker统计和Broker/DBM传输。接下来的内容描述了这些计数器的用途。
1)Broker激活
这些计数器负责监视Service Broker中即将发生的激活数量。注意,这些计数器是对整个Service Broker做监控的,而不是对某个特定的服务监控
(负责监视Service Broker中即将发生的激活数量的计数器)
计数器名称
描述
Stored Procedures Invoked/sec
Service Broker中每秒调用的已激活的存储过程的数量
Task Limit Reached
Service Broker中已激活任务到达队列的上限时间
Task Limit Reached/sec
上面的计数器的每秒速率
Tasks Running
目前正在Service Broker中运行的已激活任务的数量
Tasks Started/sec
Service Broker中每秒调用的已激活的任务数量
2)Broker统计
这些计数器负责监视某个特定的Service Broker的所有操作。它们可以告诉你那个Service Broker的整体健康状况
(监视某个特定的Service Broker所有操作的计数器)
Broker Transaction Rollbacks
这个Service Broker检测到的事务回滚数
Dialog timer event count
Service Broker中当前处于激活状态的对话框计时器的数量
Enqueued Local Messages Total
Service Broker发出的消息总数。这里的数量仅包括从本地发送的消息,而不包括从网络到达的消息
Enqueued Local Messages/sec
Enqueued Messages Total
进入本地队列的所有消息的数量
Enqueued Messages/sec
Enqueued Transport Msg Frag Tot
一个队列中消息片段的总数。注意,在传输过程中一个大消息会自动被分成许多小的片段
Enqueued Transport Msg Frags/sec
Enqueued Transport Msgs Total
Service Broker发出的消息总数。这个数字仅包括通过网络到达的消息数
Enqueued Transport Msgs/sec
Forwarded Messages Total
这个Service Broker转发的消息总数
Forwarded Messages/sec
Forwarded Msg Byte Total
这个Service Broker转发的字节总数
Forwarded Msg Bytes/sec
Forwarded Msg Discarded Total
这个Service Broker丢弃的转发消息总数
Forwarded Msg Discarded/sec
Forwarded Pending Msg Bytes
所有的等待被发送的转发消息的字节总数
Forwarded Pending Msg Count
当前等待被发送的转发消息的数量
SQL RECEIVE Total
已经处理的T-SQL?RECEIVE命令总数
SQL RECEIVEs/sec
SQL SEND Total
已经处理的T-SQL?SEND命令总数
SQL SENDs/sec
上面的计数器的每秒速率
3)Broker/DBM传输
这些计数器是由Service Broker和数据库镜像共享的传输层所使用的
(由Service Broker和数据库镜像共享的传输层所使用的计数器)
Current Bytes for Recv I/O
这次传输读取的当前字节数
Current Bytes for Send I/O
这次传输通过网络发送的当前字节数
Current Msg Frags for Send I/O
当前通过网络发送的消息片段数量
Message Fragment Send Size Avg
通过网络发送的消息片段的平均大小,单位是字节
Message Fragment Send Total
通过网络发送的消息片段总数
Message Fragment Sends/sec
Message Fragment Receive Total
从网络收到的消息片段总数
Message Fragment Receives/sec
Message Fragment Recv Size Avg
从网络收到的消息片段的平均大小
Open Connection Count
当前打开的连接数
Pending Bytes for Recv I/O
Service Broker传输从网络收到的字节数,但是这些字节还没有放入队列或还未丢弃
Pending Bytes for Send I/O
等待通过网络发送的消息片段的字节数
Pending Msg Frags for Recv I/O
Service Broker传输从网络收到的消息片段数,但是这些字节还没有放入队列或还未丢弃
Pending Msg Frags for Send I/O
Receive I/O Bytes Total
从网络收到的字节总数
Receive I/O Bytes/sec
Receive I/O Len Avg
每次通过网络接收的平均字节数
Receive I/Os/sec
每秒完成的传输接收IO操作数
Send I/O Bytes Total
通过网络发送的字节总数
Send I/O Bytes/sec
Send I/O Len Avg
每次通过网络发送的平均字节数
Send I/Os/sec
每秒完成的传输发送IO操作数
21、检测和修复带有破损数据的数据库:DBCC CHECKDB ?? DBCC CHECKDB命令允许你检测和修复带有破损数据的数据库。虽然这个命令不是Service Broker特有的工具,但它确实可以分析出许多种类的数据库破损。其中包括引用了丢失消息类型的契约、引用了丢失队列的服务。在普通的Service Broker操作中,不会发生这些错误。例如,你无法丢弃一个正在使用中的消息类型。但是,由于一些失败导致Service Broker的元数据被破坏,所以才有了这个命令。 ?? 注意,虽然DBCC CHECKDB有选项可以修复遭到破坏的Service Broker元数据,但你要理解要把数据库变回到一致状态并不容易,通常会有很多限制。在上面的例子中,一个契约丢失了所需的消息类型。DBCC CHECKDB无法创建丢失的消息类型,因为它不知道任何有关这一类型的信息,它只能移除丢失了消息类型的契约。如果没有其他错误,在这个命令完成之后数据库将处于一致状态。当然,如果有一个服务引用了这个契约,单单移除这个契约是不够的,这个服务也要移除。这种迭代移除将一直继续,直到数据库保持一致状态为止。 ?? 通常更好的解决方案是,从未受破坏的备份中恢复遭到破坏的数据库。但有时这不行,因此需要修复。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|