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

Применимо к:SQL Server

Этот раздел описывает, как определить различные свойства для репликации слиянием.

Статья слияния предназначена только для скачивания

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

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

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

Использование 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 — изменения на подписчике не разрешены.

      Примечание.

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

Interactive Conflict Resolution

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

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

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

Использование 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_addmergepushsubscription_agent. Дополнительные сведения см. в статье Создание подписки по запросу.
  3. На подписчике в базе данных подписки выполните sp_addmergepullsubscription_agent, указав следующие параметры:
    • @publisher, @publisher_db (публикуемая база данных) и @publication.
    • Значение true в параметре @enabled_for_syncmgr.
    • Значение true в параметре @use_interactive_resolver.
    • Сведения учетной записи безопасности, необходимой для агента слияния. Дополнительные сведения см. в статье Создание подписки по запросу.
  4. В базе данных публикации на издателе выполните процедуру sp_addmergepushsubscription_agent.

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

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

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

В этом разделе описывается, как указать уровень отслеживания конфликтов и разрешения для статей слиянием в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

При синхронизации подписки на публикацию слиянием репликация проверяет наличие конфликтов, вызванных изменениями в одних и тех же данных, внесенных на издателе и подписчике. Можно указать, чтобы конфликты определялись на уровне строки, где любое изменение строки будет считаться конфликтом, либо на уровне столбца, где конфликтом будет считаться только изменение в одних и тех же строке и столбце. Разрешение конфликтов статей выполняется на уровне строки. Дополнительные сведения по определению и разрешению конфликтов при использовании логических записей см. в разделе Detecting and Resolving Conflicts in Logical Records.

Ограничения

  • Если изменить уровень отслеживания после инициализации подписок, то эти подписки потребуется инициализировать повторно. Дополнительные сведения о последствиях изменения свойств см. в статье Изменение свойств публикации и статьи.
  • При отслеживании на уровне строк и столбцов устранение конфликтов всегда выполняется на уровне строк: победившая строка перезаписывает проигравшую строку. Слияние реплика также позволяет указать, что конфликты отслеживаются и разрешаются на уровне логической записи, но эти параметры недоступны в СРЕДЕ 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.

Управление отслеживанием команд удаления

Примечание.

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

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

Внимание

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

Отключение обработки команд удаления для новой статьи слияния

На издателе в базе данных публикации выполните 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 должно быть одинаковым для обеих статей.

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

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

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

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

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

Однако в некоторых приложениях ссылочная целостность принудительно навязывается через триггеры базы данных или на уровне приложения, а не через DRI. В приведенной выше публикации таблица SalesOrderDetail вместо DRI могла бы иметь триггер Insert, который перед вставкой проверял бы, что в таблице SalesOrderHeader существует связанная строка. ТаблицаSalesOrderHeader могла бы иметь триггер Delete, который перед удалением проверял бы, что в таблице 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.

См. также

Оптимизация производительности репликации слиянием при работе со статьями, доступными только для скачивания
Определение статьи
View and Modify Article Properties (Просмотр и изменение свойств статьи)