iT邦幫忙

0

如何取得 MS-SQL Query AccessLog by User 查詢歷史

  • 分享至 

  • xImage

各位大大好:
我Google了一段查詢MS-SQL Accesslog 語法, 但少了
SessionID, LoginTime, HostName,ProgramName,LoginName ,SessionStatus (同sys.dm_exec_sessions) 的訊息, 請教各位大大幫忙一下, 謝謝.

--傳回執行的 SQL 查詢歷史 Log
SELECT s2.dbid, 
s1.sql_handle, 
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
((CASE WHEN statement_end_offset = -1 
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,plan_generation_num,last_execution_time,
total_worker_time,last_worker_time,min_worker_time, 
max_worker_time,total_physical_reads,last_physical_reads,
min_physical_reads,max_physical_reads,total_logical_writes, 
last_logical_writes,min_logical_writes,max_logical_writes 
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 
WHERE s2.objectid is null 
  and S2.text like '%CDD.%'   
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset; 
-- 	查詢目前連線數明細 -- exp2 有最近SQL
SELECT s.session_id AS SessionID,
  s.login_time AS LoginTime,
  s.[host_name] AS HostName,
  s.[program_name] AS ProgramName,
  s.login_name AS LoginName,
  s.[status] AS SessionStatus,
  st.[text] AS SQLText,
  (s.cpu_time / 1000) AS CPUTimeInSec,
  (s.memory_usage * 8) AS MemoryUsageKB,
  (CAST(s.total_scheduled_time AS FLOAT) / 1000) AS TotalScheduledTimeInSec,
  (CAST(s.total_elapsed_time AS FLOAT) / 1000) AS ElapsedTimeInSec,
  s.reads AS ReadsThisSession,
  s.writes AS WritesThisSession,
  s.logical_reads AS LogicalReads,
  CASE s.transaction_isolation_level
   WHEN 0 THEN 'Unspecified'
   WHEN 1 THEN 'ReadUncommitted'
   WHEN 2 THEN 'ReadCommitted'
   WHEN 3 THEN 'Repeatable'
   WHEN 4 THEN 'Serializable'
   WHEN 5 THEN 'Snapshot'
  END AS TransactionIsolationLevel,
  s.row_count AS RowsReturnedSoFar,
  c.net_transport AS ConnectionProtocol,
  c.num_reads AS PacketReadsThisConnection,
  c.num_writes AS PacketWritesThisConnection,
  c.client_net_address AS RemoteHostIP,
  c.local_net_address AS LocalConnectionIP
FROM sys.dm_exec_sessions s INNER JOIN sys.dm_exec_connections c
ON  s.session_id = c.session_id
  CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) AS st
WHERE s.is_user_process = 1
ORDER BY s.cpu_time DESC 
fuzzylee1688 iT邦研究生 3 級 ‧ 2018-11-02 10:35:48 檢舉
已用 SQL-SERVER TRACE Log File 解決.
參考網址: https://docs.microsoft.com/zh-tw/sql/relational-databases/sql-trace/create-a-trace-transact-sql?view=sql-server-2017

--需要伺服器的 ALTER TRACE 權限。
-- GRANT ALTER TRACE TO user

SELECT TextData, DatabaseID, HostName, ApplicationName, LoginName, SPID,
StartTime, EndTime, Duration, CPU, EventClass
FROM fn_trace_gettable('D:\SQL_TraceLog\XXXX-CRMDB01_T20181101.trc', default)
where TextData like '%CDD..%'
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答