SQL Server 日志和代理的错误日志

本文介绍的日志不是事务日志,而是SQL Server 日志和代理的错误日志,按照主体把错误日志分为SQL Server、SQL Server Agent、Database Mail,以及 Windows NT。SQL Server使用日志记录数据库引擎启动和运行过程中产生的信息,这些信息不一定是“错误”的消息,按照消息的严重程度,分为三个级别,分别是:信息(Information),警告(Warning)和错误(Error),SQL Server日志会按照消息发生的时间顺序记录消息。SQL Server日志用于记录SQL Server 引擎产生的消息,SQL Server Agent错误日志用于记录Agent运行过程中产生的信息。

一,存储日志的文件

默认情况下,日志文件存放的路径:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log,系统维护 7 个SQL Server日志文件,文件名分别是: ErrorLog,ErrorLog.n(n=1、2、3、4、5、6),其中,ErrorLog 文件是当前活跃的文件,包含最新的信息,ErrorLog.6 文件记录最早产生的消息。SQL Server每次都把消息记录在最新的文件ErrorLog中。生产环境中,ErrorLog文件的大小(Size)可能会很大,因此,需要定期清理这个错误日志文件,更新的方式是循环更新(Cycle),所谓循环更新的流程,是指:删除 ErrorLog.6 文件,将ErrorLog.5重命名为ErrorLog.6,依次类推,直到将ErrorLog重命名为ErrorLog.1,最后新建一个ErrorLog文件,用于记录SQL Server 运行过程中产生的信息。

系统维护10个SQL Server Agent 错误日志文件,代理错误日志文件存放的路径是:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log,文件名分别是是:SQLAgent.out、SQLAgent.n(n=1、2、3、4、5、6、7、8、9),其中SQLAgent.out记录代理当前的消息,其更新方式和SQL Server日志文件相同。

用户可以通过修改启动参数来修改日志文件的默认存储路径:修改以 –e开头的启动参数,把该参数后面的路径修改为新的路径,就可以将错误日志存放到指定的路径下,更新只有在重启服务之后,才会生效。

SQL Server日志和代理的错误日志文件,都使用循环更新来控制文件的大小,启动日志循环更新的进程,有2种触发方式:重启 SQL Server 实例,手动执行循环更新。通常来说,错误日志的大小是不受限制的,单个日志文件太大,这会导致文件的打开和查看都十分耗时。在实际操作中,通常需要建立一个Job定时去执行该存储过程,这样可以把日志文件的大小控制在合理的范围之内。

二,使用日志查看器查看消息

用户可以使用日志查看器来查看日志的内存,也可以使用TSQL命令。用户打开Management查看SQL Server Logs,选中"Current-xxx"来查看当前的日志文件,双击使用日志查看器打开日志。

用户也可以右击SQL Server Logs,对日志文件进行配置和Recycle,在日志查看器中,也可以通过Filter或Search来过滤和搜索日志。

三,使用TSQL 脚本查看消息

TSQL提供多个系统存储过程,用于查看日志文件的内容,对日志文件进行Recycle。

1,查看Errorlog的元数据

使用 sys.xp_enumerrorlogs 查看 ErrorLog 文件的创建日期和大小,其创建日期就是第一条记录插入的日期。

exec sys.xp_enumerrorlogs

2,读取ErrorLog的信息

SQL Server提供了存储过程sys.xp_readerrorlogsys.sp_readerrorlog,用于查看错误日志。

sys.xp_readerrorlog 存储过程有7个参数,按照参数的顺序,它们依次是:

  1. @Archive,存档编号(0~99),其值是 sys.xp_enumerrorlogs返回的Archive#字段的值, 默认值是0,0 代表的是ErrorLog,1代表的是ErrorLog.1。
  2. @Logtype,日志类型,有效值是1和2,1代表SQL Server日志,2代表SQL Server Agent日志,默认值是1。
  3. @SearchText1,查询包含的字符串,大小是255,默认值是null,
  4. @SearchText2,查询包含的字符串,大小是255,默认值是null,参数3和参数4的逻辑关系是and(与关系),表示同时包含这两个文本。
  5. @StartTime,消息的开始时间
  6. @End‘Time,消息的结束时间
  7. @Order,对结果排序,按LogDate排序(Desc、Asc)对输出结果排序

sys.sp_readerrorlog有四个参数,和sys.xp_readerrorlog的前四个参数相同,sys.sp_readerrorlog内部使用sys.xp_readerrorlog来实现。

查看登陆失败的错误日志,可以看到参数4和参数5是过滤Text字段。

exec sys.sp_readerrorlog 0,1,‘login‘,‘failed‘

3,ErrorLog的循环更新

日志使用(Rollover)方式更新日志文件,如果当前活跃的ErrorLog 的文件很大,那么加载和查看的过程十分缓慢,可以运行 sys.sp_cycle_errorlog 或 DBCC ErrorLog,手动强制ErrorLog 文件迭代,避免单个ErrorLog的文件过大。

切换ErrorLog,查看ErrorLog 文件的信息

dbcc errorlog

对代理的错误日志文件进行迭代:

exec sp_cycle_agent_errorlog

每次启动 SQL Server 时,ErrorLog会自动迭代。由于ErrorLog的循环更新(Rollover)会删除最早创建的ErrorLog.6 文件,如果需要保存ErrorLog,在执行 sys.sp_cycle_errorlog 或 DBCC ErrorLog 之前,需要将ErrorLog.6 文件复制到其他存储介质上。

参考文档:

SQL Server 错误日志过滤(ERRORLOG)

SQL Server 错误日志收缩(ERRORLOG)

SQL SERVER – Read Error Log Data using sp_readerrorlog – System Stored Procedure

Reading the SQL Server log files using TSQL

Searching through the SQL Server error logs

原文地址:https://www.cnblogs.com/ljhdo/p/4651087.html

时间: 2024-11-16 17:32:34

SQL Server 日志和代理的错误日志的相关文章

SQL Server 默认跟踪应用4 -- 检测日志文件自动增长

SQL Server 默认跟踪应用4 -- 检测日志文件自动增长 用户抱怨SQL Server数据库运行非常慢.通过默认跟踪的这个查询,可以识别出log file autogrow活动导致的长时间运行.为什么如此之慢? SELECT te.name AS [trace_events_name] , t.DatabaseName , t.NTDomainName , t.ApplicationName , t.LoginName , t.Duration , t.StartTime , t.End

Windows无法启动SQL server 代理服务(服务器)错误1067:进程意外终止

Windows无法启动SQL server 代理服务(服务器)错误1067:进程意外终止 解决办法: 将关联的sql server(实例) 服务停止. 然后启动sql server代理 服务.

sql server 导入平面文件源数据,错误 0xc02020a1错误 0xc020902a 错误 0xc02020c5,返回状态值 4 和状态文本“文本被截断,或者一个或多个字符在目标代码页...

使用sql server 导入平面文件源数据时,报错:错误 0xc02020a1: 错误 0xc020902a: 错误 0xc02020c5:错误 0xc0047022: 返回状态值 4 和状态文本"文本被截断,或者一个或多个字符在目标代码页中没有匹配项. 错误 0xc02020a1: 数据流任务 1: 数据转换失败.列"列 6"的数据转换返回状态值 4 和状态文本"文本被截断,或者一个或多个字符在目标代码页中没有匹配项.". (SQL Server 导入

Sql Server R2还有备份数据库错误

错误信息描述  该数据库是运行版本10.50.1600的服务器上备份的.该版本与此服务器(运行版本10.00.1600)不兼容.请在支持该被份的服务器上还原该数据,  或者使用与此服务器兼容的备份(MicrosoftSqlServer.Smo) 错误原因  本机上两个数据库一个是sql server版本,另个就sql server r2版本.  数据备份文件应该在sql server r2版本上附加而,我的sql server r2版本登陆所用的实例是sql server版本的所以引发数据还原不

sql server 2008 配置管理器 提示错误 "远程过程调用失败。(0x800706be)" 或者shutting down(0x80041033)

打开sql server 2008 配置管理器提示如下图所示的错误 或者如下图所示的错误 在网上查找相关资料后,找到解决方法如下: 卸载 Microsoft sql server 2012 Express  LocalDB 即可 sql server 2008 配置管理器 提示错误 "远程过程调用失败.(0x800706be)" 或者shutting down(0x80041033),布布扣,bubuko.com sql server 2008 配置管理器 提示错误 "远程过

在windows 2008 R2中SQl Server 2008中代理启动失败的一个原因总结

启动SQL代理的时候报错如下: 关调用实时(JIT)调试而不是此对话框的详细信息,请参见此消息的结尾. ************** 异常文本 **************System.NullReferenceException: 未将对象引用设置到对象的实例. Server stack trace: 在 Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ObjectExplorer.FindObjectExplore

SQL Server数据库附加失败:错误5120和错误950

再次敲机房,想参考以前的物理模型,结果在附加数据库这一环节出现了点问题,下面总结一下. 1.附加数据库失败,错误5120 对于这种错误,我在网上搜集了一下,主要有以下几种解决办法: 方法一:将要附加的文件拷贝到SQL Server默认的Data目录,即C:\ProgramFiles\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA,此时附加就会成功. 方法二:在登陆验证时,选择"Windows身份验证",而不是"SQL S

解决:安装SQL Server 2008 Native Client遇到错误(在Navicat premium新建sqlserver连接时 需要):An error occurred during ...HRESULT: 0x80070422(注意尾部的错误号)

SQL Server 2008 Native Client遇到错误提示而无法继续: Microsoft SQL Server 2008 Native Client . An error occurred during the installation of assembly 'Microsoft.VC80.CRT,version="8.0.50727.1833"......HRESULT: 0x80070422 注意尾部有这个错误代码! 解决问题的思路就是 按照错误代码 进行思考和搜索

sql server 数据库 ' ' 附近有语法错误

昨天做项目时候,遇到标题的问题,代码跟踪把sql 语句 复制出来在数据库执行不了, 然后重新写个一模一样的,然后在 赋值到代码中,还是同样的错误, 就是不知道哪里出现了错误,最后 把 sql 语句写成最简单的 select * from tab  还是同样的错误. 然后 ,然后就不会了. 最后在这个语句写同样的语句,最后发现问题了,新写的sql 语句的 select 变 颜色了,而之前的 赋值出来的  select 和 字段 表名的颜色一样,证明系统 不承认它是关键字, 把这个select 删掉