Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查看活动的SQL Server连接?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

如何查看活动的SQL Server连接?

如何查看活动的SQL Server连接?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用SQLServer2008企业版。我想查看任何活动的SQL Server连接,以及所有连接的相关信息,例如从哪个IP地址连接到哪个数据库或其他 是否存在解决此问题的现有命令?您可以使用存储过程 提供有关Microsoft SQL Server数据库引擎实例中当前用户、会话和进程的信息。可以对信息进行过滤,以仅返回那些不空闲、属于特定用户或属于特定会话的进程 除了sp_who之外,您还可以使用未记录的sp_who2系统存储过程,该存储过程为您提供了更详细的信息。看 另请参阅Microso

我正在使用SQLServer2008企业版。我想查看任何活动的SQL Server连接,以及所有连接的相关信息,例如从哪个IP地址连接到哪个数据库或其他

是否存在解决此问题的现有命令?

您可以使用存储过程

提供有关Microsoft SQL Server数据库引擎实例中当前用户、会话和进程的信息。可以对信息进行过滤,以仅返回那些不空闲、属于特定用户或属于特定会话的进程

除了sp_who之外,您还可以使用未记录的sp_who2系统存储过程,该存储过程为您提供了更详细的信息。看


另请参阅Microsoft文档,以了解更多信息。

单击工具栏中的“活动监视器”图标

来自:


在SQLServerManagementStudio中,右键单击服务器,从上下文菜单中选择“活动监视器”,或使用键盘快捷键Ctrl+Alt+A


参考资料:

我把它放在一起,以便您可以对结果进行查询

Declare @dbName varchar(150)
set @dbName = '[YOURDATABASENAME]'

--Total machine connections
--SELECT  COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0

--Available connections
DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL)
INSERT INTO @SPWHO1 
    SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame
SELECT * FROM @SPWHO1 WHERE DBName = @dbName

--Running connections
DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL)
INSERT INTO @SPWHO2 
    EXEC sp_who2 'Active'
SELECT * FROM @SPWHO2 WHERE DBName = @dbName

下面是我的脚本,用于查找连接到数据库的所有会话,您可以检查这些会话是否正在执行任何I/O操作,并且可以选择终止它们

该脚本还显示每个会话的状态

看看下面

--==============================================================================
-- See who is connected to the database.
-- Analyse what each spid is doing, reads and writes.
-- If safe you can copy and paste the killcommand - last column.
-- Marcelo Miorelli
-- 18-july-2017 - London (UK)
-- Tested on SQL Server 2016.
--==============================================================================
USE master
go
SELECT
     sdes.session_id
    ,sdes.login_time
    ,sdes.last_request_start_time
    ,sdes.last_request_end_time
    ,sdes.is_user_process
    ,sdes.host_name
    ,sdes.program_name
    ,sdes.login_name
    ,sdes.status

    ,sdec.num_reads
    ,sdec.num_writes
    ,sdec.last_read
    ,sdec.last_write
    ,sdes.reads
    ,sdes.logical_reads
    ,sdes.writes

    ,sdest.DatabaseName
    ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

    SELECT DB_NAME(dbid) AS DatabaseName
        ,OBJECT_NAME(objectid) AS ObjName
        ,COALESCE((
            SELECT TEXT AS [processing-instruction(definition)]
            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
            FOR XML PATH('')
                ,TYPE
            ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

) sdest
WHERE sdes.session_id <> @@SPID
  AND sdest.DatabaseName ='yourdatabasename'
--ORDER BY sdes.last_request_start_time DESC

--==============================================================================

MS的查询解释了该命令的使用,提供了连接的信息,这非常有用:

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
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

您可以执行以下T-SQL命令:

SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';

谁连接到dbo。首先?当自动化事情时,此查询可能比sp_更有用,后者更倾向于显示。这是我首选的方法,但它不能完全回答OP的问题。建议将主机名添加到SELECT和GROUP BY子句中,以查看连接了哪些客户端。而且我刚刚意识到loginame的Msft输入错误——这是列名限制为8个字符时的产物吗?最新版本的SQL Server中的lol。它映射到以下各项:sys.dm_exec_连接、sys.dm_exec_会话和sys.dm_exec_请求。我喜欢按1、2 DESC、3排序,当您必须筛选特定数据库时,从sys.sysprocesss中选择更好。我如何仅为特定数据库添加筛选器?其中dbname='数据库名称'??我试过了,我得到了一个error@Geo.Dude,Iman Abidi意味着从sys.sysprocesss创建自己的select查询,并向该查询添加where子句。您必须根据dbid进行筛选。您可以在sys.databases中找到数据库id,也可以加入这两个数据库。在SQL Server Management Studio中,右键单击服务器,从上下文菜单中选择“活动监视器”-或-使用键盘快捷键Ctrl+Alt+AGood选项,但它需要比从sys.sysprocesses提取DB_NAMEdbid更多的权限。检查:sys.dm_exec_sessions,要检查的会话id>50
SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';