Узнайте, когда была сделана резервная копия базы данных
-
20-08-2019 - |
Вопрос
Люди,
Предположим, вы получили отключенную резервную копию базы данных SQL Server (2005 или 2008) и восстановили ее в своем экземпляре SQL Server.
Есть ли способ, есть ли системный каталог или что-то в этом роде, узнать, когда произошла последняя операция записи в эту конкретную базу данных?Я хотел бы иметь возможность узнать, с какого дня была сделана резервная копия конкретной базы данных - к сожалению, на самом деле это нигде явно не записывается, и проверка всех десятков таблиц данных на наличие самой высокой отметки даты / времени на самом деле тоже не вариант....
Есть какие-нибудь идеи?Конечно - я могу посмотреть на отметку даты / времени в файле * .bak - но могу ли я узнать более точно из SQL Server (Management Studio)??
Спасибо!Марк
Решение
Вы можете попробовать RESTORE HEADERONLY
в вашем файле резервной копии, как описано здесь
это должно дать вам информацию, которую вы ищете.
Другие советы
Если у вас есть доступ к экземпляру SQL Server, на котором первоначально было запущено резервное копирование, вы должны иметь возможность запрашивать msdb
:
SELECT backup_set_id, backup_start_date, backup_finish_date
FROM msdb.dbo.backupset
WHERE database_name = 'MyDBname' AND type = 'D'
Существует несколько таблиц, относящихся к наборам резервных копий:
- backupfile - содержит одну строку для каждого резервного файла данных или файла журнала
- backupmediafamily - содержит одну строку для каждого семейства носителей
- backupmediaset - содержит одну строку для каждого набора резервных носителей
- backupset - содержит одну строку для каждого набора резервных копий
Запрашивая эти таблицы, вы можете определить, когда создавались последние резервные копии, какой тип резервных копий создавался и куда были записаны файлы.
Немного поздновато, но должно быть тем, чего вы хотите.
Каждая запись в базу данных является записью в файле журнала.Который имеет LSN.Это должно быть сохранено в резервной копии, по крайней мере, для восстановления журнала.
Итак, как сопоставить LSN с датой-временем?
SELECT TOP 5 [End Time] AS BringFirst, *
FROM ::fn_dblog (NULL, NULL)
WHERE [End Time] IS NOT NULL
ORDER BY BringFirst DESC
Я никогда не использовал это раньше (просто поиграл с этим ответом).Некоторые записи, скорее всего, являются частью самой резервной копии, но вы должны быть в состоянии отличить их, немного покопавшись.
насколько я знаю, в главной базе данных существует Лог-таблица, где каждая запись хранится с подробной информацией.НО я не уверен, нужно ли вам включать механизм ведения журнала, чтобы по умолчанию не регистрироваться, и вы должны включить его.В Oracle, например, это обходной путь, существует журнал таблицы system-database, к которому вы можете запросить.
Если это не так - вы все равно можете сами написать триггер и применить его к каждой необходимой таблице / столбцу и самостоятельно вести журнал.