sqlserver中错误⽇志errorlog的深⼊讲解
⼀ .概述
SQL Server 将某些系统事件和⽤户定义事件记录到 SQL Server 错误⽇志和 Microsoft Windows 应⽤程序⽇志中。这两种⽇志都会⾃动给所有记录事件加上时间戳。使⽤ SQL Server 错误⽇志中的信息可以解决SQL Server的相关问题。
查看 SQL Server 错误⽇志可以确保进程(例如,备份和还原操作、批处理命令或其他脚本和进程)成功完成。此功能可⽤于帮助检测任何当前或潜在的问题领域,包括⾃动恢复消息(尤其是在 SQL Server 实例已停⽌并重新启动时)、内核消息或其他服务器级错误消息。
使⽤ SQL Server 或任何⽂本编辑器可以查看 SQL Server Management Studio 错误⽇志。默认情况下,错误⽇志位于Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 和 ERRORLOG.n ⽂件中。例如: 我电脑win7上将sql server 2008 r2数据库安装在D:\Program Files⽬录下,错误⽇志路径为 D:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log
每当启动 SQL Server 实例时,将创建新的错误⽇志信息,sqlserver系统⾃动调⽤ exec sp_cycle_errorl
og 系统存储过程,该存储过程会关闭当前的错误⽇志⽂件,并循环错误⽇志扩展编号来循环使⽤错误⽇志⽂件,⽽不必重新启动 SQL Server实例(区别mysql下有四种⽇志⽂件,⽂件会⼀直增长,需要管理员去清除,避免影响磁盘空间) 。通常, SQL Server 保留前六个⽇志的备份, 按照时间顺序,依次⽤⽂件扩展名.1 .2…  .6表⽰。每重启⼀次服务,⽂件扩展名都会加⼀, 最早那份会被删除。⼆. Errorlog⽇志内容
2.1  ⽇志⾃动记录的信息⼤概有如下:
(1) SQL SERVER 的启动参数,以及认证模式,内存分配模式。
(2) 每个数据库是否能够被正常打开。如果不能,原因是什么?
(3) 数据库损坏相关的错误
(4) 数据库备份与恢复动作记录
(5) DBCC CHECKDB记录
(6) 内存相关的错误和警告
(7) SQL调度出现异常时的警告。⼀般SERVER Hang 服务器死机会伴随着有这些警告
(8) SQL I/O操作遇到长时间延迟的警告
(9) SQL在运⾏过程中遇到的其他级别⽐较⾼的错误
(10) SQL内部的访问越界错误(Access Violation)
(11) SQL服务关闭时间
(12) SQL SERVER版本,以及windows和processor基本信息。
2.2  ⽇志开启跟踪能看到的信息
(1) 所有⽤户成功或失败的登⼊
(2) 死锁及其参与者的信息。跟踪标志1222 或1204
2.3 ⽇志不能记录的问题
(1) 阻塞问题。只要阻塞还没有严重到影响线程调度,⽇志⾥是不会体现的。
(2) 普通性能问题,超时问题。
(3) windows层⾯异常。
所以在检查sqlserver 相关问题的时候,总是从error log着⼿,如果error log⾥有⼀些错误或警告,就要确认排查,如果记录问题的时间与软件系统出问题时间对得上,就需要着重分析。
三 .跟踪标志
使⽤DBCC TRACEON来指定要打开的跟踪标记的编号,跟踪标记⽤于通过控制 SQL Server 的运⾏⽅式来⾃定义某些特征。启⽤的跟踪标记将在服务器中⼀直保持启⽤状态,直到执⾏ DBCC TRACEOFF 语句将其禁⽤为⽌。在 SQL Server 中,有两种跟踪标志:会话和全局。会话跟踪标志对某个连接是有效的,只对该连接可见。全局跟踪标志在服务器级别上进⾏设置,对服务器上的每⼀个连接都可见。若要确定跟踪标记的状态,请使⽤ DBCC TRACESTATUS。若要禁⽤跟踪标记,请使⽤DBCC TRACEOFF。
-- 下⾯⽰例是记录死锁,跟踪标志1222 或1204, 脚本如下所⽰:
--指定打开当前会话的跟踪标志1222 或1204
DBCC TRACEON (1222,1204)
--以全局⽅式打开跟踪标志1222 或1204
DBCC TRACEON (1222,1204, -1);
-- 查看跟踪标志状态,如下图所⽰
DBCC TRACESTATUS
-- 以全局⽅式关闭跟踪标志状态
DBCC TRACEOFF(1222,1204, -1)
其它跟踪标志号可参考官⽅⽂档:
四. 配置errorlog
在对象资源管理器中,展开 SQL Server 的实例,展开“管理”,右键单击“SQL Server ⽇志”,再单击“配置” 如下图所⽰:
4.1 限制错误⽇志⽂件在回收之前的数⽬
若选中此选项,将限制在错误⽇志回收前可以创建的错误⽇志数。每次启动 SQL Server 实例时都将创建新的错误⽇志。SQL Server 将保留前六个⽇志的备份,除⾮选中此选项并在下⾯指定⼀个不同的
最⼤错误⽇志⽂件数。
4.2  最⼤错误⽇志⽂件数
指定错误⽇志⽂件回收前创建的最⼤错误⽇志⽂件数。默认值为 6,即 SQL Server 在回收备份⽇志前保留的以前备份⽇志的数量。
五. SQL Server 代理错误⽇志
SQL Server 默认情况下,代理创建错误⽇志来记录警告和错误。 SQL Server 最多可以维护九个 SQL Server 代理错误⽇志。每个存档⽇志都有⼀个扩展名,指⽰该⽇志的相对存在时间。例如上图,当前表⽰最新的存档错误⽇志,⽽编号1 表⽰最旧的存档错误⽇志。
默认情况下,执⾏跟踪消息不写⼊ SQL Server 代理⽇志错误,因为它们会将⽇志填满。如果错误⽇志已满,会降低选择和分析更严重的错误的能⼒。因为⽇志会增加服务器的处理负荷,所以请务必仔细考虑是否值得将执⾏跟踪消息捕获到错误⽇志中。通常,最好仅在调试某个特定问题时捕获所有消息。
六.查看errorlog
Errorlog ⽂件以⽂本⽅式记录,⽤任何⽂件编辑器都能打开。下⾯介绍⼆个存储过程来过滤查看⽇志⽂件。
6.1  xp_enumerrorlogs
sql连接不上服务器通过xp_enumerrorlogs可以查看错误⽇志⽂件的存档和占⽤空间⼤⼩,默认参数是1, 表⽰查看sql server⽇志。参数2 表⽰查看sql server 代理错误⽇志列表。脚本如下所⽰:
-- 查看sql server⽇志列表
EXEC xp_enumerrorlogs
-- 查看代理错误⽇志
EXEC xp_enumerrorlogs 2
6.2 xp_readerrorlog
通过系统存储过程:xp_readerrorlog,能条件过滤⽇志内容查看,它⼀共有7个参数,分别是:
(1). 存档编号(0~99)
(2). ⽇志类型(1为SQL Server⽇志,2为SQL Server Agent⽇志)
(3). 查询包含的字符串
(4). 查询包含的字符串
(5). LogDate开始时间
(6). LogDate结束时间
(7). 结果排序,按LogDate排序(Desc、Asc)
例1 :查看当前sql server错误⽇志⽂件内容。存档编号默认值是0,⽇志类型默认是1,如果要查看当前sql server错误⽇志⽂件内容有三种写法,脚本如下:
EXEC xp_readerrorlog
EXEC xp_readerrorlog 0
EXEC xp_readerrorlog 0,1
例 2:查看SQL Server⽇志历史存档为编号1的⽂件中,发⽣的时间为2018-10-27 19:00点⾄2018-10-27 20:00之间的错误,排序⽅式为时间的倒排序,为了满⾜上⾯的要求,脚本如下:
EXEC xp_readerrorlog 1,1,null,null,'2018-10-27 19:00','2018-10-27 20:00','DESC'
例3:查看当前SQL Server⽇志⽂件中,错误内容⾥⾯包含字符串:“Login failed for user 'sa'”  的错误,脚本如下:
EXEC xp_readerrorlog 0,1,'Login failed for user ''sa'''
收缩Errorlog⽂件
⽣产服务器上的ErrorLog⽂件有时候会碰到⽂件很⼤的情况,尤其将登录认证情况记录到错误⽇志的情况之下,此时使⽤SQL Server Management Studio或者⽂本编辑器查看错误⽇志查看的时候速度会是个问题,对于这种情况,可以在不重新启动服务器的情况下,通过存储过程sp_cycle_errorlog来⽣成新的⽇志⽂件,并循环错误⽇志扩展编号,就如同重新启动服务时候⼀样。除了 Execute sp_cycle_errorlog之外,也可以使⽤DBCC ERRORLOG来实现同样的功能。在实际操作中,也可以通过建⽴⼀个Job定时去执⾏该存储过程,这样将⽇志⽂件⼤⼩控制在合理的范围之内。
注意事项:旧的 ErrorLog ⽂件中的数据将被覆盖!如果必须保存旧的 ErrorLog ⽂件中的数据,则可
将这些旧的 ErrorLog ⽂件复制到某个外部存储介质中。
Exec('DBCC ErrorLog')  或 exec sp_cycle_errorlog,或者可以通过以下命令,将sp 放在Job中定期执⾏。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。