Стратегии резервного копирования и восстановления из копии репликации моментальных снимков и репликации транзакций
При разработке стратегии резервного копирования и восстановления для репликации моментальных снимков и репликации транзакций необходимо рассмотреть три группы вопросов:
- Какие базы данных будут подвергаться резервному копированию.
- Настройки резервного копирования для репликации транзакций.
- Действия, которые необходимо выполнить для восстановления базы данных, зависят от типа репликации и выбранных параметров.
Эта тема охватывает данные группы вопросов в следующих трех разделах. Сведения о резервном копировании и восстановлении для публикации Oracle см. в разделе Резервное копирование и восстановление для издателей Oracle.
Резервное копирование баз данных
Для репликации моментальных снимков и репликации транзакций необходимо регулярно выполнять резервное копирование следующих баз данных:
- База данных публикации на издателе.
- База данных распространителя на распространителе.
- База данных подписки на подписчике.
- Системные базы данных master и msdb на издателе, распространителе и на всех подписчиках. Резервные копии этих баз данных и копия соответствующей базы данных репликации должны быть сделаны одновременно. Например, создавайте резервную копию баз данных master и msdb на издателе одновременно с резервной копией базы данных публикации. Если база данных публикации восстановлена, убедитесь, что базы данных master и msdb согласованы с базой данных публикации по параметрам и конфигурации репликации.
Если резервное копирование журналов выполняется регулярно, любые изменения, касающиеся репликации, будут заноситься в резервные копии журнала. Если резервные копии журналов не создаются, резервное копирование следует выполнять при каждом изменении параметров репликации. Дополнительные сведения см. в разделе Общие действия, для которых необходима обновленная резервная копия.
Настройки резервного копирования для репликации транзакций
Репликация транзакций включает параметр sync with backup, который может быть установлен для базы данных распространителя и для базы данных публикации:
- Рекомендуется во всех случаях устанавливать этот параметр для базы данных распространителя.
Установка этого параметра для базы данных распространителя гарантирует, что транзакции в журнале базы данных публикации не будут усечены до тех пор, пока не будет создана их резервная копия в базе данных распространителя. База данных распространителя может быть восстановлена до последней резервной копии, и все пропавшие транзакции будут доставлены из базы данных публикации в базу данных распространителя; репликация продолжится без сбоев.
Установка этого параметра для базы данных распространителя не влияет на задержку репликации. Однако этот параметр позволяет задержать усечение журнала базы данных публикации до тех пор, пока не будут созданы резервные копии соответствующих транзакций в базе данных распространителя (что может привести к большему объему журнала транзакций в базе данных публикации). - Рекомендуется установить этот параметр для базы данных публикации, если приложение допускает дополнительную задержку.
Установка этого параметра для базы данных публикации гарантирует, что транзакции не будут доставлены в базу данных распространителя до тех пор, пока не будет создана их резервная копия в базе данных публикации. Последняя резервная копия базы данных публикации может быть затем восстановлена на издателе, при этом в базе данных распространителя не будет транзакций, которых нет в восстановленной базе данных публикации.
Задержка и пропускная способность изменяются, так как транзакции не могут быть доставлены в базу данных распространителя до тех пор, пока не будут созданы их резервные копии на издателе. Например, если резервная копия журнала транзакций создается каждые пять минут, потребуются дополнительные пять минут задержки между фиксацией транзакции на издателе и доставкой транзакции сначала в базу данных распространителя и затем подписчику.Примечание. Параметр sync with backup обеспечивает согласованность базы данных публикации и базы данных распространителя, но он не гарантирует отсутствия потерь данных. Например, если журнал транзакций потерян, транзакции, зафиксированные после последнего резервного копирования журнала транзакций, не будут доступны в базе данных публикации или базе данных распространителя. Такое же поведение, как и у нереплицированной базы данных.
Установка параметра «sync with backup»
- Программирование репликации на языке Transact-SQL: How to: Enable Coordinated Backups for Transactional Replication (Replication Transact-SQL Programming)
Восстановление баз данных, участвующих в репликации
Если имеются последние резервные копии и выполнены надлежащие действия, можно восстановить все базы данных в топологии репликации. Действия по восстановлению базы данных публикации зависят от типа репликации и от используемых параметров, а действия по восстановлению всех других баз данных не зависят от типа репликации и параметров.
Служба репликации поддерживает восстановление реплицированной базы данных на том же сервере и в той же базе данных, где была создана ее резервная копия. Если восстановить резервную копию реплицированной базы данных на другом сервере или в другой базе данных, то станет невозможным сохранение настроек репликации. В этом случае после восстановления из резервной копии потребуется заново создать все публикации и подписки.
Издатель
Последовательность шагов по восстановлению предлагается для следующих типов репликации:
- репликация моментальных снимков;
- репликация транзакций, доступная только для чтения;
- репликация транзакций с обновляемыми подписками;
- одноранговая репликация транзакций.
Восстановление баз данных msdb и master, о котором также рассказывается в этом разделе, одинаково для всех четырех типов репликации.
База данных публикации: репликация моментальных снимков
- Восстановите последнюю резервную копию базы данных публикации. Перейдите к шагу 2.
- Содержит ли резервная копия базы данных публикации последнюю конфигурацию всех публикаций и подписок? Если да, то восстановление завершено. Если нет, перейдите к шагу 3.
- Удалите конфигурацию репликации с издателя, распространителя и подписчиков, затем создайте конфигурацию заново. Восстановление завершено.
Дополнительные сведения об удалении репликации см. в разделе Удаление репликации и Хранимая процедура sp_removedbreplication (Transact-SQL).
База данных публикации: репликация транзакций, доступная только для чтения
- Восстановите последнюю резервную копию базы данных публикации. Перейдите к шагу 2.
- Был ли перед сбоем включен параметр sync with backup для базы данных публикации? Если да, перейдите к шагу 3, если нет — к шагу 5.
Если параметр включен, запросSELECT DATABASEPROPERTYEX('<PublicationDatabaseName>', 'IsSyncWithBackup');
возвращает '1'. - Является ли восстановленная резервная копия полной и обновленной? Содержит ли она последнюю конфигурацию всех публикаций и подписок? Если да, то восстановление завершено. Если нет, перейдите к шагу 4.
- Сведения о конфигурации в восстановленной базе данных публикации не являются последними, поэтому необходимо убедиться, что у подписчиков имеются все ожидающие выполнения команды в базе данных распространителя, и после этого следует удалить и создать заново конфигурацию репликации:
- Запускайте агент распространителя до полной синхронизации подписчиков с ожидающими выполнения командами в базе данных распространителя. Убедитесь в том, что все команды доставлены подписчикам. Для этого используйте вкладку Нераспространенные команды в мониторе репликации либо запросите представление MSdistribution_status в базе данных распространителя. Перейдите к шагу b.
Дополнительные сведения о запуске агента распространителя см. в разделе Как запустить и остановить агент репликации (среда SQL Server Management Studio) и Programming Replication Agent Executables.
Дополнительные сведения о проверке команд см. в разделе How to: View Replicated Commands and Other Information in the Distribution Database (Replication Transact-SQL Programming) и Как просмотреть сведения и выполнить задачи для агентов, связанных с подпиской (монитор репликации). - Удалите конфигурацию репликации с издателя, распространителя и подписчиков, затем создайте конфигурацию заново. При повторном создании подписок укажите, что у подписчика уже есть данные. Восстановление завершено.
Дополнительные сведения об удалении репликации см. в разделах Удаление репликации и Хранимая процедура sp_removedbreplication (Transact-SQL).
Дополнительные сведения о том, как указать, что у подписчика уже есть данные, см. в разделе Как инициализировать подписку вручную (среда SQL Server Management Studio) и How to: Initialize a Subscription Manually (Replication Transact-SQL Programming).
- Запускайте агент распространителя до полной синхронизации подписчиков с ожидающими выполнения командами в базе данных распространителя. Убедитесь в том, что все команды доставлены подписчикам. Для этого используйте вкладку Нераспространенные команды в мониторе репликации либо запросите представление MSdistribution_status в базе данных распространителя. Перейдите к шагу b.
- Параметр sync with backup не был установлен для базы данных публикации, поэтому транзакции, не включенные в восстановленную резервную копию, могут быть доставлены распространителю и подписчикам. Необходимо убедиться, что в базе данных распространителя у подписчиков есть все команды, ожидающие обработки, затем вручную применить к базе данных публикации все транзакции, отсутствующие в восстановленной резервной копии:
Важно! В результате этих действий опубликованные таблицы могут быть восстановлены до более современных версий, чем версии неопубликованных таблиц, восстановленных из резервной копии.
База данных публикации: репликация транзакций с обновляемыми подписками
- Восстановите последнюю резервную копию базы данных публикации. Перейдите к шагу 2.
- Запускайте агент распространителя до полной синхронизации подписчиков с ожидающими выполнения командами в базе данных распространителя. Убедитесь в том, что все команды доставлены подписчикам. Для этого используйте вкладку Нераспространенные команды в мониторе репликации либо запросите представление MSdistribution_status в базе данных распространителя. Перейдите к шагу 3.
Дополнительные сведения о запуске агента распространителя см. в разделах Как запустить и остановить агент репликации (среда SQL Server Management Studio) и Programming Replication Agent Executables.
Дополнительные сведения о проверке команд см. в разделах How to: View Replicated Commands and Other Information in the Distribution Database (Replication Transact-SQL Programming) и Как просмотреть сведения и выполнить задачи для агентов, связанных с подпиской (монитор репликации). - Если используются обновляемые посредством очередей подписки, подключитесь к каждому подписчику и удалите все строки из таблицы MSreplication_queue в базе данных подписки. Перейдите к шагу 4.
Примечание. Если используются обновляемые посредством очередей подписки, и какие-либо таблицы содержат столбцы идентификаторов, следует убедиться, что после восстановления назначены правильные диапазоны идентификаторов. Дополнительные сведения см. в разделе Репликация столбцов идентификаторов. - Необходимо убедиться, что в базе данных распространителя у подписчиков есть все команды, ожидающие обработки, затем вручную применить к базе данных публикации все транзакции, отсутствующие в восстановленной резервной копии:
Важно! В результате этих действий опубликованные таблицы могут быть восстановлены до более современных версий, чем версии неопубликованных таблиц, восстановленных из резервной копии.
База данных публикации: одноранговая репликация транзакций
На следующих шагах базы данных публикаций A, B и C состоят в топологии одноранговой репликации транзакций. Базы данных A и C находятся в оперативном режиме и функционируют правильно; база данных B — восстанавливаемая база данных.
- Запустите агент распространителя для синхронизации подписок в базах данных A и C. Перейдите к шагу 2.
Дополнительные сведения о запуске агента распространителя см. в разделах Как запустить и остановить агент репликации (среда SQL Server Management Studio) и Programming Replication Agent Executables. - Если база данных распространителя, которую использует B, все еще доступна, запустите агент распространителя для синхронизации подписок между базами данных B и A, а также между базами данных B и C. Перейдите к шагу 3.
- Удалите метаданные из базы данных распространителя, которую использует B, выполнив sp_removedistpublisherdbreplication (Transact-SQL) в базе данных распространителя для B. Перейдите к шагу 4.
- В базах данных A и C удалите подписки на публикацию в базе данных B. Перейдите к шагу 5.
Дополнительные сведения об удалении подписок см. в разделе Подписка на публикации. - Выполните резервное копирование журнала или полное резервное копирование базы данных A. Перейдите к шагу 6.
- Восстановите резервную копию базы данных A в базе данных B. База данных B теперь содержит данные из базы данных A, но не конфигурацию репликации. При восстановлении резервной копии на другом сервере репликация удаляется, поэтому репликация была удалена из базы данных B. Перейдите к шагу 7.
- Создайте заново публикацию в базе данных B, после этого создайте заново подписки между базами данных A и B (подписки, затрагивающие базу данных C, обрабатываются позже):
- Создайте заново публикацию в базе данных B. Перейдите к шагу b.
- Создайте заново подписку в базе данных B на публикацию в базе данных A, указав, что подписка должна быть инициализирована с резервной копией (значение initialize with backup для параметра @sync_type хранимой процедуры sp_addsubscription (Transact-SQL)). Перейдите к шагу c.
- Создайте заново подписку в базе данных А на публикацию в базе данных В, указав, что подписчик уже содержит данные (значение replication support only для параметра @sync_type хранимой процедуры sp_addsubscription (Transact-SQL)). Перейдите к шагу 8.
Самый простой путь выполнения шагов a-c — использование мастера настройки одноранговой топологии. Дополнительные сведения см. в разделе Как настроить одноранговую репликацию транзакций (среда SQL Server Management Studio). Можно также использовать хранимые процедуры. Дополнительные сведения см. в разделе How to: Configure Peer-to-Peer Transactional Replication (Replication Transact-SQL Programming).
- Запустите агент распространителя, чтобы синхронизировать подписки в базах данных A и B. Если в опубликованных таблицах есть столбцы идентификаторов, перейдите к шагу 9. Если нет, перейдите к шагу 10.
- После восстановления диапазон идентификаторов, который назначен для каждой таблицы базы данных A, также будет использован в базе данных B. Убедитесь, что восстановленная база данных B получила все изменения из поврежденной базы данных B, которые были переданы в базы данных A и C; после этого переустановите начальные значения диапазона идентификаторов для каждой таблицы.
- Выполните процедуру sp_requestpeerresponse (Transact-SQL) в базе данных B и получите выходной параметр @request_id. Перейдите к шагу b.
- По умолчанию агент распространителя работает непрерывно, поэтому маркеры отправляются на все узлы автоматически. Если агент распространителя не выполняется в непрерывном режиме, запустите его. Дополнительные сведения см. в разделе Programming Replication Agent Executables или Как запустить и остановить агент репликации (среда SQL Server Management Studio). Перейдите к шагу c.
- Выполните sp_helppeerresponses (Transact-SQL), указав значение @request_id, полученное на шаге b. Подождите, пока все узлы не сообщат о получении однорангового запроса. Перейдите к шагу d.
- Используйте DBCC CHECKIDENT для переустановки начальных значений каждой таблицы в базе данных B, чтобы убедиться, что использован соответствующий диапазон. Перейдите к шагу 10.
Дополнительные сведения об управлении диапазонами идентификаторов см. в подразделе «Назначение диапазонов для ручного управления диапазонами идентификаторов» раздела Репликация столбцов идентификаторов.
- В данный момент базы данных B и C не связаны напрямую, но они будут получать изменения через базу данных A. Чтобы связать базы данных B и C, выполните шаги 11-13.
- Приостановите систему. Приостановка системы включает остановку действий в опубликованных таблицах на всех узлах и гарантирует, что каждый узел получит все изменения от других узлов:
- Остановите все действия в опубликованных таблицах в одноранговой топологии. Перейдите к шагу b.
- Выполните процедуру sp_requestpeerresponse (Transact-SQL) в базе данных B и получите выходной параметр @request_id. Перейдите к шагу c.
- По умолчанию агент распространителя работает непрерывно, поэтому маркеры отправляются на все узлы автоматически. Если агент распространителя не выполняется в непрерывном режиме, запустите его. Перейдите к шагу d.
- Выполните sp_helppeerresponses (Transact-SQL), указав значение @request_id, полученное на шаге b. Подождите, пока все узлы не сообщат о получении однорангового запроса. Перейдите к шагу 12.
- Создайте заново подписку между базами данных B и C:
- Создайте заново подписку в базе данных B на публикацию в базе данных C, указав, что подписка должна быть инициализирована из резервной копии. Перейдите к шагу b.
- Создайте заново подписку в базе данных C на публикацию в базе данных B, указав, что подписчик уже содержит данные. Перейдите к шагу 13.
- Запустите агент распространителя для синхронизации подписок в базах данных В и C. Восстановление завершено.
База данных msdb (Издатель)
- Восстановите последнюю резервную копию базы данных msdb.
- Является ли восстановленная резервная копия полной и обновленной? Содержит ли она последнюю конфигурацию всех публикаций и подписок? Если да, восстановление завершено. Если нет, перейдите к шагу 3.
- Создайте заново задание очистки подписки из сценариев репликации. Восстановление завершено.
База данных master (Издатель)
- Восстановите последнюю резервную копию базы данных master.
- Убедитесь, что база данных согласована с базой данных публикации по конфигурации и параметрам репликации.
Базы данных на распространителе
База данных распространителя
- Восстановите последнюю резервную копию базы данных распространителя.
- Был ли включен перед сбоем параметр sync with backup для базы данных распространителя? Если да, перейдите к шагу 3, если нет — к шагу 4.
Если параметр включен, запросSELECT DATABASEPROPERTYEX('<DistributionDatabaseName>', 'IsSyncWithBackup');
возвращает '1'. - Является ли восстановленная резервная копия полной и обновленной? Содержит ли она последнюю конфигурацию всех публикаций и подписок? Если да, восстановление завершено. Если нет, перейдите к шагу 4.
- Либо сведения о настройках в восстановленной базе данных распространителя не последние, либо параметр sync with backup не был установлен в базе данных распространителя (после восстановления база данных распространителя может не содержать транзакций, которые были зафиксированы на издателе, но не были доставлены подписчикам). Удалите и создайте заново репликацию, а затем выполните проверку:
- Удалите конфигурацию репликации с издателя, распространителя и подписчиков, затем создайте конфигурацию заново. При повторном создании подписок укажите, что у подписчика уже есть данные. Перейдите к шагу b.
Дополнительные сведения об удалении репликации см. в разделах Удаление репликации и Хранимая процедура sp_removedbreplication (Transact-SQL).
Дополнительные сведения о том, как указать, что у подписчика уже есть данные, см. в разделах Как инициализировать подписку вручную (среда SQL Server Management Studio) и How to: Initialize a Subscription Manually (Replication Transact-SQL Programming). - Отметьте все публикации для проверки. Повторно инициализируйте все подписки, не прошедшие проверку. Восстановление завершено.
Дополнительные сведения о проверке см. в разделе Проверка реплицированных данных.
Дополнительные сведения о повторной инициализации см. в разделе Повторная инициализация подписки.
- Удалите конфигурацию репликации с издателя, распространителя и подписчиков, затем создайте конфигурацию заново. При повторном создании подписок укажите, что у подписчика уже есть данные. Перейдите к шагу b.
База данных msdb (Распространитель)
- Восстановите последнюю резервную копию базы данных msdb.
- Является ли восстановленная резервная копия полной и обновленной? Содержит ли она последнюю конфигурацию всех публикаций и подписок? Если да, восстановление завершено. Если нет, перейдите к шагу 3.
- Удалите конфигурацию репликации с издателя, распространителя и подписчиков, затем создайте конфигурацию заново. При повторном создании подписок укажите, что у подписчика уже есть данные. Перейдите к шагу 4.
Дополнительные сведения об удалении репликации см. в разделах Удаление репликации и Хранимая процедура sp_removedbreplication (Transact-SQL).
Дополнительные сведения о том, как указать, что у подписчика уже есть данные, см. в разделах Как инициализировать подписку вручную (среда SQL Server Management Studio) и How to: Initialize a Subscription Manually (Replication Transact-SQL Programming). - Отметьте все публикации для проверки. Повторно инициализируйте все подписки, не прошедшие проверку. Восстановление завершено.
Дополнительные сведения о проверке см. в разделе Проверка реплицированных данных.
Дополнительные сведения о повторной инициализации см. в разделе Повторная инициализация подписки.
База данных master (Распространитель)
- Восстановите последнюю резервную копию базы данных master.
- Убедитесь, что база данных согласована с базой данных публикации по конфигурации и параметрам репликации.
Базы данных на подписчике
База данных подписки
- Является ли последняя резервная копия базы данных подписки более поздней, чем максимальное значение параметра срока хранения распространения в базе данных распространителя (этим определяется, есть ли у распространителя все команды, необходимые для обновления подписчика)? Если да, перейдите к шагу 2. Если нет, инициализируйте подписку повторно. Восстановление завершено.
Чтобы определить значение параметра срока хранения распространителя, выполните sp_helpdistributiondb (Transact-SQL) и извлеките значение из столбца max_distretention (значение в часах).
Дополнительные сведения о повторной инициализации подписки см. в разделе Как повторно инициализировать подписку (среда SQL Server Management Studio) и How to: Reinitialize a Subscription (Replication Transact-SQL Programming). - Восстановите последнюю резервную копию базы данных подписки. Перейдите к шагу 3.
- Если база данных подписки содержит только принудительные подписки, перейдите к шагу 4. Если база данных подписки содержит любые подписки по запросу: являются ли сведения о подписке текущими; включает ли база данных все таблицы и параметры, которые были установлены на момент сбоя. Если да, перейдите к шагу 4. Если нет, инициализируйте подписку повторно. Восстановление завершено.
- Запустите агент распространителя для синхронизации подписчика. Восстановление завершено.
Дополнительные сведения о запуске агента распространителя см. в разделах Как запустить и остановить агент репликации (среда SQL Server Management Studio) и Programming Replication Agent Executables.
База данных msdb (Подписчик)
- Восстановите последнюю резервную копию базы данных msdb. Используются ли на этом подписчике подписки по запросу. Если нет, восстановление завершено. Если да, перейдите к шагу 2.
- Является ли восстановленная резервная копия полной и содержащей последние данные; содержит ли она последние настройки для всех подписок по запросу? Если да, восстановление завершено. Если нет, перейдите к шагу 3.
- Удалите и создайте заново подписки по запросу. При повторном создании подписок укажите, что подписчик уже содержит данные. Восстановление завершено.
Дополнительные сведения об удалении подписок см. в разделе Подписка на публикации.
Дополнительные сведения о том, как указать, что у подписчика уже есть данные, см. в разделах Как инициализировать подписку вручную (среда SQL Server Management Studio) и How to: Initialize a Subscription Manually (Replication Transact-SQL Programming).
База данных master (Подписчик)
- Восстановите последнюю резервную копию базы данных master.
- Убедитесь, что база данных согласована с базой данных публикации по конфигурации и параметрам репликации.
См. также
Основные понятия
Резервное копирование и восстановление из копий реплицируемых баз данных
Настройка распространителя
Публикация данных и объектов базы данных
Подписка на публикации
Инициализация подписки
Синхронизация данных
Другие ресурсы
Резервное копирование и восстановление баз данных в SQL Server