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

Geo*_*ge2 1 .net sql-server sql-server-2008

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

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

提前致谢,乔治

squ*_*man 5

如果您有相关进程的 SPID(通过使用 Activity Monitor 或sp_who或 之类的东西sp_who2),那么您可以在服务器上执行此查询:

SELECT * 
FROM sys.dm_exec_connections 
WHERE session_id = (SPID);
Run Code Online (Sandbox Code Playgroud)

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

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

这是sys.dm_exec_connectionsMSDN 参考页面。请注意,您将需要服务器上的 VIEW SERVER STATE 权限才能查看更多内容,而不仅仅是当前会话。

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

server=[protocol]:servername
Run Code Online (Sandbox Code Playgroud)

例子:

server=tcp:mysqlinstance1 (for TCP/IP)
server=np:mysqlinstance1 (for named pipes)
server=np:\\mysqlinstance1\pipe\pipename (for a specific pipe)
Run Code Online (Sandbox Code Playgroud)