Репликации
Лекция 9. Репликации
Одним из важнейших элементов системы SQL Server является служба репликации данных.
Следует подчеркнуть, что служба репликации является составной частью стандартной версии SOL Server, поскольку поставщики других СУРБД рассматривают средства репликации как отдельный продукт, за который необходимо вносить дополнительную плату.
По сути, репликация является службой, осуществляющей гарантированное копирование информации из исходной базы данных в одну или более целевых. Средства репликации Microsoft SQL Server позволяют организовать автоматическую рассылку данных некоторого сервера на несколько других серверов с использованием ODBC (Open Database Connectivity— открытый интерфейс баз данных) или OLE DB. Используя средства ODBC или OLE DB, SQL Server 2000 обеспечивает репликацию данных в адрес получателей, не относящихся к системам SQL Server (смешанная репликация), например Microsoft Access и Oracle. Поддерживаются также анонимные подписчики в Internet. Кроме того, SQL Server 2000 позволяет непосредственно обновлять подписчиков и осуществлять репликацию методом слияния, что существенно расширяет возможности репликации.
С учетом нововведений количество возможных вариантов решений, доступных при создании приложений, становится просто ошеломляющим!
Перечислим приложения или сценарии, в которых могут применяться средства репликации SQL Server.
• Для распределения нагрузки между серверами в сети (например, для передачи
произвольных запросов или отчетов на обработку серверу, отличному от исходного).
• Для перемещения определенных поднаборов данных (например, данных некоторого подразделения или данных за установленный период) с главного цен
Рекомендуемые материалы
трального сервера на вспомогательные.
• При наличии в системе центральной обновляемой базы данных, когда вносимые в нее изменения должны передаваться в другие базы данных (например,
если отдел сбыта изменяет цену на определенную продукцию).
• В приложениях, используемых торговыми агентами или представителями для
автономной работы на переносных компьютерах, если внесенные ими изменения должны передаваться на центральный сервер при очередном подключении
их компьютеров к сети.
• Для организации в Web группы пользователей с помощью приложения, позволяющего благодаря функции подписки периодически извлекать через Internet
сведения об изменениях в общей базе данных.
• В распределенных вычислительных средах, в которых серверы импортируют
информацию из файлов с ее дальнейшей репликацией на другие узлы.
Публикация и подписка
В системе репликации SQL Server используются понятия публикация (publish) и подписка (subscribe). Серверы системы публикуют свои данные (публикации), на которые могут подписаться другие серверы. В среде SQL Server сервер, который делает свои данные доступными для подписки со стороны других серверов, называется публикующим.
Публикации и статьи
Публикующий сервер предоставляет набор из одной или более статей, называемый публикацией (publication). Публикация, включает выбранные таблицы. Термин статья (article) используется по отношению к базовым объектам репликации, которые могут представлять собой отдельную таблицу, некоторую часть таблицы или хранимые процедуры.
Каждая публикация может содержать один или более перечисленных ниже элементов.
• Таблица.
• Вертикальное разделение таблицы.
• Данные хранимой процедуры (новая функция в SQL Server 2000).
• Горизонтальное разделение таблицы.
• Горизонтальное и вертикальное разделение таблицы
Вертикальное разделение таблицы представляет собой статью, в определении которой используется фильтр, выделяющий в таблице только заданные столбцы.
Горизонтальное разделение таблицы представляет собой статью, в определении которой используется фильтр, выделяющий в таблице только заданные строки данных.
Однако существуют объекты, которые не могут публиковаться.
• Базы данных model, tempdb и msdb.
• Системные таблицы, расположенные в базе данных master.
Типы подписки
Сделанные на публикующем сервере изменения рассылаются подписчикам с помощью механизмов репликации по запросу или принудительно. При осуществлении репликации методом принудительной подписки публикующий сервер организует рассылку подписчикам всех изменений, не ожидая поступления от них запросов на получение информации о выполненных изменениях. Репликация методом принудительной подписки обычно используется в тех случаях, когда желательно сразу же получать извещения обо всех изменениях, выполненных в публикуемой базе данных, либо если требуется гарантировать в системе максимальный уровень безопасности.
При выполнении репликации по запросу подписчик сам инициализирует процесс репликации на стороне публикующего сервера. Репликация по запросу обеспечивает меньший уровень загрузки системы по сравнению с репликацией методом принудительной подписки и больше подходит в тех случаях, когда в системе существует множество подписчиков или требования к уровню безопасности относительно невысоки.
Роли серверов
В общей схеме процессов репликации системы SQL Server каждый сервер может выполнять одну или более перечисленных ниже ролей.
• Публикующий сервер (publisher) содержит исходную базу данных, обеспечивает доступность ее данных для репликации и пересылает сведения о выполненных изменениях в базу данных рассылки, откуда они будут разосланы всем
серверам-подписчикам.
• Сервер-подписчик (subscriber) получает и обрабатывает публикуемые данные.
На стороне подписчика в публикуемую информацию также могут вноситься изменения. Однако в подобных случаях подписчик сохраняет свой статус, а не
становится публикующим сервером. (Любая информация в системе может публиковаться только одним-единственным сервером.)
• Рассылающий сервер (distributor) содержит базу данных рассылки и отвечает
за хранение и пересылку адресатам информации о синхронизации и репликации транзакций. Назначение рассылающего сервера — доставка на все серверы-
подписчики информации, поступающей в его базу данных рассылки от публикующих серверов.
Любой сервер в системе может выполнять одну или более перечисленных ролей. Например, во многих случаях публикующий сервер одновременно является рассылающим и может выступать в роли подписчика по отношению к публикациям, предоставляемым другими публикующими серверами. В последнем случае сервер, функционирующий в системе как публикующий и рассылающий, является и сервером-подписчиком.
Нет ничего необычного в том, что сервер-подписчик одновременно играет роль публикующего сервера. Однако в системе репликации SQL Server установлено, что для каждой публикации может существовать лишь одна ведущая копия базы данных, поддерживаемая публикующим сервером, независимо от числа серверов-подписчиков, которым предоставлено право вносить изменения в данную публикацию. Например, в системе с репликацией методом слияния сервер А публикует базу данных pubs. Серверы В и С являются подписчиками и имеют право вносить в эту базу данных изменения. Ведущая копия базы данных, в которую будут поступать сведения обо всех изменениях, находится на публикующем сервере А. Изменения, выполненные на сервере С, поступят на сервер В после репликации через сервер А.
Внешние системы, отличные от SQL Server (например, Oracle и Microsoft Access), могут выступать в качестве подписчиков для всех существующих типов репликации (за исключением непосредственно обновляемых подписчиков). Кроме того, Microsoft предоставила разработчикам открытый интерфейс службы репликации транзакций системы SQL Server. В результате третьи фирмы получили возможность создавать программные продукты, позволяющие отличным от SQL Server системам выступать в качестве гетерогенных источников публикуемой информации.
Типы репликации
SQL Server 2000 поддерживает несколько типов репликации, которые могут использоваться в самых разнообразных бизнес-приложениях. В последующих главах детально рассматривается каждый из существующих типов репликации, а также даются рекомендации о том, где и когда он может применяться. В SQL Server поддерживается несколько типов репликации, которые описаны ниже.
Репликация транзакций
В схеме репликации транзакций публикации модифицируются на узле публикующего сервера, после чего сведения о внесенных изменениях рассылаются всем подписчикам на данную публикацию. Репликация транзакций поддерживается в SQL Server, начиная с версий 6.x.
Суть этой схемы состоит в том, что подписчики на публикацию не могут вносить в нее изменений и имеют доступ к содержащейся в ее статьях информации только для чтения. Однако это не означает, что все изменения в публикуемые таблицы могут вноситься только на одном узле. Используя вертикальные и горизонтальные разделения одной и той же таблицы, можно построить модель, в которой данные этой таблицы будут модифицироваться сразу на нескольких узлах. Идея состоит в выделении разделов таким образом, чтобы каждому из узлов было предоставлено право модифицировать собственный раздел данных, публикуемый этим узлом.
SQL Server позволяет организовать двунаправленную репликацию транзакций и без выделения разделов, для чего применяются пользовательские хранимые процедуры и выделение обратных циклов. Однако чаще всего репликация транзакций используется в тех случаях, когда подписчикам достаточно иметь доступ к публикациям только для чтения или можно ограничиться выделением для них собственных разделов данных. Подобные схемы позволяют избежать конфликтов доступа или потери выполненных изменений в системе. Примерами приложений и сценариев, в которых может успешно использоваться схема репликации транзакций, являются базы данных для хранения резервной копии информации, хранилища информации, базы данных с информацией отдельных филиалов или подразделений, центральные базы данных с информацией о складских запасах или объеме реализации, обновляемые и реплицируемые на различные узлы.
Синхронизация
Репликация посредством синхронизации предусматривает фиксацию в конкретный момент времени текущего состояния и структуры данных публикации с последующей рассылкой этих сведений в адрес подписчиков. Синхронизация также впервые появилась в SQL Server 6.x и является имеющим наиболее простую организацию типом репликации. Поскольку передаваемые данные представляют собой копию информации на определенный момент времени, нет необходимости беспокоиться о возникновении конфликтов или потере сведений об отдельных транзакциях. Примерами приложений и сценариев, в которых может успешно использоваться схема синхронизации, являются справочные таблицы, содержимое которых изменяется относительно редко, анонимные подписчики, таблицы со статической или редко изменяемой информацией.
Репликация методом слияния
Репликация методом слияния представляет собой специфическую форму репликации транзакций. Основное отличие этого типа репликации состоит в том, что несколько пользователей могут подписаться на публикацию и независимо редактировать ее статьи (таблицы) без необходимости выполнять разделение данных или применять пользовательские хранимые процедуры. Когда подписчик вносит изменения в публикацию, сведения об этих изменениях пересылаются назад, на публикующий сервер. Если в процессе работы возникает конфликт (например, пользователи на различных узлах модифицируют одну и ту же строку таблицы после синхронизации баз данных), он разрешается либо с помощью приоритетов, либо путем предоставления преимущества первому из пользователей, внесших изменения в данные.
Примерами приложений и сценариев, в которых может успешно применяться схема репликации методом слияния, служат приложения, используемые торговыми агентами на портативных переносных компьютерах для ввода сведений о заказах и заказчиках в автономном режиме. Позднее, когда агент возвращается в свой офис и подключает переносной компьютер к корпоративной сети, SQL Server обеспечивает передачу данных о выполненных операциях в центральную базу данных.
Непосредственно обновляемые подписчики
Это еще одна форма репликации изменений в SQL Server 2000. Непосредственно обновляемые подписчики организуются на основе репликации транзакций (можно использовать и репликацию синхронизацией) и допускают внесение подписчиком изменений в статьи публикации. Выполненные изменения дублируются на стороне публикующего сервера с помощью двухступенчатого протокола фиксации изменении, а затем реплицируются в адрес остальных подписчиков с использованием стандартного механизма репликации транзакций. Двухступенчатый протокол фиксации изменений требует, чтобы изменение было немедленно выполнено на всех участвующих в транзакции серверах, иначе транзакция будет отменена с восстановлением всех внесенных изменений. Следовательно, все серверы, участвующие в выполнении транзакции, должны иметь надежное соединение друг с другом.
При использовании репликации по схеме непосредственно обновляемых подписчиков удается избежать чрезмерной сложности двухступенчатого протокола фиксации изменений (связанной с необходимостью установки соединений одновременно между всеми участвующими в транзакции серверами), обеспечивая в то же время целостность выполняемой транзакции. Примерами приложений и сценариев, в которых может успешно использоваться репликация по схеме непосредственно обновляемых подписчиков, служат приложения, применяющие надежные сетевые соединения и имеющие невысокий уровень интерактивных транзакций, а также приложения, в которых одни и те же данные обрабатываются как на центральном, так и на удаленных узлах.
Согласованность транзакций
В контексте репликации данных согласованность транзакций означает, что на всех узлах данные будут иметь идентичные состояния, соответствующие тому, которое могло возникнуть при выполнении всех транзакций на одном и том же узле. Репликация вносит в процессы некоторый элемент случайности, который выражается в появлении определенных временных задержек между моментом выполнения изменения в данных и моментом репликации этих сведений подписчикам. В SQL Server 2000 задержки репликации относятся к одному из двух возможных вариантов согласованности транзакций: гарантированной неполной согласованности (guaranteed loose consistency) и гарантированному отсутствию согласованности (guaranteed no consistency).
Гарантированная неполная согласованность означает, что синхронизация данных между сервером-источником и сервером-получателем не выполняется немедленно. Прежде чем подробнее остановиться на этом варианте, рассмотрим еще одну модель распределенных данных — гарантированную точную согласованность (guaranteed tight consistency). Она может быть реализована в SQL Server с использованием двухступенчатого протокола фиксации изменений. В этой модели все выполняемые транзакции либо фиксируются, либо отменяются одновременно на всех серверах, поэтому данные всех серверов всегда синхронизированы на 100%.
В модели с гарантированной неполной согласованностью транзакции фиксируются или отменяются только на исходном сервере. После завершения транзакции сведения о выполненных изменениях асинхронно рассылаются на серверы-подписчики. Самое большое различие между моделями гарантированной точной и гарантированной неполной согласованности данных заключается в том, что в последнем случае между выполнением изменений на исходном сервере и их репликацией на сервер-подписчик проходит некоторое время, на протяжении которого базы данных остаются несогласованными. Модель гарантированной неполной согласованности данных реализуется в функциях репликации транзакций и синхронизации. Модель, реализуемая в функции непосредственно обновляемых подписчиков, можно считать промежуточной между моделями гарантированной точной и гарантированной неполной согласованности данных. В этом случае двухступенчатый протокол фиксации изменений (точная согласованность) используется при взаимодействии серверов двух узлов (публикующий сервер и подписчик), после чего запускается механизм стандартной репликации транзакций (неполная согласованность), применяемый для передачи сведений об изменении в адрес всех остальных подписчиков.
При репликации методом слияния используется модель гарантированного отсутствия согласованности данных. Если согласованность отсутствует, данные идентичны на всех узлах и соответствуют состоянию, которое не может быть получено при выполнении всех транзакций на одном и том же узле.
Поскольку репликация методом слияния предназначена для узлов, не имеющих постоянного соединения друг с другом, возможность автономной работы узла оказывается более важным условием, чем согласованность транзакций. В конце концов состояния данных всех узлов синхронизируются, однако это может оказаться не то состояние, которого можно достичь, если все изменения выполняются на одном и том же узле.
База данных рассылки
В базе данных рассылки хранятся сведения обо всех транзакциях, подлежащих репликации на серверы-подписчики (при использовании репликации транзакций). Она функционирует как промежуточная пересылающая база данных. Сведения о транзакции сохраняются в базе данных рассылки до тех пор, пока все подписчики не подтвердят успешную доставку этой информации. К тому же эта база данных используется для хранения информации о синхронизации публикаций и подписчиков.
Системные таблицы, входящие в состав базы данных рассылки.
• MSmerge_history — содержит информацию о выполненных ранее обновлениях подписчиков.
• MSmerge_agents — содержит сведения об агентах слияния.
• MSdistribution_agents — содержит сведения об агентах рассылки.
• MSdistribution_history — содержит информацию для агентов рассылки.
• MSlogreader agents — содержит сведения об агентах чтения журнала на локальном рассылающем сервере.
• MSlogreader_history — содержит информацию для агентов чтения журнала.
• MSrepl_commands — содержит команды репликации.
• MSrepl errors — содержит сведения о неудачных попытках выполнения про
цедур репликации.
• MSrepl_transactions — содержит отдельную строку для каждой подлежащей
репликации транзакции.
• MSrepl version — содержит единственную строку со сведениями о версии те
кущей установленной службы репликации.
Обзор агентов репликации SQL Server
Для эффективного управления работой системы репликации SQL Server необходимо подробно ознакомиться с различными агентами, используемыми в процессах репликации.
Все существующие типы агентов:
• Агент чтения журнала (log reader). Анализирует наличие в журнале транзакций публикуемой базы данных записей об отдельных транзакциях, подлежащих
репликации. Сведения о найденных транзакциях агент чтения журнала помещает в базу данных рассылки. Во всех публикациях по методу репликации транзакций имеются агенты чтения журнала.
• Агент слияния (merge agent). Отвечает за слияние поступающих изменений, а
также за выполнение исходной синхронизации, осуществляемой с помощью
агента синхронизации.
• Агент синхронизации (snapshot agent). Создает файлы синхронизации на рассылающем сервере и фиксирует в базе данных рассылки статус информации о
синхронизации между публикуемой базой данных и базами данных серверов-
подписчиков. Во всех публикациях имеются агенты синхронизации.
• Агент рассылки (distribution agent). Отвечает за рассылку серверам-
подписчикам сведений о транзакциях, помещенных в базу данных рассылки.
Рекомендация для Вас - 1. Организационная структура.
В публикациях по методу репликации транзакций и синхронизации имеются
отдельные агенты рассылки для каждого сервера-подписчика.
В SQL Server 2000 с помощью предоставляемых элементов управления ActiveX агенты слияния и рассылки могут быть запущены из других приложений.
Варианты согласования
Согласованием (synchronization) называется процесс уведомления публикующего сервера и сервера-подписчика о том, что их базы данных находятся в одном состоянии и службы репликации могут начать свою работу. SQL Server поддерживает несколько вариантов согласования. По умолчанию используется автоматическое согласование серверов, означающее, что система SQL Server автоматически выполняет процедуры согласования в соответствии с установленным интервалом. Если согласование не выполняется, SQL Server предполагает, что статьи источника данных уже синхронизированы со статьями серверов-получателей. Система не предпринимает никаких действий для подтверждения этого факта. В таком случае вся ответственность возлагается на администратора.