【问题标题】:How can I find the last modified date, modified user of an stored procedure in SQL Server 2008?如何在 SQL Server 2008 中找到存储过程的最后修改日期、修改用户?
【发布时间】:2011-05-22 15:32:17
【问题描述】:

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

How do I find out when a stored procedure was last modified or compiled in Oracle?

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

【问题讨论】:

标签: sql sql-server


【解决方案1】:

seems 你不能。

【讨论】:

    【解决方案2】:

    你可以试试这个吗?

    从 sys.procedures 中选择名称、创建日期、修改日期

    【讨论】:

    • 我需要修改人的姓名。它列出的名称是Sp的名称
    【解决方案3】:

    程序更改在系统default trace 中进行跟踪。只需从您的 ...\MSSQL\LOG 文件夹中打开 .trc 文件并搜索 ALTER PROCEDURE。唯一的问题是默认跟踪会及时重写,因此您只能将其用于最近的更改(几天-几周)。

    【讨论】:

      【解决方案4】:

      如果您将来需要此信息,可能值得考虑在 CREATE_PROCEDURE 和 ALTER_PROCEDURE DDL events 上实现 DDL trigger

      EVENTDATA 页面中的示例 B 显示了一个触发器,它记录了所有 DDL 事件,并捕获了用户名。

      【讨论】:

        【解决方案5】:

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

        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;
        

        ------------或---------------------------------- ----

        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
        

        【讨论】:

        • 你回答过这个问题吗?这两个查询都没有你问的......你在哪个查询的哪个部分找到了哪个用户最后修改了过程?
        • 您的问题是“我需要找到修改特定存储过程的人用户名。”这些查询不返回任何类型的用户名。
        • 我需要一个比上述权限更少的解决方案。
        【解决方案6】:

        这对我有用:-

        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;
        

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

        【讨论】:

        • 这个查询很漂亮。
        【解决方案7】:

        尝试架构更改历史记录报告。

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

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

        取自here

        【讨论】:

        • 非常有用的信息。需要注意的是:它只会有默认跟踪(每个 20 MB 的 5 个文件),它们是旋转的。所以,如果变化发生在很久以前,我们将看不到它。在这种情况下,我们需要扩展事件或 DDL 触发器等。
        • that 报告从哪个数据源中提取?如果它是一个可以在 SQL 中查询的表,那么这将是一个比上述报告解决方法更好的解决方案(它很慢,只能通过将其导出到 Excel 来搜索......?)
        【解决方案8】:

        我尝试了以下查询,它对我有用:

        SELECT *
        FROM sys.objects
        WHERE type = 'P'
        ORDER BY modify_date DESC
        

        此查询适用于存储过程。

        【讨论】:

          猜你喜欢
          • 2013-06-09
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          • 1970-01-01
          • 1970-01-01
          • 2011-07-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多