Puede descubrir todos estos eventos que están en el ciclo de registro de eventos actual usando sp_readerrorlog
:
EXEC sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'OFFLINE';
Puede recorrer los valores de @p1
si no lo encuentra en el registro de eventos actual. De manera predeterminada, debería poder leer los 6 archivos de registro de errores actuales y anteriores, así que use 0-6 como argumentos para retroceder lo más posible (en mi sistema no pude obtener 0
/ NULL
agregar en todos los archivos de registro; YMMV )
Devolverá algo como esto:
LogDate ProcessInfo Text
------------- ----------- ---------------------------------------------------------
yyyy-mm-dd... spid72 Setting database option OFFLINE to ON for database 'foo'.
Existe la posibilidad, por supuesto, de que el registro de errores se llene lo suficiente como para que los eventos ocurrieron antes del conjunto actual de registros de errores. En ese caso, no tienes suerte. Para mantener un historial de ejecución más largo en el futuro, puede cambiar la cantidad de registros de errores que se mantienen. En el Explorador de objetos, expanda Administración, haga clic con el botón derecho en Registros de SQL Server y elija Configurar. Allí puede cambiar la configuración de reciclaje del archivo de registro de errores, incluido el mantenimiento de los 99 archivos anteriores. También vea esta respuesta .
Tenga en cuenta que sp_readerrorlog
es indocumentado y no es compatible, aunque muchas personas han escrito al respecto . Al final, los archivos de registro de errores son solo archivos de texto sin formato, por lo que puede escribir su propio PowerShell, CLR, etc., que solo analiza los archivos y devuelve la misma información. Puede determinar dónde están los archivos de registro de errores para esta instancia utilizando:
SELECT SERVERPROPERTY('ErrorLogFileName');
Los archivos se nombrarán ERRORLOG
, ERRORLOG.1
, ERRORLOG.2
, etc Usted puede ir y abrir los archivos en un editor de texto básico para ver la estructura, aunque me gustaría tener cuidado de no abrir el archivo actual en uso ( ERRORLOG
).