ServiceBroker相关Sys系统表
来源:互联网 发布:佳为软件标志 编辑:程序博客网 时间:2024/06/05 03:29
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_readersService 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[使用这个端点的连接所需要的身份认证类型,可以是以下值:
2表示Kerberos
3表示Negotiate
4表示证书
5表示NTLM、证书
6表示Kerberos、证书
7表示Negotiate、证书
8表示证书、NTLM
9表示证书、Kerberos
10表示证书、Negotiate]
- connection_auth_desc[以上这些值的文本表示,可以是以下值:
KERBEROS
NEGOTIATE
CERTIFICATE
NTLM, CERTIFICATE
KERBEROS, CERTIFICATE
NEGOTIATE, CERTIFICATE
CERTIFICATE, NTLM
CERTIFICATE, KERBEROS
CERTIFICATE, NEGOTIATE]
- certificate_id[用于身份认证的证书的对象ID]
- encryption_algorithm[加密算法:
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[以上这些值的文本表示,可以是以下值:
RC4
AES
NONE, RC4
NONE, AES
RC4, AES
AES, RC4
NONE, RC4, AES
NONE, AES, RC4]
10、显示会话端点:sys.conversation_endpoints
- conversation_handle[用于通过编程方式访问这个会话的唯一标识符]
- conversation_id[会话的唯一标识符]
- is_initiator[如果值为1,这个端点就是会话的开始点。如果值为0,这个端点就是会话的目标点]
- service_contract_id[服务契约的对象ID]
- conversation_group_id[拥有这个会话的会话组的唯一标识符]
- service_id[服务的对象ID]
- lifetime[这个会话过期的日期和时间]
- State[这个会话的当前状态:
SI表示开始对内会话
CO表示交谈
DI表示断开的对内会话
DO表示断开的对外会话
ER表示错误
CD表示关闭]
- state_desc[以上状态字段的文字描述,值如下所示:
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>
- status [消息的状态。可以是以下值:
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[消息类型请求的验证类型。可以是以下值:
X表示XML(由Service Broker验证XML)
E表示空(消息主体总是为空)]
- message_body[这个消息的二进制有效内容。注意,这里的数据格式完全由应用程序决定]
- message_id[这个消息的唯一标识符]
13、显示Broker的连接:sys.dm_broker_connections
- connection_id [连接的唯一标识符]
- transport_stream_id [传输流的唯一标识符]
- state [连接的当前状态:
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[这个数字表示登录过程的当前状态:
1表示Negotiate
2表示SSPI
3表示Public Key Login
4表示Public Key Tentative
5表示Logged In
6表示Arbitration]
- login_state_desc[以上状态字段的文字描述,值如下所示:
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[所使用的加密算法:
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 [队列监视器的当前状态,可以是以下值:
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端点的当前状态。值如下所示:
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运行时,你才会看到这个任务。
在Perfmon中找到的Service Broker信息确实要更加全局化,因此相对于服务级别的问题诊断,它更适合于对Service Broker作整体监控。与SQL Profiler一样,Perfmon中收集到的信息也可以由SQL Server的SQLDiag工具收集,但SQLDiag并不需要Perfmon。有3种Perfmon计数器分类: Broker激活、Broker统计和Broker/DBM传输。接下来的内容描述了这些计数器的用途。
这些计数器负责监视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的整体健康状况
计数器名称
描述
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和数据库镜像共享的传输层所使用的
计数器名称
描述
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 CHECKDBDBCC CHECKDB命令允许你检测和修复带有破损数据的数据库。虽然这个命令不是Service Broker特有的工具,但它确实可以分析出许多种类的数据库破损。其中包括引用了丢失消息类型的契约、引用了丢失队列的服务。在普通的Service Broker操作中,不会发生这些错误。例如,你无法丢弃一个正在使用中的消息类型。但是,由于一些失败导致Service Broker的元数据被破坏,所以才有了这个命令。
注意,虽然DBCC CHECKDB有选项可以修复遭到破坏的Service Broker元数据,但你要理解要把数据库变回到一致状态并不容易,通常会有很多限制。在上面的例子中,一个契约丢失了所需的消息类型。DBCC CHECKDB无法创建丢失的消息类型,因为它不知道任何有关这一类型的信息,它只能移除丢失了消息类型的契约。如果没有其他错误,在这个命令完成之后数据库将处于一致状态。当然,如果有一个服务引用了这个契约,单单移除这个契约是不够的,这个服务也要移除。这种迭代移除将一直继续,直到数据库保持一致状态为止。
通常更好的解决方案是,从未受破坏的备份中恢复遭到破坏的数据库。但有时这不行,因此需要修复。
- ServiceBroker相关Sys系统表
- ServiceBroker
- SQL Server 系统表介绍:sys.dm_exec_requests
- SQL Server 系统表介绍:sys.dm_exec_sessions
- Sys节点相关
- linux系统下的 C 编程,头文件相关;哪里找-> sys/types.h, sys/stat.h
- 2005ServiceBroker初探
- sys系统信息
- 系统信息书包SYS
- 修改SYS开头的系统表的方法
- SQL Server 中的系统表(2) sys.columns
- MySQL 5.7新增sys.session表查看系统运行状态
- 【数据库】sql server中的sys.sysobjects系统表
- SQL SERVER2008数据库学习—sys.objects系统表简述
- dba系统相关表
- [proc 系统] /proc/sys/kernel
- linux系统/sys目录解析
- python模块-系统模块sys
- [暴力搜索]Island of Logic UVA592
- java动态代理和cglib
- 动态规则问题详解(四)
- SP2-0042: unknown command--rest of line ignored.
- C++中数字与字符串之间的转换
- ServiceBroker相关Sys系统表
- android.util.AndroidRuntimeException: You cannot combine custom titles with other title features
- PHP作为服务器程序的性能考虑
- 简单实现ajax验证用户是否可以登录
- Building Your Own Allocator
- java解答 2005年百度之星程序设计大赛试题初赛题目
- 图像处理领域公认的重要英文期刊(SCI收录)
- Windows下删除.svn文件夹的最简易方法
- 一张程序员才能看的懂的图片 看看你能认出多少来