SQL Serverを完全復旧モードで使用しています。完全バックアップと一連のログバックアップを前提として、最後の完全バックアップから現在の末尾ログまでのログチェーンが完了しているかどうかを確認できるようにしたいと考えています。(これらのバックアップを実際に復元することなく、ここでの目的はバックアップの一貫性をテストすることです。)
既存のバックアップでこれを行う方法はすでに知っています。RESTOREHEADERONLYを使用して、すべてのファイルのFirstLSNとLastLSNを取得します。これらのファイルは、互換性があるかどうかを判断するために、連続ファイルで比較できます。
ただし、最後のログバックアップの後にテールログが続くかどうかを確認する方法がわかりません。
テールログのFirstLSNがある場合、それを最後のログバックアップのLastLSNと比較できます。しかし、どうすれば末尾ログのFirstLSNを取得できますか?
SQL Server 2005以降(理想的にはt-sqlを使用)で機能するソリューションが必要です。これまでのところ、私はグーグルを検索して役に立たなかった。ところで 私は最初にこれをstackoverflowに投稿しました。トピックから外れているため、ここに移行しました。
編集
小さな例(SQL Server 2005、9.0.5057)で提供された2つのソリューションを試しました。
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)で同じテストを行いました。どちらのクエリでも正しい答えが得られました。