如何快速检查SQL Server使用的通信协议

如何快速检查SQL Server使用的通信协议

我正在使用 VSTS 2008 + C# + ADO.Net + SQL Server 2008。从另一台远程计算机连接时,ADO.Net 客户端通常使用 TCP/IP 协议连接到 SQL Server 2008。本地连接时(同一台计算机上的 ADO.Net 客户端和 SQL Server),通常使用共享内存或命名管道。

我的问题是,除了一般规则之外,如何准确检查(例如从一些 SQL Server 内置命令/工具/存储过程?)特定连接使用哪种通信协议?

提前致谢,乔治

答案1

如果您有该进程的 SPID(通过使用类似活动监视器或或sp_whosp_who2,那么您可以在服务器上执行此查询:

SELECT * 
FROM sys.dm_exec_connections 
WHERE session_id = (SPID);

用客户端进程的实际 SPID 替换 (SPID)。查看net_transport列,它将告诉您该进程使用哪种协议与 SQL Server 进行通信。如果您只对协议感兴趣,则只需使用SELECT net_transport而不是SELECT *

您还可以通过其他列过滤查询,例如 client_net_address,对于 TCP 连接,它将是客户端计算机的 IP 地址。您可以通过 ADO.NET 接口发送此查询。SQL SMO 可能也有一些内容。

这是sys.dm_exec_connections 的 MSDN 参考页面。请注意,您需要在服务器上具有 VIEW SERVER STATE 权限才能查看当前会话以外的内容。

server您还可以使用以下语法在连接字符串的指令中指定传输协议:

server=[protocol]:servername

例子:

server=tcp:mysqlinstance1 (for TCP/IP)
server=np:mysqlinstance1 (for named pipes)
server=np:\\mysqlinstance1\pipe\pipename (for a specific pipe)

答案2

附注:TCP/IP 或命名管道是传输层协议,而表格数据流是 SQL Server 中的通信(应用层)协议。

http://en.wikipedia.org/wiki/Tabular_Data_Stream

相关内容