2013-09-25 4 views
0

Utilisation de SQL Server 2012.détecter si errorlog serveur SQL a été recyclé

Je veux détecter les fichiers journaux d'erreurs de SQL Server ont été recyclés (soit par sp_cycle_errorlog ayant été appelé, ou le serveur SQL ayant été redémarrés).

par exemple. Je veux détecter si le contenu de:

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\ERRORLOG 

ont été déplacés vers Errorlog.1 depuis la dernière fois un contrôle similaire a été faite. Ceci est à des fins d'audit.

Jusqu'à présent, mon approche est la suivante:

1) appeler SELECT SERVERPROPERTY('ErrorLogFileName') pour obtenir chemin du fichier journal.

2) obtenir la dernière date de modification du fichier ERRORLOG.1 (à partir du code .net). Si le fichier a été trouvé et que l'horodatage est postérieur à la dernière fois qu'il a été vérifié, alors ERRORLOG a été cyclé.

Des défauts avec cette approche? D'autres approches auxquelles vous pouvez penser?

EDIT 1: la vérification sera effectuée à partir d'un service Windows.

EDIT 2: une autre approche pourrait consister à courir: Xp_readerrorlog, à la recherche de texte: « SQL Server commence » et « Le journal des erreurs a été réinitialisée ». par exemple:

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 

Cela fonctionnerait, mais semble un peu lent. (On peut supposer que le serveur sql doit lire tout le journal des erreurs?).

Répondre

1

Vous pouvez essayer d'utiliser la non documentée:

exec xp_enumerrorlogs 1, qui liste les numéros de fichiers de SQL Engine.

Source: another SQL Server Error Log question on SO, réponse par Remus Rusanu:

+0

c'est exactement ce que je avais besoin. Merci beaucoup. –

Questions connexes