本文探讨了SQL Server中查看日志的四种方法,重点介绍了xp_readerrorlog命令的使用方法,xp_readerrorlog命令用于T-SQL读取SQL Server错误日志。
介绍
SQL Server错误日志对于解决数据库服务器的问题很有用。 它包含系统事件和用户定义的事件信息。 在以下情况下,我们可以使用错误日志查看:
有关SQL Server实例的信息
审核登录–成功或失败
数据库恢复状态
记录的错误消息
我们可以使用不同的方法读取错误日志,但是首先,我们应该知道错误日志的路径。
SSMS工具查看日志
连接到SSMS中SQL实例,然后导航到“管理”。 展开管理文件夹,然后展开SQL Server日志。 在SQL Server日志中,您可以看到不同的日志-当前日志和存档日志:
双击所需的错误日志文件,它将在单独的窗口中打开错误日志:
T-SQL方法查看日志
您可以使用SERVERPROPERTY()命令来了解当前的错误日志文件位置
1 | SELECT SERVERPROPERTY( 'ErrorLogFileName' ) AS 'Error log file location' ; |
您可以浏览到目录,并显示可用的错误日志文件
使用GUI访问错误日志
通常,DBA使用GUI方法读取错误日志,如上所示。 您可能会遇到尝试打开错误日志的问题,但是打开错误日志会花费很多时间。 此外,它给出了超时问题。 由于错误日志过多,可能会发生这种情况。
通常,我们部署一个SQL Agent作业来回收错误日志文件,以便它不会变得很大。 如果作业不可用或未运行,则可能会导致大量错误日志
如果我们为成功的登录启用了审核,则SQL Server会为每个成功的数据库连接记录一个条目。 在繁忙的OLTP系统中,您可能会获得许多成功的登录信息,这些登录信息会淹没错误日志
SQL Server日志备份。 假设您在SQL实例中有50个数据库。 您每10分钟配置一次事务日志备份。 因此,每隔10分钟,它将在错误日志中写入有关每个数据库的日志备份的信息。 我们可以禁止显示这些消息,但这不在本文讨论范围之内
如果我们要搜索多个错误日志,则使用GUI读取和过滤日志可能是一项令人沮丧且具有挑战性的任务。
查询以列出错误日志及其大小
您可以执行以下查询以列出可用的错误日志及其大小:
1 | EXEC sys.sp_enumerrorlogs; |
这里的日期列显示了特定文件中最后一个条目的时间戳。
使用xp_readerrorlog读取SQL Server日志文件
我们使用扩展存储过程xp_readerrorlog读取SQL Server错误日志文件。
xp_ReadErrorLog命令的语法
1 | Exec xp_ReadErrorLog , , , , , |
LogNumber-存档编号:错误日志的日志号。指定读取哪个日志。SQL Server最多有7个日志,编号从0到6,其中0表示当前日志
LogType-日志类型:指定日志的类型。1表示SQL Server日志,2表示SQL Agent日志
SearchItem1-查询包含的字符串:指定要在日志中搜索的字符串。这个参数可以重复,用于进一步精确结果集
StartDate-开始时间:指定读取日志的开始时间
EndDate-结束时间:指定读取日志的结束时间。需要注意的是,如果要指定时间参数,必须同时指定开始时间和结束时间
SortOrder-结果排序:指定结果集的排序方式,可以是按日期降序(Desc)或升序(Asc)
让我们使用以下示例了解命令xp_readerrorlog。
读取当前错误日志
我们可以在不指定任何参数的情况下读取当前SQL Server错误日志:
1 | EXEC xp_ReadErrorLog |
读取SQL Server错误日志
在以下命令中,我们使用以下参数:
1 | EXEC xp_ReadErrorLog 0,1 |
读取SQL Server代理日志
在此命令中,我们为LogType参数2指定一个值,该值引用SQL Server代理日志:
1 | EXEC xp_ReadErrorLog 0,2 |
读取当前SQL Server错误日志并搜索文本“警告”
此命令在当前SQL Server错误日志文件中搜索文本警告:
1 | EXEC xp_ReadErrorLog 0, 1, N 'Warning' |
我们需要使用N将文本放在单引号中。我们可能会收到带有N的以下错误消息。它将字符串声明为Nvarchar数据类型,而不是Varchar:
消息22004,级别12,状态1,第0行
执行扩展存储过程时出错:无效的参数类型
读取当前SQL Server错误日志并搜索多个条件
此查询在当前SQL Server错误日志中搜索文本数据库和初始化。 这两个条件都应满足以返回结果:
1 | EXEC xp_ReadErrorLog 0, 1, N 'Database' ,N 'Initialization' |
在特定持续时间内读取当前SQL Server错误日志
假设我们要搜索SQL Server错误日志特定的持续时间。 假设我们要搜索2019年11月7日午夜至9 AM之间的关键字恢复。 我们可以采用以下格式指定开始日期和结束日期参数:
1 2 3 4 5 6 7 | EXEC xp_readerrorlog 0, 1, N 'Recovery' , N '' , N '2019-11-07 00:00:01.000' , N '2019-11-07 09:00:01.000' |
在输出中,您可以看到结果从开始日期到结束日期按升序排序。 我们可以指定参数desc,以便将结果从结束日期到开始日期按降序排序:
1 2 3 4 5 6 7 8 | EXEC xp_readerrorlog 0, 1, N 'Recovery' , N '' , N '2019-11-07 00:00:01.000' , N '2019-11-07 09:00:01.000' , N 'desc' |
使用变量读取特定时间段内的多个条件的当前SQL Server错误日志
我们可以使用以下查询在变量中指定所需的参数,并在命令xp_readerrorlog中使用这些变量。
它使用以下条件:
搜索关键字Recovery和指定开始和结束日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DECLARE @logFileType SMALLINT = 1; DECLARE @start DATETIME; DECLARE @ end DATETIME; DECLARE @logno INT = 0; SET @start = '2019-11-07 00:00:01.000' ; SET @ end = '2019-11-07 09:00:00.000' ; DECLARE @searchString1 NVARCHAR(256)= 'Recovery' ; DECLARE @searchString2 NVARCHAR(256)= 'MSDB' ; EXEC master.dbo.xp_readerrorlog @logno, @logFileType, @searchString1, @searchString2, @start, @ end ; |
结论
本文探讨了SQL Server中查看日志的四种方法,重点介绍了xp_readerrorlog命令的使用方法。 它有助于对SQL Server中的问题进行故障排除,避免因特定情况而从GUI读取大型错误日志的麻烦。
到此这篇关于SQL Server使用xp_readerrorlog命令查看错误日志的文章就介绍到这了,更多相关xp_readerrorlog读取mssql错误日志内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!