sqlverJava监控_SQLServer数据库状态监控-错误日志

更新时间:2023-06-02 21:09:07 阅读: 评论:0

sqlverJava监控_SQLServer数据库状态监控-错误⽇志⽆论是操作系统 (Unix 或者Windows),还是应⽤程序 (Web 服务,数据库系统等等) ,通常都有⾃⾝的⽇志机制,以便故障时追溯现场及原因。Windows Event Log和 SQL Server Error Log就是这样的⽇志, PS: SQL Server 中的错误⽇志 (Error Log) 类似于 Oracle中的alert ⽂件。
⼀. 错误⽇志简介
1. Windows事件⽇志与SQL Server 错误⽇志
Windows事件⽇志中,应⽤程序⾥的SQL Server和SQL Server Agent服务,分别对应来源⾃MSSQLSERVER和SQLSERVERAGENT 的⽇志信息;
SQL Server错误⽇志中信息,与Windows事件⽇志⾥来源⾃MSSQLSERVER的⽇志信息基本⼀致,不同的是,Windows事件⽇志⾥信息为应⽤程序级,较为简洁些,⽽SQL Server错误⽇志⾥通常有具体的数据库错误信息。⽐如:
Windows事件⽇志中错误信息:
Login failed for ur 'sa'. Reason: Password did not match that for the login provided. [CLIENT: 10.213.20.8]
SQL Server错误⽇志中错误信息:
Login failed for ur 'sa'. Reason: Password did not match that for the login provided. [CLIENT: 10.213.20.8]
Error: 18456, Severity: 14, State: 8.
函授网上报名
2. 如何理解SQL Server的Error message?
以上⾯的Error: 18456, Severity: 14, State: 8.为例:
(1) Error,错误编号,可以在系统表⾥查到对应的⽂本信息;
lect * ssages where message_id = 18456
(2) Severity,错误级别,表明这个错误的严重性,⼀共有25个等级,级别越⾼,就越需要我们去注意处理,20~25级别的错误会直接报错并跳出执⾏,⽤SQL语句的TRY…CATCH是捕获不到的;
(3) State,错误状态,⽐如18456错误,帮助⽂档记载了如下状态,不同状态代表不同错误原因:
1. Error information is not available. This state usually means you do not have permission to receive
the error details. Contact your SQL Server administrator for more information.
2.  Ur ID is not valid.
5.  Ur ID is not valid.
6.  An attempt was made to u a Windows login name with SQL Server Authentication.
7.  Login is disabled, and the password is incorrect.
8.  The password is incorrect.
9.  Password is not valid.
11. Login is valid, but rver access failed.
12. Login is valid login, but rver access failed.
18. Password must be changed.
还有⽂档未记载的State: 10, State: 16,通常是SQL Server启动帐号权限问题,或者重启SQL Server服务就好了。
3. SQL Server 错误⽇志包含哪些信息
SQL Server错误⽇志中包含SQL Server开启、运⾏、终⽌整个过程的:运⾏环境信息、重要操作、级别⽐较⾼的错误等:
(1)  SQL Server/Windows基本信息,如:版本、进程号、IP/主机名、端⼝、CPU个数等;
particular
(2) SQL Server启动参数及认证模式、内存分配;
(3) SQL Server实例下每个数据打开状态(包括系统和⽤户数据库);
(4) 数据库或服务器配置选项变更,KILL操作,开关DBCC跟踪,登录失败等等
(5) 数据库备份/还原的记录;
(6) 内存相关的错误和警告,可能会DUMP很多信息在错误⽇志⾥;
(7) SQL Server调度异常警告、IO操作延迟警告、内部访问越界 (也就是下⾯说到的Error 0);
(8) 数据库损坏的相关错误,以及DBCC CHECKDB的结果;
(9) 实例关闭时间;
另外,可以⼿动开关⼀些跟踪标记(trace flags),来⾃定义错误⽇志的内容,⽐如:记录如⽤户登⼊登出记录(login auditing),查询的编译执⾏等信息,⽐较常⽤的可能是⽤于检查死锁时的1204/1222 跟踪标记。
通常错误⽇志不会记录SQL语句的性能问题,如:阻塞、超时的信息,也不会记录Windows层⾯的异常(这会在windows事件⽇志中记载)。
SQL Server Agent错误⽇志中同样也包括:信息/警告/错误这⼏类⽇志,但要简单很多。
4. SQL Server 错误⽇志存放在哪⾥
假设SQL Server被安装在X:\Program Files\Microsoft SQL Server,则SQL Server 与SQL Server Agent的错误⽇志⽂件默认被放在:
X:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ ERRORLOG ~ ERRORLOG.n
X:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\SQLAGENT.n and SQLAGENT.out.
高考机器人
如果错误⽇志路径被管理员修改,可以通过以下某种⽅式找到:
(1) 操作系统的应⽤程序⽇志⾥,SQL Server启动时会留下错误⽇志⽂件的路径;
(2) 通过SSMS/管理/错误⽇志,SQL Server启动时会留下错误⽇志⽂件的路径;
(3) SQL Server配置管理器⾥,点击SQL Server实例/属性/⾼级/启动参数 (Startup parameters) ;
(4) 通过⼀个未记载的SQL语句 (在SQL Server 2000中测试⽆效,2005及以后可以):
SELECT SERVERPROPERTY('ErrorLogFileName')
5. SQL Server 错误⽇志⽬录下的其他⽂件
在错误⽇志⽬录下除了SQL Server和SQL Server Agent的⽇志,可能还会有以下⽂件:
tiktok是什么意思(1) 维护计划产⽣的report⽂件 (SQL Server 2000的时候,后来的维护计划log记录在msdb);
(2) 默认跟踪(default trace) ⽣成的trace⽂件,PS: 审计(Audit) 产⽣的trace⽂件在\MSSQL\DATA下;
(3) 全⽂索引的错误、⽇志⽂件;
(4) SQLDUMP⽂件,⽐如:exception./SQLDump0001.mdmp,⼤多是发⽣Error 0时DUMP出来的,同时在错误⽇志⾥通常会有类似如下记录:
学位英语考试网Error: 0, Severity: 19, State: 0
SqlDumpExceptionHandler: Process 232 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
顺便说下ERROR 0 的解释:
Is your rver up to date with rvice packs? If not, you might try updating to the latest build. This error is an internal error in sql rver. If you are up to date, you should report it to MS.
⼆. 错误⽇志维护
1. 错误⽇志⽂件个数
1.1 SQL Server错误⽇志
SQL Server错误⽇志⽂件数量默认为7个:1个正在⽤的(ERRORLOG)和6个归档的(ERRORLOG.1 – ERRORLOG.6),可以配置以保留更多(最多99个);
巴克兰(1) 打开到SSMS/管理/SQL Server Logs⽂件夹/右击/配置;
(2) 通过未记载的扩展存储过程,直接读写注册表也⾏:
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'NumErrorLogs', REG_DWORD, 50
GO
--Check current errorlog amout
USE [master]
GO
DECLARE @i int
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'NumErrorLogs', @i OUTPUT
SELECT @i
SQL Server作为⼀个Windows下的应⽤程序,很多信息是写在注册表⾥的,⾃然也可以⼿动打开注册表编辑器或写SHELL去修改注册表来作配置。
最后,可以通过 如下SQL语句查看已存在的错误⽇志编号、起⽌时间、当前⼤⼩。
p_enumerrorlogs
1.2 SQL Server Agent错误⽇志
SQL Server Agent错误⽇志⽂件数量共为10个:1个正在⽤的(SQLAGENT.OUT),9个归档的(SQLAGENT.1 - SQLAGENT.9),个数不可以修改,但可以配置⽇志所记载的信息类型:信息、警告、错误。
(1) 打开到SSMS/SQL Server Agent/Error Logs⽂件夹/右击/配置;
(2) 未记载的扩展存储过程:
USE [msdb]
GO
EXEC msdb.dbo.sp_t_sqlagent_properties @errorlogging_level=7
GO
⾄于@errorlogging_level各个值的意思,由于没有⽂档记载,需要⾃⼰测试并推算下。
zey2. 错误⽇志⽂件归档
2.1 为什么要归档错误⽇志?
假设SQL Server实例从来没被重启过,也没有⼿动归档过错误⽇志,那么错误⽇志⽂件可能会变得很⼤,尤其是有内部错误时会DUMP很多信息,⼀来占空间,更重要的是:想要查看分析也会不太⽅便。
SQL Server/SQL Server Agent 错误⽇志有2种归档⽅式,即:创建⼀个新的⽇志⽂件,并将最⽼的⽇志删除。
(1) ⾃动归档:在SQL Server/ SQL Server Agent服务重启时;
(2) ⼿动归档:定期运⾏如下系统存储过程
EXEC master..sp_cycle_errorlog; --DBCC ERRORLOG 亦可
EXEC msdb.dbo.sp_cycle_agent_errorlog;--SQL Agent 服务需在启动状态下才有效
2.2 可不可以根据⽂件⼤⼩来归档?
可能有⼈会觉得,虽然很久没归档,但是错误⽇志确实不⼤,没必要定期归档,最好可以根据⽂件⼤⼩来判断。有以下⼏种⽅法:
(1) 有些监控⼯具,⽐如:SQL Diagnostic manager,就有检测错误⽇志⽂件⼤⼩,并根据⼤⼩来决定是否归档的功能;
(2) ⾃定义脚本也可以,⽐如:powershell, xp_enumerrorlogs 都可以检查错误⽇志⼤⼩;
(3) SQL Server 2012⽀持⼀个注册表选项,以下语句限制每个错误⽇志⽂件为5M,到了5M就会⾃动归档,在2008/2008 R2测试⽆效:
深圳小学英语
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'ErrorLogSizeInKb', REG_DWORD, 5120;
三. 错误⽇志查看及告警
错误⽇志以⽂本⽅式记录,记事本就可以查看,如果错误⽇志很⼤,可以选择Gvim/UltraEdit /DOS窗⼝type errorlog等,这些⽅式都会“分页”加载,不会卡住。
1. 错误⽇志查看
SQL Server提供了以下2种⽅式查看:
(1) ⽇志查看器 (log viewer),除了可以查看SQL Server 与SQL Server Agent的错误⽇志,还可以查看操作系统⽇志、数据库邮件⽇志。不过当⽇志⽂件太⼤时,图形界⾯⾮常慢;
(2) 未记载的扩展存储过程xp_readerrorlog,另外还有⼀个名为sp_readerrorlog的存储过程,它是对xp_readerrorlog的简单封装,并且只提供了4个参数,直接使⽤xp_readerrorlog即可:
在SQL Server 2000⾥,仅⽀持⼀个参数,即错误⽇志号,默认为0~6:
exec dbo.xp_readerrorlog  --写0或null都会报错,直接运⾏即可
exec dbo.xp_readerrorlog 1
exec dbo.xp_readerrorlog 6
--sql rver 2000 read error log
if OBJECT_ID('tempdb..#tmp_error_log_all') is not null西班牙与意大利
drop table #tmp_error_log_all
create table #tmp_error_log_all
(
info varchar(8000),--datetime + processinfo + text
num  int口语交际劝说
)
inrt into #tmp_error_log_all
exec dbo.xp_readerrorlog
--split error text
if OBJECT_ID('tempdb..#tmp_error_log_split') is not null
drop table #tmp_error_log_split
create table #tmp_error_log_split
(
logdate      datetime,--datetime
processinfo  varchar(100),--processinfo
info        varchar(7900)--text
)
inrt into #tmp_error_log_split
lect CONVERT(DATETIME,LEFT(info,22),120),
LEFT(STUFF(info,1,23,''),CHARINDEX(' ',STUFF(info,1,23,'')) - 1),
LTRIM(STUFF(info,1,23 + CHARINDEX(' ',STUFF(info,1,23,'')),''))
from #tmp_error_log_all
where ISNUMERIC(LEFT(info,4)) = 1
and info <> '.'
and substring(info,11,1) = ' '
lect *
from #tmp_error_log_split
where info like '%18456%'
在SQL Server 2005及以后版本⾥,⽀持多达7个参数,说明如下:
exec dbo.xp_readerrorlog 1,1,N'string1',N'string2',null,null,N'desc'
参数1.⽇志⽂件号: 0 = 当前, 1 = Archive #1, 2 = Archive #2,
参数2.⽇志⽂件类型:  1 or NULL = SQL Server 错误⽇志, 2 = SQL Agent 错误⽇志参数3.检索字符串1: ⽤来检索的字符串
参数4.检索字符串2:  在检索字符串1的返回结果之上再做过滤
参数5.⽇志开始时间
参数6.⽇志结束时间
参数7.结果排序: N'asc' = 升序, N'desc' = 降序

本文发布于:2023-06-02 21:09:07,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/131804.html

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

标签:错误   信息   参数   状态
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图