Общие вопросы репликации слиянием
Существует ряд аспектов, которые следует рассмотреть при применении репликации слиянием:
Добавление столбца uniqueidentifier в опубликованные таблицы.
Столбцы timestamp.
Типы данных больших объектов.
Массовая вставка данных в опубликованные таблицы.
Уровень совместимости публикации. Дополнительные сведения см. в подразделе «Уровни совместимости для публикаций слиянием» раздела Использование нескольких версий SQL Server в топологии репликации.
Добавление столбца «uniqueidentifier»
При репликации слиянием используется столбец глобального уникального идентификатора (GUID) для идентификации каждой строки в процессе репликации слиянием. Если в опубликованной таблице нет столбца uniqueidentifier со свойством ROWGUIDCOL и уникальным индексом, репликация добавляет такой столбец. Убедитесь, что инструкции SELECT и INSERT, которые ссылаются на опубликованные таблицы, используют списки столбцов. Если таблица больше не публикуется, и столбец был добавлен репликацией, данный столбец удаляется; если столбец уже существовал, он не удаляется.
Столбцы временных меток
Репликация слиянием поддерживает столбцы timestamp. Столбец timestamp реплицируется, но значения литерала timestamp не реплицируются. Когда моментальный снимок применяется на подписчике, значения timestamp восстанавливаются. Так как значения timestamp восстанавливаются на подписчике, столбцы timestamp отфильтровываются при проведении проверки статьи.
Типы данных больших объектов
Если опубликованная таблица включает какие-либо большие объекты (LOB), рекомендуется указать значение TRUE для параметра @stream_blob_columns хранимой процедуры sp_addmergearticle (Transact-SQL). Если значение TRUE не указано, все большие объекты (LOB) должны быть построены в памяти издателя, что может привести к дефициту ОЗУ, если большие объекты слишком велики.
Важно! |
---|
Включение этой возможности оптимизации памяти может отрицательно повлиять на производительность агента слияния во время синхронизации. Этот параметр следует использовать при репликации столбцов, содержащих мегабайты данных. |
Обновления в столбцы text, ntext и image реплицируются, только если столбец был обновлен явным образом при помощи инструкции UPDATE: обновление приводит в действие триггер, который обновляет метаданные, гарантируя распространение транзакции на другие подписчики. При использовании только операций WRITETEXT и UPDATETEXT изменение не распространяется на другие узлы. Если приложение использует WRITETEXT и UPDATETEXT для обновления столбцов text или ntext добавьте явным образом фиктивную инструкцию UPDATE после операций WRITETEXT или UPDATETEXT в рамках той же транзакции, чтобы запустить триггер, и таким образом гарантировать распространение изменения на другие узлы. Дополнительные сведения об этих типах данных см. в разделе ntext, text и image (Transact-SQL).
Примечание |
---|
Рекомендуется использовать типы данных varchar(max), nvarchar(max), varbinary(max) вместо text, ntext и image, соответственно. |
Массовая вставка данных в опубликованные таблицы
Репликация слиянием отслеживает изменения, внесенные в опубликованные таблицы, при помощи триггеров и системных таблиц. При выполнении массовой вставки данных с помощью программы bcp или команды BULK INSERT триггеры по умолчанию не запускаются. Если триггеры не запускаются, вставки не отслеживаются и не распространяются на другие узлы. Чтобы убедиться, что изменения отслеживаются, рекомендуется использовать один из следующих вариантов выполнения массовых вставок:
Используйте параметр FIRE_TRIGGERS для программы bcp или команды BULK INSERT. Данный параметр обеспечивает запуск триггеров как для типичной операции вставки. Дополнительные сведения см. в разделах Программа bcp и BULK INSERT (Transact-SQL).
Выполните хранимую процедуру sp_addtabletocontents после выполнения массовой вставки. При помощи данной процедуры происходит вставка ссылок в системные таблицы для любых строк в исходной таблице, которые на данный момент не включены. Дополнительные сведения см. в разделе sp_addtabletocontents (Transact-SQL).