如何在SQL Server 2008中找到上次修改日期,修改后的存储过程用户

kbv*_*hnu 13 sql sql-server

我需要找到修改特定存储过程的人的用户名.

如何找出Oracle上次修改或编译存储过程的时间?

让我了解时间.但是我怎么知道修改它的用户呢?

小智 16

这对我有用: -

DECLARE @filename VARCHAR(255) 
SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'  
FROM sys.traces   
WHERE is_default = 1;  

SELECT gt.HostName, 
       gt.ApplicationName, 
       gt.NTUserName, 
       gt.NTDomainName, 
       gt.LoginName, 
       gt.SPID, 
       gt.EventClass, 
       te.Name AS EventName,
       gt.EventSubClass,      
       gt.TEXTData, 
       gt.StartTime, 
       gt.EndTime, 
       gt.ObjectName, 
       gt.DatabaseName, 
       gt.FileName, 
       gt.IsSystem
FROM [fn_trace_gettable](@filename, DEFAULT) gt 
JOIN sys.trace_events te ON gt.EventClass = te.trace_event_id 
WHERE EventClass in (164) --AND gt.EventSubClass = 2
ORDER BY StartTime DESC;
Run Code Online (Sandbox Code Playgroud)

资料来源: - https://serverfault.com/questions/258111/finding-out-who-has-modified-a-stored-procedure-on-sql-server

  • 这个查询是一件很美的事情。 (2认同)

Jay*_*kay 11

你能尝试一下吗?

SELECT name,create_date,modify_date FROM sys.procedures

  • 我需要修改者的姓名.列出的名称是Sp的名称 (2认同)

Rem*_*anu 7

在系统默认跟踪中跟踪过程更改.只需打开.trc文件...\MSSQL\LOG夹中的文件,然后搜索ALTER PROCEDURE即可.唯一的问题是默认跟踪会及时重写,因此您只能将其用于最近的更改(天 - 周).


Uma*_* T. 5

尝试架构更改历史报告。

在 SQL Server Management Studio -> 右键单击​​服务器名称或架构名称 -> 报告 -> 标准报告 -> 架构更改历史记录

这对我来说就像一种魅力。

取自这里


kbv*_*hnu -11

这可以通过运行以下任何查询来实现。

SELECT 
    [procedure] = QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
        + '.' + QUOTENAME(OBJECT_NAME([object_id])),
    last_execution_time,
    avg_execution_time = CONVERT(DECIMAL(30,2), total_worker_time * 1.0 / execution_count),
    max_worker_time
FROM sys.dm_exec_procedure_stats
WHERE database_id = DB_ID()
ORDER BY avg_execution_time DESC;
Run Code Online (Sandbox Code Playgroud)

- - - - - - 或者 - - - - - - - - - - - - - - - - - - - -

SELECT 

COALESCE(DB_NAME(t.[dbid]),'Unknown') AS [DB Name],
ecp.objtype AS [Object Type],
t.[text] AS [Adhoc Batch or Object Call],
SUBSTRING(t.[text], (qs.[statement_start_offset]/2) + 1,
((CASE qs.[statement_end_offset]
WHEN -1 THEN DATALENGTH(t.[text]) ELSE qs.[statement_end_offset] END
- qs.[statement_start_offset])/2) + 1) AS [Executed Statement]
,qs.[last_execution_time] AS [Last Exec Time]
,qs.[creation_time] AS [Creation Time]

FROM sys.dm_exec_query_stats AS qs
    JOIN sys.dm_exec_cached_plans ecp 
            ON qs.plan_handle = ecp.plan_handle
            CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS t
where
    ecp.objtype = 'Proc'

order by [Last Exec Time]  desc
Run Code Online (Sandbox Code Playgroud)

  • 你甚至回答过这个问题吗?两个查询都没有满足您的要求...在哪个查询的哪一部分中您可以找到哪个用户最后修改了该过程? (6认同)