Уважаемые слушатели! Обращаем ваше внимание, что 01.05.2024 и 09.05.2024 у нас выходные дни. Вы можете оставить сообщение в чате, мы обязательно ответим!

Корзина

Корзина

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Как восстановить согласованную резервную копию нескольких баз данных

Самородов Федор Анатольевич: Как восстановить согласованную резервную копию нескольких баз данных

СФА

Современные приложения всё чаще проектируются так, чтобы работать с данными не в одной базе данных, а в нескольких. Это действительно полезно - таким образом можно повысить масштабируемость, производительность, надёжность и управляемость приложения. Но, как всегда бывает в инженерном деле, это не обходится без сопутствующих недостатков. Главный из которых - усложнение системы. Возможности системы растут вместе с её сложностью, что повышает требования к обслуживанию многобазовых приложений. Одна из проблем, которую придётся решать при эксплуатации таких приложений - создание (и последующее восстановление) согласованных резервных копий нескольких баз данных.

Перед вами аналог приложения, работающего с несколькими БД. Оно постоянно обрабатывает данные в базах, согласовывая изменения при помощи транзакций.

Транзакция охватывает несколько баз данных

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

Базы восстановлены, но общее состояние системы не согласовано

SQL Server позволяет восстанавливать базу в состоянии не только на момент создания резервной копии, но и на любой произвольный момент времени. Чтобы добиться максимальной точности, следует восстанавливать состояние базы на момент фиксации определённой транзакции, а саму транзакцию провести так, чтобы она внесла изменения сразу во все базы.

Можно, к примеру, создать в каждой базе табличку и в транзакции добавлять в неё строку. А чтобы эту транзакцию при восстановлении можно было отличить от остальных, снабдим её меткой.

Помеченная транзакция (WITH MARK)

Теперь, когда эта метка сохранена в журнале транзакций, можно создать резервную копию журнала. А при восстановлении не забудьте указать параметр STOPATMARK (или STOPBEFOREMARK), чтобы все базы восстановились на момент фиксации нашей контрольной транзакции.

Восстановление базы данных по помеченной транзакции (STOPATMARK, STOPBEFOREMARK)

Проверяем базы после восстановления из резервной копии:

Согласованное состояние баз данных

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

Подробнее об этом Вы сможете узнать на курсах SQL Server

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку

Спасибо за обращение! Ваш менеджер свяжется с Вами в течение нескольких минут.