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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Репликация транзакций обычно начинается с создания моментального снимка объектов и данных базы данных публикации.Transactional replication typically starts with a snapshot of the publication database objects and data. Как только создан исходный моментальный снимок, последующие изменения данных и схемы на издателе обычно доставляются подписчику без задержек (практически в реальном времени).As soon as the initial snapshot is taken, subsequent data changes and schema modifications made at the Publisher are usually delivered to the Subscriber as they occur (in near real time). Изменения данных применяются на подписчике в том же порядке и в тех же рамках транзакций, в которых они выполнялись у издателя. Поэтому в пределах публикации гарантируется согласованность транзакций.The data changes are applied to the Subscriber in the same order and within the same transaction boundaries as they occurred at the Publisher; therefore, within a publication, transactional consistency is guaranteed.

Репликация транзакций обычно используется в серверных средах и пригодна в следующих случаях:Transactional replication is typically used in server-to-server environments and is appropriate in each of the following cases:

  • Необходимо, чтобы дополнительные изменения распространялись подписчикам сразу же, как только они происходят.You want incremental changes to be propagated to Subscribers as they occur.

  • Для приложения необходимы малые задержки между моментом внесения изменений на издателе и моментом прибытия изменений на подписчик.The application requires low latency between the time changes are made at the Publisher and the changes arrive at the Subscriber.

  • Для приложения необходим доступ к промежуточным состояниям данных.The application requires access to intermediate data states. Например, если строка изменяется пять раз, репликация транзакций позволяет приложению реагировать на каждое изменение (например, срабатывание триггера), а не просто на окончательное изменение строки.For example, if a row changes five times, transactional replication allows an application to respond to each change (such as firing a trigger), not simply the net data change to the row.

  • На издателе выполняется очень большой объем вставок, обновлений и удалений.The Publisher has a very high volume of insert, update, and delete activity.

  • Издатель и подписчик являются базами данных, отличными от баз данныхSQL ServerSQL Server (например, Oracle).The Publisher or Subscriber is a non-SQL ServerSQL Server database, such as Oracle.

По умолчанию для подписчиков все подписки на публикацию транзакций доступны только для чтения, так как все изменения нельзя применить на издателе.By default, Subscribers to transactional publications should be treated as read-only, because changes are not propagated back to the Publisher. Однако репликация транзакций позволяет выполнять обновления на подписчике.However, transactional replication does offer options that allow updates at the Subscriber.

Примечание

Управляемый экземпляр базы данных SQL Microsoft Azure может быть издателем, распространителем и подписчиком для репликации моментальных снимков и транзакций.Azure SQL Database managed instance can be a publisher, distributor, and subscriber for snapshot and transactional replication. Одна база данных SQL Microsoft Azure и базы данных в составе пула могут быть только принудительными подписчиками для репликации моментальных снимков и транзакций.Azure SQL database single and pooled databases can only be push subscribers for snapshot and transactional replication. Дополнительные сведения см. в разделе Transactional replication with Azure SQL Database.For more information, see Transactional replication with Azure SQL Database.

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

Репликация транзакций реализуется агентом моментальных снимков, агентом чтения журналов и агентом распространителя SQL ServerSQL Server .Transactional replication is implemented by the SQL ServerSQL Server Snapshot Agent, Log Reader Agent, and Distribution Agent. Агент моментальных снимков готовит файлы моментальных снимков, содержащие схему, данные публикуемых таблиц и объекты базы данных, хранит файлы в папке моментальных снимков и записывает задания синхронизации в базу данных распространителя на распространителе.The Snapshot Agent prepares snapshot files containing schema and data of published tables and database objects, stores the files in the snapshot folder, and records synchronization jobs in the distribution database on the Distributor.

Агент чтения журнала контролирует журнал транзакций всех баз данных, настроенных для репликации транзакций, и копирует транзакции, отмеченные для репликации, из журнала транзакций в базу данных распространителя, которая действует как надежная очередь с функциями хранения и переадресации данных.The Log Reader Agent monitors the transaction log of each database configured for transactional replication and copies the transactions marked for replication from the transaction log into the distribution database, which acts as a reliable store-and-forward queue. Агент распространителя копирует файлы исходного моментального снимка из папки моментальных снимков и транзакции, хранимые в таблицах базы данных распространителя, на подписчики.The Distribution Agent copies the initial snapshot files from the snapshot folder and the transactions held in the distribution database tables to Subscribers.

Добавочные изменения, вносимые на издателе, поступают подписчикам согласно расписанию агента распространения, который может выполняться непрерывно для достижения минимальной задержки либо в запланированные интервалы времени.Incremental changes made at the Publisher flow to Subscribers according to the schedule of the Distribution Agent, which can run continuously for minimal latency, or at scheduled intervals. Поскольку изменения данных должны вноситься на издателе (когда репликация транзакций используется без немедленного обновления и отложенного обновления), возникновение конфликтов обновления исключается.Because changes to the data must be made at the Publisher (when transactional replication is used without immediate updating or queued updating options), update conflicts are avoided. В конечном счете, для всех подписчиков устанавливаются такие же значения, как и на издателе.Ultimately, all Subscribers will achieve the same values as the Publisher. Если с репликацией транзакций используется немедленное или отложенное обновление, в этом случае обновления могут вноситься на подписчике, и для отложенного обновления возможно возникновение конфликтов.If immediate updating or queued updating options are used with transactional replication, updates can be made at the Subscriber, and with queued updating, conflicts might occur.

На следующем рисунке показаны основные компоненты репликации транзакций.The following illustration shows the principal components of transactional replication.

Компоненты и поток данных репликации транзакцийTransactional replication components and data flow

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

Прежде чем новый подписчик репликации транзакций сможет получить добавочные изменения от издателя, на подписчике должны находиться таблицы со схемой и данными, совпадающими со схемой и данными в таблицах на издателе.Before a new transactional replication Subscriber can receive incremental changes from a Publisher, the Subscriber must contain tables with the same schema and data as the tables at the Publisher. Исходный набор данных обычно является моментальным снимком, созданным агентом моментальных снимков, который распространяется и применяется агентом распространителя.The initial dataset is typically a snapshot that is created by the Snapshot Agent and distributed and applied by the Distribution Agent. Исходный набор данных может также предоставляться через резервную копию или другим способом, например службами SQL ServerSQL Server Integration Services.The initial dataset can also be supplied through a backup or other means, such as SQL ServerSQL Server Integration Services.

При распространении и применении моментальных снимков на подписчиках изменениям подвергаются только те подписчики, которые ожидают исходные моментальные снимки.When snapshots are distributed and applied to Subscribers, only those Subscribers waiting for initial snapshots are affected. Другие подписчики на эту публикацию (которые уже инициализированы) остаются без изменений.Other Subscribers to that publication (those that have already been initialized) are unaffected.

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

Репликация моментальных снимков устанавливает общие блокировки на все таблицы, опубликованные как часть репликации, на время создания моментального снимка.Snapshot replication places shared locks on all tables published as part of replication for the duration of snapshot generation. Это может препятствовать выполнению обновлений публикуемых таблиц.This can prevent updates from being made on the publishing tables. Параллельная обработка моментального снимка, выполняемая по умолчанию с репликацией транзакций, не сохраняет общие блокировки в течение всего времени создания моментального снимка, что позволяет пользователям продолжать работу без перерыва, пока репликация создает файлы исходного моментального снимка.Concurrent snapshot processing, the default with transactional replication, does not hold the share locks in place during the entire snapshot generation, which allows users to continue working uninterrupted while replication creates initial snapshot files.

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

Агент моментальных снимков реализует исходный моментальный снимок в репликации транзакций с помощью тех же самых процедур, которые используются в репликации моментальных снимков (за исключением параллельной обработки моментального снимка, описанной выше).The procedures by which the Snapshot Agent implements the initial snapshot in transactional replication are the same procedures used in snapshot replication (except as outlined above with regard to concurrent snapshot processing).

После создания файлов моментальных снимков их можно просмотреть в папке моментальных снимков, используя проводник MicrosoftMicrosoft Windows.After the snapshot files have been generated, you can view them in the snapshot folder using MicrosoftMicrosoft Windows Explorer.

Изменение данных и агент чтения журналовModifying Data and the Log Reader Agent

Агент чтения журналов выполняется на распространителе; обычно он выполняется непрерывно, но может также запускаться согласно задаваемому расписанию.The Log Reader Agent runs at the Distributor; it typically runs continuously, but can also run according to a schedule you establish. При выполнении агент чтения журнала сначала читает журнал транзакций публикации (тот же самый журнал базы данных используется для отслеживания и восстановления данных во время выполнения обычных операций компонента SQL ServerSQL Server Database Engine) и выявляет все инструкции INSERT, UPDATE и DELETE или другие изменения данных в транзакциях, отмеченных для репликации.When executing, the Log Reader Agent first reads the publication transaction log (the same database log used for transaction tracking and recovery during regular SQL ServerSQL Server Database Engine operations) and identifies any INSERT, UPDATE, and DELETE statements, or other modifications made to the data in transactions that have been marked for replication. Далее агент копирует эти транзакции в пакетах в базу данных распространителя на стороне распространителя.Next, the agent copies those transactions in batches to the distribution database at the Distributor. Агент чтения журнала использует внутреннюю хранимую процедуру sp_replcmds для получения из журнала следующего набора команд, отмеченных для репликации.The Log Reader Agent uses the internal stored procedure sp_replcmds to get the next set of commands marked for replication from the log. После этого база данных распространителя становится очередью с функциями хранения и переадресации, из которой изменения отправляются подписчикам.The distribution database then becomes the store-and-forward queue from which changes are sent to Subscribers. В базу данных распространителя отправляются только зафиксированные транзакции.Only committed transactions are sent to the distribution database.

После того как весь пакет транзакций успешно записан в базу данных распространителя, он фиксируется.After the entire batch of transactions has been written successfully to the distribution database, it is committed. После фиксации каждого пакета команд на распространителе агент чтения журнала вызывает хранимую процедуру sp_repldone , чтобы отметить место, где в последний раз была завершена репликация.Following the commit of each batch of commands to the Distributor, the Log Reader Agent calls sp_repldone to mark where replication was last completed. В заключение, агент отмечает строки в журнале транзакций, готовые к очистке.Finally, the agent marks the rows in the transaction log that are ready to be purged. Строки, ожидающие репликации, не очищаются.Rows still waiting to be replicated are not purged.

Команды транзакций хранятся в базе данных распространителя до тех пор, пока они не будут распространены на все подписчики или пока не закончится максимальный срок хранения на распространителе.Transaction commands are stored in the distribution database until they are propagated to all Subscribers or until the maximum distribution retention period has been reached. Подписчики получают транзакции в том же порядке, в котором они применялись на издателе.Subscribers receive transactions in the same order in which they were applied at the Publisher.

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

Агент распространителя работает на распространителе для принудительных подписок и на подписчике для подписок по запросу.The Distribution Agent runs at the Distributor for push subscriptions and at the Subscriber for pull subscriptions. Агент перемещает транзакции из базы данных распространителя на подписчик.The agent moves transactions from the distribution database to the Subscriber. Если подписка отмечена для проверки подлинности, агент распространителя также проверяет соответствие данных на издателе и подписчике.If a subscription is marked for validation, the Distribution Agent also checks whether data at the Publisher and Subscriber match.

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

Репликация транзакций поддерживает четыре типа публикаций:Transactional replication offers four publication types:

Тип публикацииPublication Type ОписаниеDescription
Стандартная публикация транзакцийStandard transactional publication Подходит для топологий, в которых все данные подписчика доступны только для чтения (репликация транзакций не устанавливает принудительно этот вид доступа на подписчике).Appropriate for topologies in which all data at the Subscriber is read-only (transactional replication does not enforce this at the Subscriber).

Стандартные публикации транзакций создаются по умолчанию, если используется Transact-SQL или объекты RMO.Standard transactional publications are created by default when using Transact-SQL or Replication Management Objects (RMO). Если используется мастер создания публикации, публикации транзакций создаются путем выбора Публикация транзакций на странице Тип публикации .When using the New Publication Wizard, they are created by selecting Transactional publication on the Publication Type page.

Дополнительные сведения о создании публикаций см. в статье Публикация данных и объектов базы данных.For more information about creating publications, see Publish Data and Database Objects.
публикация транзакций с обновляемыми подписками;Transactional publication with updatable subscriptions Ниже приведены характеристики этого типа публикации:The characteristics of this publication type are:

-Каждое расположение содержит идентичные данные с одним издателем и одним подписчиком.-Each location has identical data, with one Publisher and one Subscriber.
-Строки можно обновлять в подписчике-It is possible to update rows at the Subscriber
-Эта топология более всего подходит для серверных сред, в которых требуется высокий уровень масштабируемости доступности и чтения.-This topology is best suited for server environments requiring high availability and read scalability.

Дополнительные сведения см. в разделе Обновляемые подписки.For more information, see Updatable Subscriptions.
Одноранговая топологияPeer-to-peer topology Ниже приведены характеристики этого типа публикации:The characteristics of this publication type are:
- Каждое расположение содержит идентичные данные и действует и как издатель, и как подписчик.- Each location has identical data and acts as both a Publisher and Subscriber.
- Одна и та же строка может быть изменена за раз только в одном расположении.- The same row can be changed only at one location at a time.
- Поддерживает обнаружение конфликтов.- Supports conflict detection
- Эта топология более всего подходит для серверных сред, в которых требуется высокий уровень масштабируемости доступности и чтения.- This topology is best suited for server environments requiring high availability and read scalability.

Дополнительные сведения см. в разделе Peer-to-Peer Transactional Replication.For more information, see Peer-to-Peer Transactional Replication.
Двунаправленная репликация транзакцийBidirectional transactional replication Ниже приведены характеристики этого типа публикации:The characteristics of this publication type are:
Двунаправленная репликация аналогична одноранговой репликации, однако она не предоставляет разрешение конфликтов.Bidirectional replication is similar to Peer-to-Peer replication, however, it does not provide conflict resolution. Кроме того, двунаправленная репликация ограничена 2 серверами.Additionally, bidirectional replication is limited to 2 servers.

Дополнительные сведения см. в статье Двунаправленная репликация транзакций.For more information, see Bidirectional Transactional Replication