2010-12-09 58 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

相關問題