2010-12-09 39 views
10

? Necesito encontrar el nombre de usuario de la persona que modificó un procedimiento almacenado en particular.¿Cómo puedo encontrar la última fecha de modificación, usuario modificado de un procedimiento almacenado en SQL Server 2008

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

me da idea sobre el tiempo. ¿Pero cómo conozco al usuario que lo modificó?

+0

ha actualizado la respuesta – kbvishnu

+0

Ver este enlace para más detalles: http://izlooite.blogspot.in/2010/12/sql-server-how-to-find-user-who-last .html –

Respuesta

-7

Esto se puede lograr ejecutando cualquiera de las siguientes consultas.

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; 

------------ O ------------------------------ --------

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

¿Incluso respondiste esta pregunta? Ninguna consulta hace lo que usted preguntó ... ¿En qué parte de la consulta encuentra qué usuario modificó por última vez el procedimiento? – Sivvy

+0

Su pregunta fue "Necesito encontrar el ** nombre de usuario ** de la _persona que modificó un determinado procedimiento almacenado_." Estas consultas no devuelven ningún tipo de nombre de usuario. – Makotosan

9

¿Puedes probar esto?

nombre SELECT, create_date, modify_date DE sys.procedures

+1

Necesito el nombre de la persona que modificó.El nombre que está enlistando es el nombre de Sp – kbvishnu

6

cambios en el procedimiento se trazan en el sistema default trace. Simplemente abra el archivo .trc desde su carpeta ...\MSSQL\LOG y busque el PROCEDIMIENTO DE ALTERACIÓN. El único problema es que la traza predeterminada se reescribe a tiempo, por lo que solo puede usarla para cambios recientes (días-semanas).

0

Si usted va a necesitar esta información en el futuro, puede ser digno de mirar la implementación de un DDL trigger en el CREATE_PROCEDURE y ALTER_PROCEDURE DDL events

Ejemplo B desde la página EVENTDATA muestra una activar el registro de todos los eventos DDL, con nombre de usuario capturado

7

Aquí lo que funciona para mí: -

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; 

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

+1

Esa consulta es una cosa de belleza. –

0

se puede ver en la traza defecto y resolver esto fácilmente .

Esto debe mostrarse como un ejemplo y debe mirar el Objeto: Alterado de la columna EVENT NAME.

Ejecutar la secuencia de comandos SQL a continuación,

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

Trate Cambios en el esquema Historia Informe.

en SQL Server Gestión Sudio -> Haga clic derecho en el nombre del servidor o nombre de esquema -> Informes -> Informes estándar -> Cambios en el esquema Historia

Esto funcionó para mí como un encanto.

Tomado de here

Cuestiones relacionadas