280
DELETE. Агент следит за появлением подлежащих репликации транзак-
ций для каждой публикации, существующей в базе данных публикую-
щего сервера. Любая обнаруженная транзакция копируется им в базу
данных рассылки. Затем агент чтения журналов адресует рассылаемые
данные каждому подписчику на публикацию.
После исходного согласования состояний подписчика и публи-
кующего сервера весь объем данных никогда не пересылается в адрес
подписчика. Поддержание актуального состояния базы данных подпис-
чика обеспечивается агентом рассылки. Он пересылает подписчику все
команды INSERT, UPDATE и DELETE, введенные пользователями на
стороне публикующего сервера. Очень важно четко представлять всю
последовательность действий, которые выполняются при передаче под-
писчику сведений об изменениях, проведенных на стороне публикую-
щего сервера.
При создании публикации разработчик может разрешить подпис-
чику выполнять обновление собственной локальной копии данных. В
этом случае все выполненные на стороне такого подписчика изменения
будут переданы в обратном направлении на публикующий сервер, а по-
следний разошлет их в адрес всех остальных серверов-подписчиков. От-
сутствие конфликтов и гарантия внесения изменений на публикующий
сервер обеспечиваются благодаря использованию на сервере-
подписчике протокола двухступенчатой фиксации изменений. Если пуб-
ликующий сервер по какой-либо причине не сможет получить сведения
о внесенных изменениях, выполненная на стороне подписчика транзак-
ция будет отменена и восстановится исходное состояние базы данных. В
такой схеме непосредственно обновляемых подписчиков используются
триггеры, хранимые процедуры, координатор распределенных транзак-
ций, а также средства обнаружения конфликтов и рекурсии.
Триггеры размещаются на стороне подписчика. Это гарантирует,
что любая начатая на сервере-подписчике транзакция будет обязательно
зафиксирована на публикующем сервере, прежде чем появится возмож-
ность зафиксировать ее на сервере-подписчике. Здесь используется про-
токол с двухступенчатой фиксацией изменений (Two Phase Commit -
2PC). Если транзакцию не удастся зафиксировать на публикующем сер-
вере, она будет отменена и на сервере-подписчике, поэтому состояние
обеих баз данных останется согласованным.
Хранимые процедуры размещаются на стороне публикующего
сервера. Это гарантирует, что любые реплицируемые транзакции будут
выполнены только в том случае, если это не приведет к конфликту. Если
в результате выполнения транзакции возникает конфликт, на серверах
обоих узлов для данной транзакции будет выполнен откат.
Координацию выполнения двухступенчатой фиксации изменений
между публикующим сервером и сервером-подписчиком осуществляет
Координатор распределенных транзакций (Microsoft Distributed Transac-