SQL Server记录位置

时间:2018-04-25 15:37:24

标签: sql-server

如何在SQL Server数据库中检索用户在过去一个月内触发的所有T-SQL语句?

我查看了sys表,但我无法弄清楚日志的存储位置。

1 个答案:

答案 0 :(得分:0)

在SQL Server中,我们不会跟踪执行查询的用户,除了默认跟踪捕获的某些DML / DDL或运行SQL Profiler

最好创建服务器端跟踪或启用SQL审核以跟踪您要跟踪或不信任的用户的活动。

如果您使用任何DMV捕获数据,请记住,如果清除DMV,重新启动sql server等,DMV数据将被重置。

SQL查询:

USE master
go
SELECT sdest.DatabaseName 
    ,sdes.session_id
    ,sdes.[host_name]
    ,sdes.[program_name]
    ,sdes.client_interface_name
    ,sdes.login_name
    ,sdes.login_time
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.ObjName
    ,sdest.Query
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_id(objectid) AS ObjName
        ,ISNULL((
                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 sdes.nt_user_name = '' -- Put the username here !
ORDER BY sdec.session_id

查询存储(SQL Server 2016+)而不是DMV。这样可以更好地查看历史数据,以及更快的查找速度,并且非常有效地捕获sp_who / sp_whoisactive无法捕获的短期运行查询。