Указание свойств репликации слиянием

В этом разделе объясняется, как задать различные параметры для репликации слияния.

Только для скачивания

В этом разделе описывается, как указать, что статья объединённой таблицы доступна только для скачивания в SQL Server 2014 с использованием SQL Server Management Studio или Transact-SQL. Статьи, доступные только для скачивания, предназначены для приложений с данными, которые не обновляются у подписчиков. Дополнительные сведения см. в статье Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки.

Ограничения и условия

  • Если указать, что статья предназначена только для скачивания после инициализации подписок, все клиентские подписки, которые получили статью, должны быть повторно инициализированы. Подписки сервера не должны быть повторно инициализированы. Дополнительные сведения о влиянии изменений свойств см. в разделе "Изменение свойств публикации" и "Свойства статьи".

Использование среды SQL Server Management Studio

Укажите, что статья доступна только для скачивания на странице "Статьи" мастера создания публикации или на вкладке "Свойства статьи" диалогового окна "Свойства статьи". <> Это диалоговое окно доступно в мастере создания публикаций и в диалоговом окне "Свойства публикации — <публикация> ". Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.

Указание того, что статья доступна только для скачивания на странице "Статьи"

  • На странице статей мастера создания публикаций выберите таблицу, а затем установите флажок "Выделенная таблица" только для скачивания.

Чтобы указать, что статья доступна только для скачивания на вкладке "Свойства статьи" диалогового окна "Свойства статьи" <>

  1. На странице статей мастера создания публикации или диалогового окна "Свойства публикации — публикация<" > выберите таблицу и щелкните "Свойства статьи".

  2. Щелкните "Задать свойства выделенной статьи таблицы " или задайте свойства всех статей таблицы.

  3. В разделе "Целевой объект" вкладки "Свойства статьи" диалогового окна "Свойства статьи>" < укажите одно из следующих значений для направления синхронизации:

    • Скачивание для подписчика, запрет на изменения подписчика
    • Скачать подписчику, разрешить изменения подписчика
  4. Если вы находитесь в диалоговом окне "Свойства публикации — <публикация> ", нажмите кнопку "ОК ", чтобы сохранить и закрыть диалоговое окно.

Использование Transact-SQL

Указание того, что новая статья таблицы слияния доступна только для скачивания

  1. Выполните sp_addmergearticle, указав значение 1 или 2 для параметра @subscriber_upload_options. Числа соответствуют следующему поведению:

    • 0 — нет ограничений (по умолчанию). Изменения, внесенные у подписчика, загружаются издателю.

    • 1 . Изменения разрешены на подписчике, но они не отправляются издателю.

    • 2. Изменения не допускаются для абонента.

      Замечание

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

Изменение существующей статьи таблицы слияния только для скачивания

  1. Чтобы определить, доступна ли статья только для скачивания, выполните sp_helpmergearticle. Отметьте значение upload_options для статьи в наборе результатов.

  2. Если значение, возвращаемое на шаге 1, равно 0, выполните sp_changemergearticle, указав значение subscriber_upload_optionsдля @property, значение 1 для @force_invalidate_snapshot и @force_reinit_subscription, а также значение 1 или 2 для @value, соответствующее следующему поведению:

    • 1 - Изменения разрешены на подписчике, но они не отправляются издателю.

    • 2 - Изменения не разрешены в системе подписчика.

      Замечание

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

Интерактивное разрешение конфликтов

Репликация Microsoft SQL Server предоставляет Interactive Resolver, который позволяет вручную разрешать конфликты во время синхронизации при запросе в Microsoft Windows Synchronization Manager. После включения интерактивного разрешения устраните конфликты в интерактивном режиме во время синхронизации с помощью интерактивного сопоставителя. Интерактивный сопоставитель доступен через Диспетчер синхронизации Microsoft Windows. Дополнительные сведения см. в разделе "Синхронизация подписки с помощью диспетчера синхронизации Windows" (диспетчер синхронизации Windows).

Рекомендации

  • Если синхронизация выполняется за пределами диспетчера синхронизации Windows (как запланированная синхронизация или синхронизация по запросу в SQL Server Management Studio или мониторе репликации), конфликты разрешаются автоматически без вмешательства пользователя, используя разрешение конфликтов по умолчанию, указанное в статье. Дополнительные сведения см. в разделе "Интерактивное разрешение конфликтов".

Использование среды SQL Server Management Studio

Включение интерактивного разрешения конфликтов для статьи

  1. На странице статей мастера создания публикации или <" >выберите таблицу. Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.
  2. Щелкните "Свойства статьи" и выберите пункт "Задать свойства выделенной таблицы" или "Задать свойства всех статей таблиц".
  3. На странице "Свойства статьи" - <Статья> или "Свойства статьи" - <ТипСтатьи> щелкните вкладку "Решатель".
  4. Выберите разрешить подписчику разрешить конфликты интерактивно во время синхронизации по запросу.
  5. Нажмите кнопку ОК.
  6. Если вы находитесь в диалоговом окне "Свойства публикации — <публикация> ", нажмите кнопку "ОК ", чтобы сохранить и закрыть диалоговое окно.

Указание того, что подписка должна использовать интерактивное разрешение конфликтов

  1. В диалоговом окне "Свойства подписки — <подписчик: <SubscriptionDatabase>"> укажите значение True для интерактивного параметра "Разрешить конфликты". Дополнительные сведения о доступе к этому диалоговому окну см. в разделе "Просмотр и изменение свойствпринудительной подписки" и "Просмотр и изменение свойств подписки на вытягивание".
  2. Нажмите кнопку ОК.

Использование Transact-SQL

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

Создание подписки на слияние, которая использует интерактивный сопоставитель

  1. На издателе в базе данных публикации выполните sp_helpmergearticle, указав @publication. Обратите внимание на значение allow_interactive_resolver для каждой статьи в наборе результатов, для которого будет использоваться интерактивный сопоставитель.

    • Если это значение равно 1, будет использоваться интерактивный резольвер.
    • Если это значение равно 0, сначала необходимо включить интерактивный сопоставитель для каждой статьи. Для этого выполните sp_changemergearticle, указав @publication, @article, значение allow_interactive_resolver для @property и значение true для @value.
  2. На подписчике в базе данных подписки выполните sp_addmergepullsubscription. Дополнительные сведения см. в статье Создание подписки по запросу.

  3. На подписчике в базе данных подписок выполните sp_addmergepullsubscription_agent, указав следующие параметры:

    • @publisher, @publisher_db (опубликованная база данных) и @publication.
    • Значение true для @enabled_for_syncmgr.
    • Значение true для @use_interactive_resolver.
    • Сведения учетной записи безопасности, необходимые агенту слияния. Дополнительные сведения см. в статье Создание подписки по запросу.
  4. На издателе в базе данных публикации выполните sp_addmergesubscription.

Определить статью, поддерживающую интерактивный резолвер

На базе данных издателя выполните sp_addmergearticle. Укажите имя публикации, к которой принадлежит статья для @publication, имя статьи для @article, объект базы данных, публикуемый для @source_object, и значение true для @allow_interactive_resolver. Дополнительные сведения см. в статье определить статью.

Указание уровня отслеживания конфликтов и разрешения конфликтов

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

Ограничения и условия

  • При изменении уровня отслеживания после инициализации подписок эти подписки необходимо повторно инициализировать. Дополнительные сведения о влиянии изменений свойств см. в разделе "Изменение свойств публикации" и "Свойства статьи".
  • При отслеживании на уровне строк и столбцов разрешение конфликтов всегда выполняется на уровне строк: выигрышная строка перезаписывает проигрышную строку. Репликация слиянием также позволяет указать отслеживание и разрешение конфликтов на уровне логической записи, однако эти параметры недоступны в SQL Server Management Studio. Сведения о настройке этих параметров из хранимых процедур репликации см. в разделе Определение логического отношения записей между элементами таблицы слияния.

Использование среды SQL Server Management Studio

Укажите отслеживание строк и столбцов для статей для слияния на вкладке "Свойства статьи" диалогового окна "Свойства статьи", которое доступно в мастере новой публикации и в диалоговом окне "Свойства публикации — <публикация>". Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.

Укажите отслеживание на уровне строк или столбцов

  1. На странице статей мастера создания публикации или <" >выберите таблицу.
  2. Щелкните "Свойства статьи" и выберите пункт "Задать свойства выделенной таблицы" или "Задать свойства всех статей таблиц".
  3. На вкладке "Свойства" диалогового окна "Свойства статьи>" < выберите одно из следующих значений для свойства уровня отслеживания: отслеживание на уровне строк или отслеживание на уровне столбцов.
  4. Если вы находитесь в диалоговом окне "Свойства публикации — <публикация> ", нажмите кнопку "ОК ", чтобы сохранить и закрыть диалоговое окно.

Использование Transact-SQL

Указание параметров отслеживания конфликтов для новой статьи слияния

  1. На издателе в базе данных публикации выполните sp_addmergearticle и укажите одно из следующих значений для @column_tracking:

    • true . Используйте отслеживание на уровне столбцов для статьи.
    • false — используйте отслеживание на уровне строк, которое является значением по умолчанию.

Изменение параметров отслеживания конфликтов для статьи слияния

  1. Чтобы определить параметры отслеживания конфликтов для статьи слияния, выполните sp_helpmergearticle. Обратите внимание на значение параметра column_tracking в результирующем наборе статьи. Значение 1 означает, что используется отслеживание на уровне столбцов, а значение 0 означает, что используется отслеживание на уровне строк.

  2. На сервере публикации в базе данных публикации выполните sp_changemergearticle. Укажите значение column_tracking для @property и одно из следующих значений для @value:

    • true . Используйте отслеживание на уровне столбцов для статьи.
    • false — используйте отслеживание на уровне строк, которое является значением по умолчанию.

    Укажите значение 1 для @force_invalidate_snapshot и @force_reinit_subscription.

Отслеживание удаления

Замечание

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

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

Это важно

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

Укажите игнорирование удалений для новой статьи объединения.

  1. На издателе в базе данных публикации выполните sp_addmergearticle (Transact-SQL). Укажите значение false для @delete_tracking. Дополнительные сведения см. в статье определить статью.

    Замечание

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

Укажите, что удаление не учитывается для существующей статьи слияния

  1. Чтобы определить, включена ли компенсация ошибок для статьи, выполните sp_helpmergearticle (Transact-SQL) и запишите значение delete_tracking в результирующем наборе. Если это значение равно 0, удаления уже игнорируются.

  2. Если значение из шага 1 равно 1, выполните sp_changemergearticle (Transact-SQL) на издателе в базе данных публикации. Укажите значение delete_tracking для @property и значение false для @value.

    Замечание

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

Порядок обработки

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

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

Как определяется порядок обработки

Во время синхронизации слиянием статьи по умолчанию обрабатываются в порядке, который необходим вследствие зависимостей между объектами, включая декларативные ограничения ссылочной целостности (DRI), определенные на базовых таблицах. Обработка включает перечисление изменений в таблицу, а затем применение этих изменений. Если функция DRI отсутствует, но фильтры соединения или логические записи существуют между статьями таблиц, статьи обрабатываются в порядке, необходимом фильтрами и логическими записями. Статьи, не связанные с любой другой статьей с помощью DRI, фильтров соединения, логических записей или других зависимостей обрабатываются в соответствии с псевдонимом статьи в системной таблице sysmergearticles (Transact-SQL) .

Рассмотрим публикацию, содержащую таблицы SalesOrderHeader и SalesOrderDetail с первичным ключевым столбцом SalesOrderID в таблице SalesOrderHeader и соответствующим столбцом внешнего ключа SalesOrderID в таблице SalesOrderDetail . Во время синхронизации репликация слиянием предотвращает нарушения внешнего ключа путем вставки новых строк в SalesOrderHeader перед вставкой связанных строк в SalesOrderDetail. Аналогичным образом строки удаляются из SalesOrderDetail перед удалением связанной строки из SalesOrderHeader.

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

При сохранении целостности ссылок с помощью триггеров или на уровне приложения необходимо указать порядок обработки статей. В примере с триггерами необходимо указать, что таблица SalesOrderHeader должна обрабатываться перед SalesOrderDetail, так как порядок обработки основан на порядке вставки. Репликация слиянием автоматически изменит порядок операций удаления на обратный. Репликация слиянием не завершится ошибкой без упорядочения статей, так как агент слияния продолжает обрабатывать статьи, если возникает нарушение ограничений; Затем он повторяет все операции, которые завершились сбоем после обработки других статей. Указание порядка статей позволяет просто избежать повторных попыток и дополнительной обработки, связанной с ними. Если указать неправильный порядок (например, тот, который приводит к обработке подробных записей до записи заголовка), репликация слиянием повторит обработку до тех пор, пока она не завершится успешно.

Новая статья

  1. На издателе в базе данных публикации выполните sp_addmergearticle (Transact-SQL). Укажите целочисленное значение, представляющее порядок обработки для статьи для @processing_order. Дополнительные сведения см. в статье определить статью.

    Замечание

    При создании упорядоченных статей следует оставить пробелы между значениями порядка статей. Это упрощает настройку новых значений в будущем. Например, если у вас есть три статьи, для которых необходимо указать фиксированный порядок обработки, задайте значение @processing_order значение 10, 20 и 30, а не 1, 2 и 3 соответственно.

Существующая статья

  1. Чтобы определить порядок обработки статьи, выполните sp_helpmergearticle (Transact-SQL) и запишите значение processing_order в результирующем наборе.

  2. На сервере издателя в базе данных публикации выполните sp_changemergearticle (Transact-SQL). Укажите значение processing_order для @property и целочисленного значения, представляющего порядок обработки для @value.

См. также

Оптимизация производительности маршрутизации репликаций с помощью условного отслеживания удалений
Обнаружение и разрешение конфликтов в логических записях
Определение связи логических записей между статьями таблиц слияния
Обнаружение и разрешение конфликтов репликации слиянием
Оптимизация производительности репликации слияния с использованием объектов Download-Only
Определение статьи
View and Modify Article Properties (Просмотр и изменение свойств статьи)