使用 SQL Server 2012。
我想检测 SQL Server 的错误日志文件何时被回收(通过调用 sp_cycle_errorlog 或重新启动 SQL Server)。
例如,我想检测以下内容是否:
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 正在启动”和“错误日志已重新初始化”。例如:
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 必须读取整个错误日志?)。