Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать время на которое восстановлена БД ?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Добрый день !
Представьте себе, что мы восстанавливаем БД в MS SQL 2008R2 с последним SP на какой-то момент времени вчерашнего дня, допустим нам надо 15.00 вчерашнего дня и мы завершаем восстановление из резервной копии журнала транзакций сформированного вчера в 15.01. В GUI SSMS по выбору времени на которое мы хотим восстановиться автоматически по умолчанию тянется текущая дата и время, мы выбираем допустим время от сегодня на 15.00(забыли дату переставить на вчера). Что имеем в итоге ? В итоге мы, да, сами себе балбесы) используя резервную копию журнала транзакций от вчерашнего дня на 15.01 получим восстановление "до упора" по текущей резервной копии журнала транзакций и отметку в БД msdb таблицы restorehistory столбца stop_at на 15.00 текущего дня. Но позвольте, Господа, где отметка stop_at, а где фактически восстановленные данные ? В заблуждение очень легко войти. Как мне узнать на какое время была восстановлена БД ? Ведь по факту более чем на 15.01 вчерашнего числа она восстановиться не может, но где это прочекать ?
4 ноя 17, 07:22    [20926610]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
stavgreengo
В заблуждение очень легко войти. Как мне узнать на какое время была восстановлена БД ? Ведь по факту более чем на 15.01 вчерашнего числа она восстановиться не может, но где это прочекать ?

Ничего не понял. У Вас физически в журнале нет ничего после 15:01 вчерашнего числа. Вы ставите руками любое время после этой отметки и говорите "как мне узнать время?" - да посмотреть на журнал, там ничего нет после 15:01 вчера.

"Что имеем в итоге ? В итоге мы, да, сами себе балбесы" - согласен, если человек тыкает кнопки и не следит за тем, что хочет сделать, а потом задает себе вопрос "а куда я попал, как бы это узнать", то да. Ну что могу порекомендовать - не допускайте до сервера никого из сотрудников, которые задают такие вопросы Вам, а делайте все лично.
4 ноя 17, 13:28    [20927047]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
stavgreengo,
+

В сущности Вы хотите следующее. В служебной таблице после рестора занесено, что дата сегодня 15:01. Вы хотите в другой таблице найти, что из рестора приехал последний чекпойнт, который был выполнен вчера в 15:01, то есть уже база работает, уже есть новые данные, но есть подозрение, что из журнала взяли условно на вчера на 10:01 вместо сегодня на 15:01 и часть данных не возвращена, а пользователям отрапортовали, что потеряны данные в базе, которые были только в промежутке с 15:01 вчера до сегодня, момента восстановления. Вы это имели в виду? Получить точное время того момента, на который реально откатились?
Ну так если реально выбрали вчера 10:01 - то наверное в stop_at это и увидите. А если в stop_at видите что-либо после вчера 15:01, а при этом знаете - и можете проверить - что в резервной копии журнала транзакций просто физически нет ничего после вчера 15:01 - значит это вчера 15:01.
4 ноя 17, 13:41    [20927060]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Хорошо. Конкретизирую, минуя тупые вопросы своих коллег, которые меня замещают во время отпуска и на которые я не могу ответить. Вот если я так неправильно восстановил базу данных, где я могу посмотреть фактическое время восстановления ? Где отображается время прохода последней закомиченной транзакции или номера lsn ? Как я им могу объяснить что база по факту имеет актуальность такой-то даты и такого-то числа, а не дизинформация из stop_at которая ихними же кривыми руками вбита ?

З.Ы.: прошу прощения за эмоциональность, но как-то надо вразумить своих не DBA коллег на время моего отпуска, а то они задают вопросы, на которые и сто мудрецов ответы найти не могут)
4 ноя 17, 14:15    [20927112]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Как мне узнать время на которое была восстановлена БД ?
4 ноя 17, 14:19    [20927116]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Eleanor
Member

Откуда:
Сообщений: 2867
stavgreengo,

Пошлите их почитать BOL, чтобы они поняли, что означает синтаксис STOPAT:

RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY…
The recovery point is the latest transaction commit that occurred at or before the datetime value that is specified by time.

Т.е. если в логе написано
Log was restored... first LSN..., last LSN... TYPE=DISK: {'C:\Вчерашний_бэкап_15-00-00.bak'}), а stop_at - это сегодняшний день, то они восстановились на момент окончания вчерашнего бэкапа.
4 ноя 17, 21:33    [20927687]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Eleanor
Member

Откуда:
Сообщений: 2867
stavgreengo,

Ваши коллеги также могут повторно провести эксперимент по восстановлению и увидеть сообщение:

This backup set contains records that were logged before the designated point in time. The database is being left in the restoring state so that more roll forward can be performed
- не удалось дойти до указанного времени восстановления, поэтому база оставлена в состоянии restoring, чтобы вы нашли остальные бэкапы логов и донакатили их.

BOL:
Если указанная отметка (номер LSN) или время назначены после создания последней резервной копии журналов, база данных остается в невосстановленном состоянии, как если бы инструкция RESTORE LOG работала с параметром NORECOVERY.
4 ноя 17, 21:47    [20927716]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
stavgreengo
минуя тупые вопросы своих коллег, которые меня замещают во время отпуска и на которые я не могу ответить. Вот если я так неправильно восстановил базу данных

Элеанора дала полный развернутый ответ технический. Я же могу приплюсовать к нему ответ политический - заводите в файле Excel/Libre Office Calc обязательный для заполнения лист, в столбцах типа название базы, полный путь к бэкапу, полный путь к бэкапу журнала, кто восстанавливал, когда восстанавливал, отметка в журнале о последнем чекпойнте, отметка времени, на которую выбрано восстановление, кто контролировал процесс рестора, кто проверил полноту данных в БД после успешного окончания рестора, причина срыва рестора (с кодом ошибки), время срыва рестора (все времена с точностью до секунды).
+

Пока человек физически не заполнил, а второй глазами не посмотрел и не одобрил - запретить регламентом нажимать "старт рестора". Потому что одна голова хорошо, а две лучше - особенно если вечер пятницы, а гендир стоит над душой и орет "база не работает, СРОЧНО делайте что-нибудь!"
4 ноя 17, 23:27    [20927916]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать время на которое восстановлена БД ?  [new]
Eleanor
Member

Откуда:
Сообщений: 2867
stavgreengo,

Еще можете не мучать колег-не-ДБА объяснениями, а поставить им последний SSMS 17.

Там и время по дефолту стоит не текущее, а то, что есть в последнем бэкапе. И при указании времени больше имеющегося в бэкапах, GUI автоматически снимет и накатит последний бэкап лога, чтобы добраться до указанной точки времени.

Единственный минус - им тогда придется не забывать снимать галочку Leave source database in the restoring state.
5 ноя 17, 01:31    [20928060]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить