如何列出 SQL Server 中的所有连接?

Posted

技术标签:

【中文标题】如何列出 SQL Server 中的所有连接?【英文标题】:How to list all connections in SQL Server? 【发布时间】:2020-10-25 10:49:12 【问题描述】:

我正在使用这个版本的 SQL Server

Microsoft SQL Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64)   Oct 28 2019 19:56:59   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor) 

我运行查询

select @@CONNECTIONS;

结果

1629

我想列出所有连接(在本例中为 1629),看看幕后是什么,如何做到这一点?

【问题讨论】:

这能回答你的问题吗? How do I see active SQL Server connections? 我尝试了这个解决方案***.com/a/9392845/3728901,但它返回 2 行,这不是我所期望的。我还在其他答案中尝试了其他解决方案。我也知道如何使用 Google 搜索。 【参考方案1】:

The @@CONNECTIONS documentation states:

返回尝试连接的数量 - 成功和 不成功 - 因为 SQL Server 上次启动。

虽然 SQL Server DMV 会显示当前连接,但这些不会包括过去连接的详细信息或失败的连接尝试。为了获取成功和失败登录的历史详细信息,您可以使用SQL Server Audit 或使用文件目标创建扩展事件跟踪。下面是跟踪方法的示例 DDL:

CREATE EVENT SESSION [logins] ON SERVER 
ADD EVENT sqlserver.process_login_finish
ADD TARGET package0.event_file(SET filename=N'logins')
WITH (STARTUP_STATE=ON);

【讨论】:

【参考方案2】:

您可以尝试以下方法:

SELECT DB_NAME(dbid) AS DBName,
COUNT(dbid) AS NumberOfConnections,
loginame
FROM    sys.sysprocesses
GROUP BY dbid, loginame
ORDER BY DB_NAME(dbid)

【讨论】:

它无法列出我提到的数千个连接。我在我的电脑上试过了。让我们看看user-images.githubusercontent.com/1328316/… @DoNhuVy,根据the documentation,@@CONNECTIONS 返回自上次启动 SQL Server 以来尝试的连接数(成功和不成功)。历史细节无法通过 DMV 获得。如果需要该信息,则需要创建跟踪。 @Foster90, sys.sysprocesses 是 SQL 2005 版本不推荐使用的视图,在现代 SQL Server 版本中应避免使用。 @DanGuzman 什么是DMV?让我们发布你的答案,我会接受的。 @DoNhuVy,DMV 是 Dynamic Management Views。【参考方案3】:

您可以使用以下查询找出活动连接 -

SELECT
  conn.session_id,
  host_name,
  program_name,
  nt_domain,
  login_name,
  connect_time,
  last_request_end_time
FROM sys.dm_exec_sessions AS sess
INNER JOIN sys.dm_exec_connections AS conn ON sess.session_id = conn.session_id;

【讨论】:

它无法列出所提到的所有足够的数千个连接。 user-images.githubusercontent.com/1328316/… 此函数返回自上次启动 SQL Server 以来尝试的连接数(成功和不成功)。 SQL Server 没有存储有关这些连接的所有信息......并且此查询返回活动连接的编号:)

以上是关于如何列出 SQL Server 中的所有连接?的主要内容,如果未能解决你的问题,请参考以下文章

列出 sql server 2012 中的架构名称和所有者

如何在 SQL Server 中列出所有带有“WITH NOCHECK”的外键

Sql Query 列出 SQL Server 2005 数据库中的所有视图

列出SQL Server数据库中的所有序列

如何使用 SQL Server 连接选择中的所有列

需要用表名和表的模式列出 SQL Server 数据库中的所有触发器