Поделиться через


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

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

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

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

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

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

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

При синхронизации подписки на публикацию слиянием репликация проверяет наличие конфликтов, вызванных изменениями в одних и тех же данных, внесенных на издателе и подписчике. Можно указать, чтобы конфликты определялись на уровне строки, где любое изменение строки будет считаться конфликтом, либо на уровне столбца, где конфликтом будет считаться только изменение в одних и тех же строке и столбце. Разрешение конфликтов статей выполняется на уровне строки. Дополнительные сведения по определению и разрешению конфликтов при использовании логических записей см. в разделе 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. В качестве значения параметра @property задайте значение column_tracking , а параметру @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. В приведенной выше публикации таблица 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 в параметре @processing_order и целое значение, представляющее порядок обработки, в параметре @value.

См. также:

Оптимизация производительности репликации слиянием с помощью отслеживания условного удаления
Detecting and Resolving Conflicts in Logical Records
Определение связи логических записей между статьями таблиц слияния
Обнаружение и разрешение конфликтов репликации слиянием
Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки
Определение статьи
View and Modify Article Properties (Просмотр и изменение свойств статьи)