检测sql server errorlog是否已被回收

时间:2013-09-25 00:20:48

标签: sql-server tsql

使用SQL Server 2012.

我想检测SQL Server的错误日志文件何时被回收(通过调用sp_cycle_errorlog或重新启动SQL服务器)。

e.g。我想检测以下内容:

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\ERRORLOG 
自上次进行类似检查以来,

已移至ERRORLOG.1。 这是出于审计目的。

到目前为止,我的方法是:

1)调用SELECT SERVERPROPERTY('ErrorLogFileName')获取日志文件路径。

2)获取ERRORLOG.1文件的最后修改时间戳(来自.net代码)。如果找到文件且时间戳晚于上次检查时间,则循环ERRORLOG。

这种方法有什么缺陷吗?你能想到的任何其他方法吗?

编辑1 :检查将通过Windows服务完成。

编辑2 :另一种方法可能是运行:xp_readerrorlog,查找文字: “SQL Server正在启动”和“错误日志已重新初始化”。 e.g:

exec xp_readerrorlog  0, 1, N'SQL Server is starting', null, null, null, null
exec xp_readerrorlog 0, 1, N'The error log has been reinitialized', null, null, null, null

这可行,但似乎有点慢。 (据推测sql server必须读取整个错误日志?)。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用未记录的内容:

exec xp_enumerrorlogs 1,它将列出SQL Engine错误日志文件号。

来源:another SQL Server Error Log question on SO,Remus Rusanu回答: