使用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必须读取整个错误日志?)。
答案 0 :(得分:1)
您可以尝试使用未记录的内容:
exec xp_enumerrorlogs 1
,它将列出SQL Engine错误日志文件号。
来源:another SQL Server Error Log question on SO,Remus Rusanu回答: