Назад | Перейти на главную страницу

Определить LSN базы данных в режиме NORECOVERY

Я восстанавливаю журналы транзакций в базе данных, но мне нужен способ узнать, с какого журнала транзакций мне следует начать. Обычно я вижу что-то вроде этого:

Журнал в этом резервном наборе заканчивается на LSN 103000001633300001, что слишком рано для применения к базе данных. Можно восстановить более свежую резервную копию журнала, которая включает номер LSN 103000002524300001.

Итак, как мне получить номер LSN 103000002524300001 программно? База данных находится в режиме NORECOVERY, поэтому DBCC LOG не работает. У меня есть записи самих журналов транзакций, поэтому я знаю их первый и последний LSN. Я просто не знаю, где сейчас находится сама база данных.

Некоторые столбцы lsn находятся в sys.master_files который на уровне сервера

Столбец "redo_start_lsn" может быть просто билетом.

Я не пробовал это, кстати ...

Вы можете получить эту информацию с помощью такого запроса:

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

Не уверен в получении первого / последнего LSN из файла журнала транзакций программно, но вы можете просто написать сценарий восстановления, чтобы попытаться применить каждый журнал транзакций, который у вас есть, - те, которые «слишком рано» (уже существуют в базе данных ) завершится с этой ошибкой. Остальное следует наносить аккуратно.

Надеюсь, у кого-то есть идея получше - я могу представить, что довольно болезненно ждать, если у вас много журналов транзакций, поскольку весь журнал, вероятно, необходимо просканировать, чтобы определить, каковы начальный и конечный LSN.

Тот факт, что у вас есть db в norecovery, означает, что вы уже восстановили какую-то резервную копию. У этой резервной копии есть заголовок. Используйте это.

RESTORE HEADERONLY возвращает FirstLSN и LastLSN резервной копии, а также DatabaseBackupLSN содержащий LSN последней полной резервной копии. Из них вы можете воссоздать необходимый порядок восстановления. Вам никогда не нужно смотреть LSN базы данных, необходимый порядок всегда можно (и должен) воссоздать с самого носителя резервной копии.