0

使用 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 必须读取整个错误日志?)。

4

1 回答 1

1

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

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

资料来源:关于 SO 的另一个 SQL Server 错误日志问题,由 Remus Rusanu 回答:

于 2013-09-25T07:45:11.593 回答