Критические изменения репликации в SQL Server

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

Критические изменения в SQL Server 2005 и SQL Server 2008

В данном разделе описаны критические изменения системы репликации, реализованные в SQL Server 2005 или SQL Server 2008.

Критические изменения, влияющие на все типы репликации

Следующие критические изменения относятся ко всем типам репликации.

Возможность

Описание

Изменения, необходимые для сценариев репликации

Модель безопасности агента репликации по сравнению с SQL Server 2000 изменилась. Дополнительные сведения о моделях безопасности см. в разделе Модель безопасности агента репликации. Если пользователь, будучи членом предопределенной роли сервера sysadmin в SQL Server 2005, запускает сценарии репликации, созданные в SQL Server 2000 или SQL Server 7.0, они будут выполняться правильно. Если пользователь является членом предопределенной роли базы данных dbo или какой-либо другой роли, при выполнении сценариев произойдет сбой и их придется обновить. Дополнительные сведения об обновлении сценариев см. в разделе Как обновить сценарии репликации (программирование репликации на языке Transact-SQL). Хотя обновление сценариев, выполняемых членами роли sysadmin, не требуется, рекомендуется его выполнить с целью улучшения безопасности.

Локальные соединения агентов репликации

При обновлении до версии SQL Server 2005 все локальные соединения, использующие проверку подлинности SQL Server, настраиваются на использование проверки подлинности Windows. Локальными называются соединения, производимые агентом к экземпляру SQL Server, запущенному на том же компьютере, что и агент. Например, агент слияния при подписке по запросу запускается на стороне подписчика, и все его соединения с подписчиком являются локальными.

В предыдущих версиях SQL Server агенты по умолчанию запускались в контексте учетной записи службы агента SQL Server. После обновления локальные соединения производятся в контексте этой учетной записи. В SQL Server 2005 возможно управление по отдельности каждой из учетных записей, под которыми агенты репликации запускаются и осуществляют интегрированные с Windows соединения с базами данных и другими ресурсами; для каждого из агентов можно задать отдельную учетную запись. После обновления рекомендуется задать отдельные учетные записи для каждого агента. Дополнительные сведения см. в разделах Рекомендации по обновлению реплицированных баз данных и Модель безопасности агента репликации.

Элементы управления ActiveX

Все элементы управления ActiveX помечаются как небезопасные для выполнения сценариев и инициализации.

Элемент управления ActiveX агента моментальных снимков в SQL Server 2005 недоступен. Вместо этого следует использовать новый управляемый агент моментальных снимков. Дополнительные сведения см. в образце кода SnapshotGenerationAgent и разделе Как создать исходный моментальный снимок (программирование объектов RMO).

Пароль для учетной записи distributor_admin

Доверенные соединения между издателем и удаленным распространителем больше не поддерживаются, так как они не требовали пароля (в версиях более ранних, чем SQL Server 2000 с пакетом обновления 3 (SP3), доверенные соединения использовались по умолчанию). В случае использования удаленного распространителя перед обновлением до SQL Server 2005 следует преобразовать доверенные соединения в недоверенные (это не касается издателей, использующих локальный распространитель). Дополнительные сведения об учетной записи distributor_admin см. в разделе Защита распространителя.

Определение используемого типа соединения

  • Выполните на распространителе процедуру sp_helpdistpublisher. Если значение в столбце trusted равно 1, необходимо изменить соединение на недоверительное.

Изменение соединения на недоверенное

  1. Выполните процедуру sp_changedistpublisher на распространителе, задав параметру @property значение 'trusted', а параметру @value значение 'False'.

    ПримечаниеПримечание
    В некоторых версиях электронной документации по SQL Server 2000 значение «trusted» не является допустимым для параметра @property. Однако оно допустимо для всех выпусков SQL Server 2000.
  2. Выполните процедуру sp_changedistributor_password как на издателе, так и на распространителе, указав для параметра @password надежный пароль.

В состав выпуска SQL Server Express не входит агент SQL Server

При обновлении до выпуска SQL Server Express необходимо перенастроить синхронизацию репликации, поскольку в состав выпуска SQL Server Express не входит агент SQL Server.

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

Если агент SQL Server по-прежнему необходим для запуска заданий агента репликации, следует пользоваться принудительной подпиской или обновить SQL Server до другой версии (агент SQL Server поставляется со всеми версиями, кроме SQL Server Express и SQL Server Compact 3.5 с пакетом обновления 1 (SP1)). При принудительной подписке агент распространителя или агент слияния запускается на распространителе, поэтому агент SQL Server будет доступен (выпуск SQL Server Express не может быть распространителем).

Подписчики Microsoft Access (Jet 4.0)

Jet представляет собой базу данных, лежащую в основе Access, и в SQL Server 2000 подписка на базы данных Jet поддерживалась репликацией. Такие подписки больше не поддерживаются.

Вместо этого рекомендуется пользоваться SQL Server Express. Access может использовать базу данных SQL Server в качестве основы, и на базы данных SQL Server это не влияет. Дополнительные сведения см. в разделе Репликация данных в SQL Server Express.

Критические изменения для репликации транзакций

Следующие критические изменения влияют на репликацию транзакций.

Возможность

Описание

Инициализация подписки на публикацию транзакций из резервной копии1

Чтобы инициализировать подписку из резервной копии SQL Server 2008, пользователь должен быть членом роли сервера dbcreator. В SQL Server 2005 членства в роли db_owner database было достаточно.

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

Режим Message Queuing для подписок, обновляемых посредством очередей

При использовании подписок, обновляемых посредством очередей, изменения со стороны подписчиков записываются в очередь; затем они считываются из очереди и доставляются издателю агентом чтения очереди. В SQL Server 2000 подписки могли использовать как очередь SQL Server, так и Message Queuing. Тип очереди указывался с помощью параметра @queue_type хранимой процедуры sp_addpublication с допустимыми значениями «sql» и «msmq» (служба очередей сообщений). В SQL Server 2005 допустимо только значение «sql». Если в существующих публикациях используется Message Queuing, то при обновлении следует настроить в них использование очереди SQL Server. Приложения, для которых обновление посредством очередей с помощью Message Queuing является основным, следует переписать таким образом, чтобы приспособить их к очереди SQL Server. Дополнительные сведения о подписках, обновляемых посредством очередей, см. в разделе Обновляемые подписки для репликации транзакций.

Если при обновлении SQL Server будет запущена служба очередей сообщений, то существующие очереди подписки MSMQ будут удалены.

Важное примечаниеВажно!
Кроме того, в Windows 2000 и Windows XP должна быть запущена служба координатора распределенных транзакций (Майкрософт), поскольку она необходима для работы очередей сообщений на этих платформах.

Если служба MSMQ не запущена, то необходимо вручную удалить очереди после завершения обновления. Дополнительные сведения об удалении очередей см. в документации по Windows.

Переход на формат вызовов для обновления подписок

По умолчанию для применения изменений к подписчикам в репликации транзакций используется набор хранимых процедур. Каждая процедура имеет формат вызова. Данный формат определяет способ передачи параметров процедуре и объем данных, пересылаемых подписчику. В SQL Server 2000 форматом по умолчанию является CALL. В SQL Server 2005 и SQL Server 2008 форматом по умолчанию является VCALL.

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

1 Эта проблема затрагивает только версию SQL Server 2008 и более поздние версии.

Критические изменения в репликации слиянием

Следующие критические изменения влияют на репликацию слиянием.

Возможность

Описание

Публикация из SQL Server Express

SQL Server MSDE может служить в качестве издателя при публикациях слиянием. Выпуск SQL Server Express, заменяющий выпуск MSDE, не может выступать в роли издателя. Он позволяет подписаться на публикации слиянием, публикации транзакций и публикации моментальных снимков. Репликация слиянием и репликация транзакций с обновляемыми подписками позволяют передавать изменения от подписчиков обратно к издателю. Дополнительные сведения о репликации в SQL Server Express см. в разделе Репликация данных в SQL Server Express.

Пакетирование изменений

В предыдущих версиях SQL Server изменения, производимые агентом слияния, выполнялись в построчном режиме. В SQL Server 2005 изменения объединяются в пакеты с целью улучшения производительности; поэтому в пределах одной инструкции можно вставить, обновить или удалить несколько строк. Если в каких-либо из публикуемых таблиц в базах данных подписки или публикации имеются триггеры, убедитесь, что эти триггеры могут обрабатывать многострочную вставку, обновления и удаления. Дополнительные сведения см. в разделе Замечания по работе с несколькими строками в триггерах DML.

Повторное создание таблиц конфликтов

При обновлении до SQL Server 2005 таблицы конфликтов создаются повторно, а их владельцем назначается DBO. Если в SQL Server 2000 владельцем какой-либо из таблиц был другой пользователь, может потребоваться изменение приложения.

При репликации слиянием для каждой статьи публикации создается таблица конфликтов с именем в формате conflict_ИмяПубликации_ИмяСтатьи. Все таблицы метаданных при обновлении создаются повторно, а все таблицы конфликтов создаются в схеме DBO.

Новые назначаемые диапазоны идентификаторов

Для таблиц, использующих автоматическое управление диапазонами идентификаторов, при репликации в процессе обновления могут назначаться новые диапазоны идентификаторов. Если диапазон идентификаторов какой-либо из таблиц, назначенный подписчику, больше, чем назначенный издателю, при репликации издателю назначается диапазон, равный диапазону подписчика.

Чтобы определить диапазоны, используемые каждой из статей, выполните процедуру sp_helpmergearticle в базе данных публикации и проверьте столбцы pub_identity_range и identity_range.

См. также

Основные понятия