SQL Server 错误日志查询指南

SQL Server的运行过程中,难免会遇到各种问题。幸运的是,SQL Server提供了强大的日志记录功能,帮助追踪和诊断问题。虽然可以使用文本编辑器(如大多数人喜欢的记事本)来查看错误日志文件,但这种方法效率低下。SQL Server提供了更高效的工具,比如系统存储过程,帮助深入分析错误日志。

然而,如果错误日志中记录了大量的条目,要从中找到需要的信息可能会变得非常复杂和耗时。尽管SQL Server提供了一些搜索和过滤功能,但面对海量数据,这些功能可能仍然不足以满足需求。

为了解决这个问题,可以使用T-SQL查询错误日志。这可以通过系统存储过程sys.sp_readerrorlog来实现。这个存储过程接受几个参数,允许根据需要筛选日志内容。

存储过程定义

以下是sys.sp_readerrorlog存储过程的定义:

USE [master] GO /* ***** Object: StoredProcedure [sys].[sp_readerrorlog] Script Date: 24/11/2015 7:11:36 PM ****** */ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER proc [sys].[sp_readerrorlog]( @p1 int = 0, @p2 int = NULL, @p3 nvarchar(4000) = NULL, @p4 nvarchar(4000) = 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

参数说明:

  • @p1:需要检查的错误日志编号(0代表当前日志,1代表归档日志#1等)
  • @p2:需要检查的错误日志类型(NULL或1代表SQL错误日志,2代表SQL代理日志)
  • @p3:第一个搜索参数(在内容中搜索的值)
  • @p4:第二个搜索参数(进一步细化结果集的值)

请注意,上述参数是可选的。如果不提供任何参数,它将返回当前/活动错误日志的全部内容。

查询示例

以下是一些查询错误日志的示例:

  • 返回当前错误日志中的所有条目:
  • EXEC sys.xp_readerrorlog @p1 = 0
  • 返回当前SQL代理日志中的所有条目:
  • EXEC sys.xp_readerrorlog @p1 = 0, @p2 = 2
  • 返回当前SQL错误日志中包含'CLR'的条目:
  • EXEC sys.sp_readerrorlog @p1=0, @p2=1, @p3='CLR'
  • 返回当前SQL错误日志中同时包含'CLR'和'Framework'的条目:
  • EXEC sys.sp_readerrorlog @p1=0, @p2=1, @p3='CLR', @p4='Framework'

当执行存储过程sys.sp_readerrorlog时,它会调用一个扩展存储过程sys.xp_readerrorlog,该过程接受7个参数,具体如下:

  • 参数1:日志编号(0-当前/1-归档#1/2-归档#2等)
  • 参数2:日志类型(1-SQL错误日志/2-SQL代理日志)
  • 参数3:搜索文本1(在文本列上搜索的术语)
  • 参数4:搜索文本2(在文本列上搜索的术语)
  • 参数5:开始日期(日志日期比提供的日期更新的日志条目,包括提供的日期)
  • 参数6:结束日期(在开始日期和结束日期之间的日志条目)
  • 参数7:排序顺序(ASC-升序/DESC-降序)
EXEC sys.xp_readerrorlog 0, 1, N'', N'', '20151124', '20151125', 'DESC'
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485