Używamy programu SQL Server z pełnym trybem odzyskiwania. Biorąc pod uwagę pełną kopię zapasową i serię kopii zapasowych dziennika, chcielibyśmy móc sprawdzić, czy łańcuch dziennika jest kompletny od ostatniej pełnej kopii zapasowej do bieżącego dziennika ogona. (Bez faktycznego przywracania tych kopii zapasowych; celem jest przetestowanie spójności kopii zapasowych).
Wiem już, jak to zrobić dla istniejących kopii zapasowych: używając PRZYWRACANIA HEADERONLY otrzymuję FirstLSN i LastLSN każdego pliku, który można porównać dla kolejnych plików, w celu ustalenia, czy są one kompatybilne.
Nie wiem jednak, jak sprawdzić, czy dziennik ogona następuje po ostatniej kopii zapasowej dziennika.
Gdybym miał FirstLSN dziennika ogona, mógłbym porównać go do LastLSN ostatniej kopii zapasowej dziennika. Ale jak mogę uzyskać FirstLSN dziennika ogona?
Potrzebuję rozwiązania, które działa od SQL Server 2005 w górę (najlepiej przy użyciu t-sql). Do tej pory szukałem Google bezskutecznie. Btw. Po raz pierwszy opublikowałem to na stackoverflow; ale migrowałem go tutaj, ponieważ został tam oznaczony jako nie na temat.
EDYTOWAĆ
Wypróbowałem dwa dostarczone rozwiązania na małym przykładzie (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
Wygląda na to, że pierwszy jest wyłączony o kilka rzędów wielkości.
Następnie wykonałem ten sam test na SQL 2008 SP1 (10.00.2531), gdzie oba zapytania dały poprawną odpowiedź.