репликация транзакций

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Репликация транзакций обычно начинается с создания моментального снимка объектов и данных базы данных публикации. Как только создан исходный моментальный снимок, последующие изменения данных и схемы на издателе обычно доставляются подписчику без задержек (практически в реальном времени). Изменения данных применяются на подписчике в том же порядке и в тех же рамках транзакций, в которых они выполнялись у издателя. Поэтому в пределах публикации гарантируется согласованность транзакций.

Репликация транзакций обычно используется в серверных средах и пригодна в следующих случаях:

  • Необходимо, чтобы дополнительные изменения распространялись подписчикам сразу же, как только они происходят.

  • Для приложения необходимы малые задержки между моментом внесения изменений на издателе и моментом прибытия изменений на подписчик.

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

  • На издателе выполняется очень большой объем вставок, обновлений и удалений.

  • Издатель или подписчик являются базой данных, отличной от SQL Server, например Oracle.

По умолчанию для подписчиков все подписки на публикацию транзакций доступны только для чтения, так как все изменения нельзя применить на издателе. Однако репликация транзакций позволяет выполнять обновления на подписчике.

Примечание.

Управляемый экземпляр SQL Azure может быть издателем, распространителем и подписчиком для репликации моментальных снимков и транзакций. Базы данных в службе "База данных SQL Azure" могут быть только принудительными подписчиками для репликации моментальных снимков и транзакций. Дополнительные сведения см. в статье о репликации транзакций с Базой данных SQL Azure и Управляемым экземпляром SQL Azure.

Как работает репликация транзакций

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

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

Добавочные изменения, вносимые на издателе, поступают подписчикам согласно расписанию агента распространения, который может выполняться непрерывно для достижения минимальной задержки либо в запланированные интервалы времени. Поскольку изменения данных должны вноситься на издателе (когда репликация транзакций используется без немедленного обновления и отложенного обновления), возникновение конфликтов обновления исключается. В конечном счете, для всех подписчиков устанавливаются такие же значения, как и на издателе. Если с репликацией транзакций используется немедленное или отложенное обновление, в этом случае обновления могут вноситься на подписчике, и для отложенного обновления возможно возникновение конфликтов.

На следующем рисунке показаны основные компоненты репликации транзакций.

Компоненты и поток данных репликации транзакций

Исходная база данных

Прежде чем новый подписчик репликации транзакций сможет получить добавочные изменения от издателя, на подписчике должны находиться таблицы со схемой и данными, совпадающими со схемой и данными в таблицах на издателе. Исходный набор данных обычно является моментальным снимком, созданным агентом моментальных снимков, который распространяется и применяется агентом распространителя. Исходный набор данных также можно предоставить с помощью резервного копирования или других средств, таких как службы SQL Server Integration Services.

При распространении и применении моментальных снимков на подписчиках изменениям подвергаются только те подписчики, которые ожидают исходные моментальные снимки. Другие подписчики на эту публикацию (которые уже инициализированы) остаются без изменений.

Параллельная обработка моментальных снимков

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

агент моментальных снимков

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

После создания файлов моментальных снимков их можно просмотреть в папке моментальных снимков с помощью Microsoft Windows Explorer.

Изменение данных и агент чтения журналов

Агент чтения журналов выполняется на распространителе; обычно он выполняется непрерывно, но может также запускаться согласно задаваемому расписанию. При выполнении агент чтения журналов сначала считывает журнал транзакций публикации (тот же журнал базы данных, используемый для отслеживания транзакций и восстановления во время обычных операций SQL Server ядро СУБД) и определяет все инструкции INSERT, UPDATE и DELETE или другие изменения, внесенные в данные в транзакциях, помеченных для репликации. Далее агент копирует эти транзакции в пакетах в базу данных распространителя на стороне распространителя. Агент чтения журнала использует внутреннюю хранимую процедуру sp_replcmds для получения из журнала следующего набора команд, отмеченных для репликации. После этого база данных распространителя становится очередью с функциями хранения и переадресации, из которой изменения отправляются подписчикам. В базу данных распространителя отправляются только зафиксированные транзакции.

После того как весь пакет транзакций успешно записан в базу данных распространителя, он фиксируется. После фиксации каждого пакета команд на распространителе агент чтения журнала вызывает хранимую процедуру sp_repldone , чтобы отметить место, где в последний раз была завершена репликация. В заключение, агент отмечает строки в журнале транзакций, готовые к очистке. Строки, ожидающие репликации, не очищаются.

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

Агент распространителя

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

Типы публикации

Репликация транзакций поддерживает четыре типа публикаций:

Тип публикации Description
Стандартная публикация транзакций Подходит для топологий, в которых все данные подписчика доступны только для чтения (репликация транзакций не устанавливает принудительно этот вид доступа на подписчике).

Стандартные публикации транзакций создаются по умолчанию, если используется Transact-SQL или объекты RMO. Если используется мастер создания публикации, публикации транзакций создаются путем выбора Публикация транзакций на странице Тип публикации .

Дополнительные сведения о создании публикаций см. в статье Публикация данных и объектов базы данных.
публикация транзакций с обновляемыми подписками; Ниже приведены характеристики этого типа публикации:

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

Дополнительные сведения см. в разделе Обновляемые подписки.
Одноранговая топология Ниже приведены характеристики этого типа публикации:
- Каждое расположение содержит идентичные данные и действует и как издатель, и как подписчик.
- Одна и та же строка может быть изменена за раз только в одном расположении.
- Поддерживает обнаружение конфликтов.
- Эта топология более всего подходит для серверных сред, в которых требуется высокий уровень масштабируемости доступности и чтения.

Дополнительные сведения см. в разделе Peer-to-Peer Transactional Replication.
Двунаправленная репликация транзакций Ниже приведены характеристики этого типа публикации:
Двунаправленная репликация аналогична одноранговой репликации, однако она не предоставляет разрешение конфликтов. Кроме того, двунаправленная репликация ограничена 2 серверами.

Дополнительные сведения см. в статье Двунаправленная репликация транзакций.