web-dev-qa-db-ja.com

NORECOVERYモードでデータベースのLSNを決定する

トランザクションログをデータベースに復元していますが、どのトランザクションログから始めるべきかを知る方法が必要です。通常、次のようなものが表示されます。

このバックアップセットのログはLSN103000001633300001で終了しますが、これはデータベースに適用するには時期尚早です。 LSN103000002524300001を含む最新のログバックアップを復元できます。

では、LSN 103000002524300001をプログラムで取得するにはどうすればよいですか?データベースはNORECOVERYモードであるため、DBCCLOGは機能しません。トランザクションログ自体の記録があるので、最初と最後のLSNが何であるかがわかります。データベース自体が現在どこにあるのかわかりません。

4
Clyde

一部のlsn列は sys.master_files にあります。これはサーバーレベルです。

「redo_start_lsn」列は単なるチケットの場合があります。

私はこのところで試していません...

4
gbn

この情報は、次のようなクエリで取得できます。

SELECT TOP 1 b.type, b.first_lsn, b.last_lsn, b.checkpoint_lsn, b.database_backup_lsn
FROM msdb..restorehistory a
INNER JOIN msdb..backupset b ON a.backup_set_id = b.backup_set_id
WHERE a.destination_database_name = 'AV_PROD'
ORDER BY restore_date DESC
3
Elijah W. Gagne

プログラムでトランザクションログファイルから最初/最後のLSNを取得するかどうかはわかりませんが、リカバリをスクリプト化して、「早すぎる」(DBにすでに存在する)各トランザクションログを順番に適用しようとすることができます。 )はこのエラーで失敗します。残りはきれいに適用する必要があります。

しかし、誰かがより良いアイデアを持っていることを願っています-トランザクションログがたくさんある場合は、最初と最後のLSNが何であるかを判断するためにログ全体をスキャンする必要があるため、待つのは非常に苦痛だと想像できます。

0
voretaq7

RESTORE HEADERONLY は、バックアップのFirstLSNLastLSN、および最後の完全バックアップのLSNを含むDatabaseBackupLSNを返します。これらから、必要な復元順序を再作成できます。データベースLSNを確認する必要はありません。必要な順序は、バックアップメディア自体から常に再作成できます(また、再作成する必要があります)。

0
Remus Rusanu

Norecoveryにデータベースがあるという事実は、ある種のバックアップをすでに復元していることを意味します。そのバックアップにはヘッダーがあります。それを使用してください。

0
Ben Thul