SQL Server数据库状态监控 - 错误日志

发表于:2014-10-24 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:张骞    来源:51Testing软件测试网采编

  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的日志,可能还会有以下文件:
  (1) 维护计划产生的report文件 (SQL Server 2000的时候,后来的维护计划log记录在msdb);
  (2) 默认跟踪(default trace) 生成的trace文件,PS: 审计(Audit) 产生的trace文件在\MSSQL\DATA下;
  (3) 全文索引的错误、日志文件;
  (4) SQLDUMP文件,比如:exception.log/SQLDump0001.txt/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 的解释:
  You've hit a bug of some kind - an access violation is an unexpected condition. You need to contact Product Support (http://support.microsoft.com/sql) to help figure out what happened and whether there's a fix available.
  Is your server up to date with service packs? If not, you might try updating to the latest build. This error is an internal error in sql server. 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语句查看已存在的错误日志编号、起止时间、当前大小。
  EXEC master..xp_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_set_sqlagent_properties @errorlogging_level=7
  GO
  至于@errorlogging_level各个值的意思,由于没有文档记载,需要自己测试并推算下。
  2. 错误日志文件归档
  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;
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号