2010-12-09 31 views
10

我需要找到修改特定存储过程的人的用户名。我如何才能找到最后修改日期,在SQL Server 2008中存储过程的修改用户

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

让我对时间观念。但是,我如何知道修改它的用户?

+0

采取更新的答案 – kbvishnu 2012-02-01 14:27:14

+0

请参阅此链接了解详情:http://izlooite.blogspot.in/2010/12/sql-server-how-to-find-user-who-last .html – 2013-11-20 13:00:28

回答

-7

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

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; 

------------ OR ------------------------------ --------

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 
+3

的名字你甚至回答这个问题吗?这两个查询都不会做你所问的问题......在哪一部分查询中,你是否找到了最近修改过程的用户? – Sivvy 2012-08-01 20:55:23

1

seems你不能。

+1

请参阅我的回答 – kbvishnu 2012-02-01 14:27:23

9

你可以试试这个吗?

SELECT名字,CREATE_DATE,modify_date FROM sys.procedures

+1

我需要修改人员的姓名。它的名字是Sp – kbvishnu 2010-12-09 05:41:07

6

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

0

如果你将需要在未来的这个信息,它可能是值得考虑的从EVENTDATA页面上的CREATE_PROCEDURE和ALTER_PROCEDURE实施DDL triggerDDL events

实例B显示了一个触发记录所有DDL事件,捕获用户名。

7

这里什么工作对我来说: -

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

0

你可以看一下默认的痕迹,容易想出解决办法。

这是作为示例显示的,您需要查看对象:更改EVENT NAME列。

执行下面的SQL脚本,

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; 
1

尝试架构更改历史报告。

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

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

here

相关问题