Wir verwenden SQL Server mit vollständigem Wiederherstellungsmodus. Bei einer vollständigen Sicherung und einer Reihe von Protokollsicherungen möchten wir überprüfen können, ob die Protokollkette von der letzten vollständigen Sicherung bis zum aktuellen Endprotokoll vollständig ist. (Ohne diese Sicherungen tatsächlich wiederherzustellen. Der Zweck hier besteht darin, die Konsistenz der Sicherungen zu testen.)
Ich weiß bereits, wie dies für die vorhandenen Sicherungen gemacht wird: Mit RESTORE HEADERONLY erhalte ich den FirstLSN und LastLSN jeder Datei, die für aufeinanderfolgende Dateien verglichen werden können, um festzustellen, ob sie kompatibel sind.
Ich weiß jedoch nicht, wie ich überprüfen soll, ob das Endprotokoll der letzten Protokollsicherung folgt.
Wenn ich den FirstLSN des Endprotokolls hätte, könnte ich ihn mit dem LastLSN der letzten Protokollsicherung vergleichen. Aber wie kann ich den FirstLSN des Endprotokolls erhalten?
Ich benötige eine Lösung, die ab SQL Server 2005 funktioniert (idealerweise mit t-sql). Bisher habe ich vergeblich bei Google gesucht. Übrigens. Ich habe dies zuerst auf stackoverflow gepostet. aber migrierte es hierher, da es dort als Off-Topic markiert wurde.
BEARBEITEN
Ich habe die beiden bereitgestellten Lösungen anhand eines kleinen Beispiels ausprobiert (SQL Server 2005, 9.0.5057):
BACKUP DATABASE TestDb TO DISK = 'C:\temp\backup test\Full.bak'
-- fire some update queries
BACKUP LOG TestDb TO DISK = 'C:\temp\backup test\Log1.bak'
-- fire both queries from the provided answers:
-- Martin Smith's answer yields: 838886656088920652852608
-- Shawn Melton's answer yields: 46000000267600001
RESTORE HEADERONLY FROM DISK = 'C:\temp\backup test\Log1.bak'
-- yields: 46000000267600001
Es scheint also, dass der erste um mehrere Größenordnungen abweicht.
Ich habe dann den gleichen Test mit SQL 2008 SP1 (10.00.2531) durchgeführt, wobei beide Abfragen die richtige Antwort ergaben.