SQL SERVER ErrorLog文件
SQL SERVER ErrorLog文件一、SQL Server ErrorLog文件的初步认识
1、在日常SQL Server的维护中,查看SQL Server错误日志可以用来确认服务的运行情况:例如服务的启停、备份和还原操作、登录认证情况等等,如果SQLSERVER遇到了比较严重的问题,在errorlog里都会有所显示。
2、使用SQL Server Management Studio或文本编辑器都可以查看SQL Server错误日志。
3、默认情况下,错误日志位于Program Files/Microsoft SQL Server/MSSQL.n/MSSQL/LOG/ERRORLOG和ERRORLOG.n文件中。可以通过如下方法来修改该路径
(1)、在配置管理器中,单击“SQL Server服务”。
(2)、在右窗格中,右键单击SQL Server (<实例名>),再单击“属性”
(3)、在“高级”选项卡的“启动参数”框中,有以分号分隔的参数。其中,有一个以–e开头的参数,修改该参数后面的路径,就可以将错误日志存放到指定的路径下,修改完成需要重启服务生效。
4、默认保留有7个SQL Server错误日志文件,分别是:ErrorLog,Errorlog.1~Errorlog.6,当前的错误日志(文件ErrorLog)没有扩展名。
5、每当启动SQL Server实例时,这些日志文件都将作如下循环
(1)、删除ERRORLOG.6文件;
(2)、将原ERRORLOG.5文件更名为ERRORLOG.6文件;
(3)、将原ERRORLOG.4文件更名为ERRORLOG.5文件;
(4)、将原ERRORLOG.3文件更名为ERRORLOG.4文件;
(5)、将原ERRORLOG.2文件更名为ERRORLOG.3文件;
(6)、将原ERRORLOG.1文件更名为ERRORLOG.2文件;
(7)、将原ERRORLOG文件更名为ERRORLOG.1文件;
(8)、创建一个新的ERRORLOG文件。也就是先进先出原则,如此循环6次,就可以将ERRORLOG都更新一遍。
二、ErrorLog显示包括以下内容
(1)SQL的版本,以及Windows和Processor基本信息
(2)SQL的启动参数,以及认证模式,内存分配模式
(3)每个数据库是否能够被正常打开。如果不能,原因是什么
(4)数据库损坏相关的错误
(5)数据库备份与恢复动作记录
(6)DBCC CHECKDB记录
(7)内存相关的错误和警告
(8)SQL调度出现异常时的警告。一般SERVER HANG 服务器死机会伴随着有这些警告
(9)SQL I/O操作遇到长时间延迟的警告
(10)SQL在运行过程中遇到的其他级别比较高的错误
(11)SQL内部的访问越界错误(Access Violation)
(12)SQL服务关闭时间
三、在SSMS里也能看到SQL ErrorLog,SSMS里还包括筛选和搜索功能
四、Errorlog文件大的解决方法
SQL Server数据库服务器上的Errorlog文件有时候会出现文件很大的情况,可以在SQL Server不重启的情况下,解决Errorlog文件大的问题
方法一,手动执行存储过程清除
通过存储过程sp_cycle_errorlog来生成新的日志文件,并循环错误日志扩展编号,就如同重新启动数据库服务时候一样。操作步骤:
1、打开【SQL Server Managemen Studio】窗口,选中根目录并单击工具栏上的【新建查询】按钮,在查询窗口中输入命令“EXEC sp_cycle_errorlog”,
2、然后单击工具栏上的【执行】按钮,这个命令强制SQL Server完成一次ERRORLOG文件的切换,提示“DBCC执行完毕”即可,执行完成后单击【对象资源管理器】窗口中的【刷新】按钮发现此时已进行了一次玄幻迭代,可执行多次存储过程
方法二,定期执行存储过程清除
在实际情况中,每次手动清除日志后,可能过几天错误日志文件又变得很大了,此时建议通过定期切换写入error log的方法,一般可以使用DBCC errorlog命令来操作,在查询窗口中输入命令“EXEC(‘DBCC Errorlog’)”,然后单击工具栏上的【执行】按钮即可
或者通过建立定时执行存储过程“sp_cycle_errorlog”的作业,这样日志文件的大小将被控制在合理的范围之内。一般可以在SQL Server代理作业中使用“DBCC errorlog”命令来完成定期切换error log,具体步骤:
1、设置自动启动SQL Server Agent服务
单击【开始】菜单下的【运行】,输入命令“service.msc”并单击【确定】按钮,打开【服务】窗口,在右侧服务列表中找到“SQL Server Agent(MSSQLSERVER)”服务,右键单击该服务选择【属性】菜单,设置“启动类型”为“自动”,并单击【启动】按钮启动该服务,最后单击【确定】按钮保存设置
2、创建SQL Server代理作业
打开【SQL Server Management Studio】窗口,依次展开【数据库服务器】——【SQL Server 代理】,右键单击【作业】节点,选择【新建作业】菜单,在打开的【新建作业】窗口中,选择“常规”页签中输入作业名称
3、选择“步骤”页签
单击【新建】在弹出的【新建作业步骤】窗口中输入”步骤名称“,”数据库“默认选择为”master“,然后在”命令“框中输入以下语句,并单击【确认】按钮保存即可
create procedure sp_cycle_errorlog
as
if(not (is_srvrolemember('sysadmin') =1)) --Make sure that it is the sysadmin role to execute the code
begin
return --here can raise an error
return(1)
end
dbcc errorlog
return (0)
go
4、选择”计划“页签
单击【新建】按钮,在弹出的【新建作业计划】窗口中输入计划名称,按业务需求设置执行参数,然后单击【确定】按钮保存
5、回到【新建作业】页面,单击【确定】按钮即创建完成
6.设置好“ClearErrorlog”作业计划后,状态显示为“未运行”,右键单击该作业,选择【开始作业】菜单,执行后提示“成功”状态,单击【关闭】按钮即可
五、errorlog文件不能反映的问题有
(1)阻塞问题。只要阻塞还没有严重影响SQLSERVER的线程调度,errorlog里是不会有体现
(2)普通性能问题,超时问题。如果性能问题不是由于内存使用异常、线程调度异常,或者是I/O子系统反应非常缓慢,
而是由于表格或语句设计导致,errorlog里也不会有所反映
(3)Windows层面异常。