Мы используем SQL Server с режимом полного восстановления. Учитывая полную резервную копию и серию резервных копий журналов, мы хотели бы иметь возможность проверить, завершена ли цепочка журналов от последней полной резервной копии до текущего хвостового журнала. (Без фактического восстановления этих резервных копий; целью здесь является проверка целостности резервных копий.)
Я уже знаю, как это сделать для существующих резервных копий: используя RESTORE HEADERONLY, я получаю FirstLSN и LastLSN каждого файла, которые можно сравнить для последовательных файлов, чтобы определить, совместимы ли они.
Однако я не знаю, как проверить, следует ли хвостовой журнал последней резервной копии журнала.
Если бы у меня был FirstLSN хвостового журнала, я мог бы сравнить его с LastLSN последней резервной копии журнала. Но как я могу получить FirstLSN хвостового журнала?
Мне нужно решение, которое работает с SQL Server 2005 и выше (в идеале, используя t-sql). До сих пор я искал Google безрезультатно. Btw. Я впервые опубликовал это на stackoverflow; но перенесли это сюда, так как это было отмечено не по теме.
РЕДАКТИРОВАТЬ
Я попробовал два предоставленных решения на небольшом примере (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
Таким образом, кажется, что первый выключен на несколько порядков.
Затем я провел такой же тест на SQL 2008 SP1 (10.00.2531), где оба запроса дали правильный ответ.