前言
今天学习了下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 FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLLog
1,查看Errorlog的元数据
使用 sys.xp_enumerrorlogs 查看 ErrorLog 文件的创建日期和大小,其创建日期就是第一条记录插入的日期。
exec sys.xp_enumerrorlogs
2,读取ErrorLog的信息
SQL Server提供了存储过程sys.xp_readerrorlog及sys.sp_readerrorlog,用于查看错误日志。
sys.xp_readerrorlog 存储过程有7个参数,按照参数的顺序,它们依次是:
- @Archive,存档编号(0~99),其值是 sys.xp_enumerrorlogs返回的Archive#字段的值, 默认值是0,0 代表的是ErrorLog,1代表的是ErrorLog.1。
- @Logtype,日志类型,有效值是1和2,1代表SQL Server日志,2代表SQL Server Agent日志,默认值是1。
- @SearchText1,查询包含的字符串,大小是255,默认值是null,
- @SearchText2,查询包含的字符串,大小是255,默认值是null,参数3和参数4的逻辑关系是and(与关系),表示同时包含这两个文本。
- @StartTime,消息的开始时间
- @End'Time,消息的结束时间
- @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个状态变成主的