Windows Log和SQL SERVER errorlog

前言

今天学习了下Windows Log和SQL SERVER errorlog,系统日志还是很有用的,具体要看用在什么地方,下面只记录自己工作涉及到的东西,其他的以后遇到再说吧。里面的部分资料我引用了 听风吹雨大神的资料,大家可以看下,写的非常好,这里


 

一、Windows Log

打开方式:电脑——开始——运行 ——eventvwr.msc

或者

电脑——开始——控制面板——管理工具——事件查看器

或者

直接搜索windows log

需求:查看server开机和关机信息

需要选择第三点

4处:6005表示开机,6006表示关机

5处:清除筛选条件

6处:可以点击右键选择将时间分组或者按照时间排序

输好后点击确定,在主要窗口就会筛选出我们电脑最近时间的开机关机情况


 

二、SQL SERVER errorlog

SQL Server 使用ErrorLog记录SQL Server启动和运行过程中的信息

默认情况下,SQL Server 保存 7 个 ErrorLog 文件,分别命名为: ErrorLog,ErrorLog.n(n=1,2,3,4,5,6)。ErrorLog 文件包含的信息最新,ErrorLog.6 文件包含的信息最老。每次重启 SQL Server 时,这些日志文件都做如下循环: 删除 ErrorLog.6 文件,将ErrorLog.5重命名为ErrorLog.6,依次类推,直到将ErrorLog重命名为ErrorLog.1,最后新建一个ErrorLog文件,用于存储SQL Server 运行过程的信息。

SQL Server Agent ErrorLog的文件名是:SQLAgent.n(n=1,2,3,4,5,,,,)。

ErrorLog的存放路径是在:C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log

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来实现。

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

二、xp_readerrorlog实现错误日志过滤
我们还可以通过执行存储过程EXEC xp_enumerrorlogs返回表的形式进行查看信息。xp_enumerrorlogs存储过程还提供参数,默认值为1(如果没有提供参数表示传入的参数为1),2的时候表示查询SQL Server 代理错误日志列表

(二) 接下来了解系统存储过程:xp_readerrorlog,它一共有7个参数,分别是:

1. 存档编号(0~99)

2. 日志类型(1为SQL Server日志,2为SQL Server Agent日志)

3. 查询包含的字符串

4. 查询包含的字符串

5. LogDate开始时间

6. LogDate结束时间

7. 结果排序,按LogDate排序(Desc、Asc)

(三) 接着讲解xp_readerrorlog系统存储过程的运用:

  1. 如果你想查询当前SQL Server错误日志文件(当前正在写入错误信息的文件)的内容,请执行SQL脚本:EXEC xp_readerrorlog,存档编号的默认值为0,它相当于打开文件ERRORLOG(路径可参考Figure3),如果想读取其它的历史错误日志文件,直接填写对应的存档编号就可以了,下面3条SQL语句的执行效果是一样的:

--Script2:查询当前SQL Server日志信息
EXEC xp_readerrorlog
EXEC xp_readerrorlog 0
EXEC xp_readerrorlog 0,1

 注:其实之前一直有个疑问,如下图,就是为什么如下两个errorlog时间相隔这么短,难道这2个时间点都是重启的server吗?后面我自己做了实验发现了,原来每次关闭SQL SERVER Agent就会产生一个 errorlog,而开启的时候又会产生一个,所以一个重启server或者sql server services都会涉及到SQL SERVER Agent的关闭和开启,就会有2个errorlog产生。第一个是关闭agent service第二个是开启agent service。

 

 

(四)查询SQLSERVER开机和关机的时间

--开机的时间
exec sys.sp_readerrorlog 1,1,'Registry startup parameters'
--关机的时间
exec sys.sp_readerrorlog 1,1,'Service Broker manager has shut down'

 (五)读取alwayson failover的信息

exec sys.sp_readerrorlog 0,1,'failover'

该语句如果是在failover之前主的server上面运行的,得到的信息如下,主server一共经历了2个状态变成辅助的

该语句如果是在failover之前辅助的server上面运行的,得到的信息如下,辅server一共经历了4个状态变成主的

 

posted @ 2019-04-09 15:18  秋天的林子  阅读(493)  评论(0编辑  收藏  举报