Leer el log de SQL Server con sp_readerrorlog

Hola, en esta entrada de hoy, vamos a explicaros una de las tareas básicas de un DBA o administrador de base de datos. Se trata de leer el log de SQL Server. En esta entrada, nos centremos en SQL Server. Aún así, es importante saber mirar el log en cualquier base de datos que administremos, comencemos.

Leer el log de SQL Server

¿Cómo leer el log de SQL Server?

En primer lugar, debemos saber, que necesitaríamos permisos al menos de securityadmin. Una vez tengamos estos permisos, podremos continuar.

Podemos ver el log de SQL Server de dos formas, a nivel gráfico mediante SSMS o a través de consultas T-SQL como es el caso de hoy.

Existe un procedimiento almacenado indocumentado de Microsoft que se llama sp_readerrorlog. Este a su vez, realiza una llamada sobre xp_readerrorlog. Si vemos la creación de xp_readerrorlog, observamos lo siguiente:

CREATE PROC [sys].[sp_readerrorlog]( 
   @p1 INT = 0, 
   @p2 INT = NULL, 
   @p3 VARCHAR(255) = NULL, 
   @p4 VARCHAR(255) = NULL) 
AS 
BEGIN 

   IF (NOT IS_SRVROLEMEMBER(N'securityadmin') = 1) 
   BEGIN 
      RAISERROR(15003,-1,-1, N'securityadmin') 
      RETURN (1) 
   END 
    
   IF (@p2 IS NULL) 
       EXEC sys.xp_readerrorlog @p1 
   ELSE 
       EXEC sys.xp_readerrorlog @p1,@p2,@p3,@p4 
END 

Este proceso tiene 4 parámetros:

  1. Value of error log file you want to read: 0 = current, 1 = Archive #1, 2 = Archive #2, etc…
  2. Log file type: 1 or NULL = error log, 2 = SQL Agent log
  3. Search string 1: String one you want to search for
  4. Search string 2: String two you want to search for to further refine the results

Si no se pasa ningún parámetro, el procedimiento devolverá el contenido del registro de errores actual.

Ejemplos de uso de sp_readerrorlog

Ver el fichero de log de hace una semana.

Para ver el fichero del log de errores de hace una semana deberemos ejecutar:

 EXEC sp_readerrorlog 6  

En caso de querer ver el log de errores del día anterior, deberíamos introducir el número 1, ya que el número 0 es el fichero de log actual.

EXEC sp_readerrorlog 1

Filtrar resultados de sp_readerrorlog

Se podrían buscar resultados de la siguiente forma:

 EXEC sp_readerrorlog 6, 1, 'texto a buscar'  

De esta forma podríamos filtrar: un usuario, base de datos, un texto, un login,backup,etc.

En caso de que queramos buscar entre los resultados de ejecución de los jobs, deberíamos cambiar 1 de la consulta anterior, por un 2.

Esperamos que os haya sido de utilidad. No dudéis en suscribiros a nuestra newsletter mensual para estar al día de todas nuestras publicaciones.

Fuente: https://www.mssqltips.com/sqlservertip/1476/reading-the-sql-server-log-files-using-tsql/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+MSSQLTips-LatestSqlServerTips+%28MSSQLTips+-+Latest+SQL+Server+Tips%29