2012-09-19 18 views

Respuesta

0

Encontré esta información en stackexchange ... y lo probé y funcionó. El único problema fue que solo me dio el usuario que cambió el DBO la última vez, no la vez anterior. Fui la persona que cambió el DBO la última vez porque mi aplicación no funcionaba. Necesito saber quién cambió el DBO el tiempo anterior a ese. ¿Alguien sabe cómo haría eso? ¿Encontró las últimas dos veces que el DBO fue cambiado y por quién? Este es el código que me permite saber quién lo cambió la última vez:

Esto está en la traza predeterminada. Ya sea que utilice sp_changedbowner o el, la sintaxis moderna adecuada, que se mostrará como éste:

autorización de modificación sobre la base de datos :: [foo] a [bar] Puede recuperar la información de esta manera:

DECLARE @path NVARCHAR(260); 

SELECT 
    @path = REVERSE(SUBSTRING(REVERSE([path]), 
    CHARINDEX('\', REVERSE([path])), 260)) + N'log.trc' 
FROM sys.traces 
WHERE is_default = 1; 

SELECT * -- whittle down to the meaningful trace columns 
FROM sys.fn_trace_gettable(@path, DEFAULT) 
WHERE EventClass = 152 
ORDER BY StartTime DESC; 

Ahora, el evento pudo haber sucedido hace mucho tiempo, por lo que no estará necesariamente en la traza.

+0

sys.traces solo le proporcionará el archivo de rastreo predeterminado actual en uso. Si navega hasta el directorio, muestra que probablemente encontrará varios archivos de rastreo con un número secuencial. Si desea retroceder más, ejecute la segunda consulta en cada archivo individual hasta que encuentre lo que está buscando. –

+0

¿Puede explicar eso un poco más por mí, por favor? Gracias. – user1683507

0

En referencia a su comentario en explicar más sobre el archivo de rastreo por omisión ...

Al consultar sys.traces que va a devolver un registro para cada traza que se está ejecutando actualmente en su instancia de SQL. Uno de esos registros debe hacer referencia al archivo de rastreo predeterminado si la característica está habilitada. El formato de archivo del archivo de rastreo predeterminado es log_000.trc. El número es un número secuencial. El archivo se almacena de manera predeterminada en el directorio de LOG donde se guardan los archivos de SQL ERRORLOG y no se puede modificar.

Si va a ese directorio, es probable que encuentre varios archivos de rastreo para su seguimiento predeterminado. La traza predeterminada creará un nuevo archivo una vez que un archivo llegue a 20 MB, creo. Dado que la traza predeterminada no captura mucha información, generalmente no crea una gran cantidad de archivos. Aunque señalaré que es algo que debe controlarse, los sistemas que no se tocan durante largos períodos de tiempo pueden hacer que estos pequeños archivos se acumulen y que el almacenamiento se llene.

Parece que el archivo de rastreo actual no tiene el evento que está buscando en él, lo que lo lleva a que sea anterior a ese archivo. Entonces tiene dos opciones de ejecutar la consulta sys.fn_trace_gettable() en cada archivo individualmente; o tomaría los archivos más antiguos y los copiaría a una computadora cliente o algo además de mi servidor de producción y simplemente abriría cada uno en el generador de perfiles, dependiendo de cuántos estamos hablando. Si el evento en cuestión provocó que tu aplicación se rompa, puedes hacer referencia de manera obvia a esa hora para encontrar los archivos que necesitas enfocar.

Cuestiones relacionadas