sp_changemergearticle (Transact-SQL)
Изменяет свойства статьи слияния. Эта хранимая процедура выполняется на издателе в базе данных публикации.
Синтаксис
sp_changemergearticle [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @property = ] 'property' ]
[ , [ @value = ] 'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
Аргументы
[ @publication=] 'publication'
Имя публикации, в которой находится статья. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.[ @article=] 'article'
Имя изменяемой статьи. Аргумент article имеет тип sysname и не имеет значения по умолчанию.[ @property=] 'property'
Изменяемое свойство данной статьи и публикации. Аргумент property имеет тип nvarchar(30) и может принимать одно из значений, перечисленных в таблице.[ @value=] 'value'
Новое значение заданного свойства. Аргумент value имеет тип nvarchar(1000) и может принимать одно из значений, перечисленных в таблице.Эта таблица описывает свойства статей и значения этих свойств.
Свойство
Значения
Описание
allow_interactive_resolver
true
Разрешает использование для статьи интерактивного сопоставителя.
false
Запрещает использование для статьи интерактивного сопоставителя.
article_resolver
Пользовательский сопоставитель для статьи. Применяется только к статье таблицы.
check_permissions (битовая карта)
0x00
Разрешения уровня таблицы не проверяются.
0x10
Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции INSERT.
0x20
Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции UPDATE.
0x40
Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции DELETE.
column_tracking
true
Включает трассировку уровня столбца. Применяется только к статье таблицы.
ПримечаниеТрассировка уровня столбца не может использоваться при публикации таблиц, содержащих больше 246 столбцов.false
Выключает трассировку уровня столбца и оставляет обнаружение конфликтов уровня строки. Применяется только к статье таблицы.
compensate_for_errors
true
Выполняется компенсация при возникновении ошибок синхронизации. Дополнительные сведения см. в разделе sp_addmergearticle.
false
Компенсация не выполняется. Это значение по умолчанию. Дополнительные сведения см. в разделе sp_addmergearticle.
Важно!Даже если в данных в измененных строках отсутствует конвергенция, то, если исправить все ошибки, изменения можно применить и добиться конвергенции данных. Если исходная таблица для статьи уже опубликована в другой публикации, то значение параметра compensate_for_errors должно быть одинаковым для обеих статей.creation_script
Путь и имя необязательного сценария схем статей, используемого для создания статьи в базе данных подписки.
delete_tracking
true
Выполняется репликация инструкций DELETE, что является значением по умолчанию.
false
Репликация инструкций DELETE не выполняется.
Важно!Присвоение параметру delete_tracking значения false приведет к отсутствию конвергенции данных, поэтому удаленные строки нужно будет удалить вручную.description
Описание статьи.
destination_owner
Имя владельца объекта в базе данных подписки, если не равно dbo.
identity_range
Имеет тип bigint и определяет размер диапазона идентификаторов при назначении новых значений идентификаторов, если параметру identityrangemanagementoption статьи присвоено значение auto или если параметр auto_identity_range имеет значение true. Применяется только к статье таблицы. Дополнительные сведения см. в подразделе «Репликация слиянием» раздела Репликация столбцов идентификаторов.
identityrangemanagementoption
manual
Запрещает автоматическое управление диапазонами идентификаторов. Помечает столбцы идентификаторов как NOT FOR REPLICATION, чтобы разрешить ручное управление диапазонами идентификаторов. Дополнительные сведения см. в разделе Репликация столбцов идентификаторов.
none
Запрещает какое бы то ни было управление диапазонами идентификаторов.
logical_record_level_conflict_detection
true
Обнаружение конфликтов производится при внесении изменений в любое место логической записи. Требует, чтобы параметр logical_record_level_conflict_resolution был установлен в значение true.
false
Обнаружение конфликтов по умолчанию, как указано параметром column_tracking.
logical_record_level_conflict_resolution
true
Выигравшая логическая запись целиком перезаписывает проигравшую.
false
Победившие строки не ограничиваются пределами логической записи.
partition_options
0
Фильтрация для данной статьи либо является статической, либо не возвращает уникального подмножества данных для каждой из секций, то есть перекрывающихся секций.
1
Секции перекрываются, и изменения DML, произведенные на подписчике, не могут быть внесены в секцию, которой принадлежит строка.
2
Фильтрация для статьи дает неперекрывающиеся секции, но несколько подписчиков могут получить одну и ту же секцию.
3
Фильтрация для статьи дает неперекрывающиеся секции, уникальные для каждой из подписок.
ПримечаниеЕсли для параметра partition_options указано значение 3, в этой статье может присутствовать только одна подписка для каждой из секций данных. Если создается вторая подписка, в которой условие фильтрации сводится к той же секции, что и в существующей подписке, то существующая подписка удаляется.pre_creation_command
none
Если таблица на подписчике уже существует, не выполняется никаких действий.
delete
Выполняет удаление, используя предложение WHERE, указанное в фильтре подмножества.
drop
Удаляет таблицу перед ее повторным созданием.
truncate
Усекает целевую таблицу.
processing_order
Имеет тип int и указывает порядок обработки статей в публикации слиянием.
pub_identity_range
Имеет тип bigint и указывает размер диапазона, выделяемого подписчику с серверной подпиской, если параметру identityrangemanagementoption статьи присвоено значение auto или если параметр auto_identity_range имеет значение true. Этот диапазон идентификаторов резервируется переиздающему подписчику для выделения собственным подписчикам. Применяется только к статье таблицы. Дополнительные сведения см. в подразделе «Репликация слиянием» раздела Репликация столбцов идентификаторов.
published_in_tran_pub
true
Статья также опубликована в публикации транзакций.
false
Статья не опубликована в публикации транзакций.
resolver_info
Используется для указания дополнительных сведений, необходимых пользовательскому сопоставителю. Некоторым из сопоставителей Майкрософт в качестве входного параметра требуется столбец. Аргумент resolver_info имеет тип nvarchar(255) и значение по умолчанию NULL. Дополнительные сведения см. в разделе Арбитры на базе технологии Microsoft COM.
schema_option (битовая карта)
Дополнительные сведения см. в подразделе «Примечания» далее в этом разделе.
0x00
Запрещает выполнение сценариев агентом моментальных снимков и использует сценарий, указанный в параметре creation_script.
0x01
Создает сценарий создания объекта (CREATE TABLE, CREATE PROCEDURE и т. д.).
0x10
Создает соответствующий кластеризованный индекс.
0x20
Преобразует определяемые пользователем типы данных в базовые типы данных подписчика. Этот параметр не может использоваться, если на столбец UDT наложено ограничение CHECK или DEFAULT, если столбец UDT является частью первичного ключа или если вычисляемый столбец ссылается на столбец UDT.
0x40
Создает соответствующие некластеризованные индексы.
0x80
Включает объявленную ссылочную целостность по первичным ключам.
0x100
Реплицирует пользовательские триггеры для статьи таблицы, если заданы.
0x200
Реплицирует ограничения FOREIGN KEY. Если таблица, к которой происходит обращение, не является частью публикации, все ограничения FOREIGN KEY в опубликованной таблице не реплицируются.
0x400
Реплицирует ограничения CHECK.
0x800
Реплицирует значения по умолчанию.
0x1000
Реплицирует параметры сортировки на уровне столбцов.
0x2000
Реплицирует расширенные свойства, связанные с исходным объектом опубликованной статьи.
0x4000
Реплицирует уникальные ключи для статьи таблицы, если они определены.
0x8000
Создает инструкции ALTER TABLE при включении в сценарий ограничений.
0x10000
Реплицирует ограничения CHECK как NOT FOR REPLICATION, чтобы они не активировались при синхронизации.
0x20000
Реплицирует ограничения FOREIGN KEY как NOT FOR REPLICATION, чтобы они не применялись при синхронизации.
0x40000
Реплицирует файловые группы, связанные с секционированной таблицей или индексом.
0x80000
Реплицирует схему секционирования для секционированной таблицы.
0x100000
Реплицирует схему секционирования для секционированного индекса.
0x200000
Реплицирует статистику по таблице.
0x400000
Реплицирует привязки к значениям по умолчанию.
0x800000
Реплицирует привязки к правилам.
0x1000000
Реплицирует полнотекстовый индекс.
0x2000000
Коллекции XML-схем, привязанные к столбцам xml, не реплицируются.
0x4000000
Реплицирует индексы, основанные на столбцах xml.
0x8000000
Создает все схемы, отсутствующие в настоящий момент на подписчике.
0x10000000
Преобразует столбцы xml в формат ntext на подписчике.
0x20000000
Преобразует типы данных больших объектов (nvarchar(max), varchar(max), и varbinary(max)), которые были представлены в SQL Server 2005 в типы данных, которые поддерживаются на SQL Server 2000. Сведения о сопоставлении этих типов см. в подразделе «Сопоставление новых типов данных для более ранних версий» раздела Использование нескольких версий SQL Server в топологии репликации.
0x40000000
Реплицировать разрешения.
0x80000000
Попытаться удалить зависимости для всех объектов, не являющихся частью публикации.
0x100000000
Использовать этот параметр для репликации атрибута FILESTREAM, если он указан в столбцах типа varbinary(max). Не указывайте этот параметр, если выполняется репликация таблиц на подписчики SQL Server 2005. Репликация таблиц с колонками FILESTREAM на подписчики SQL Server 2000 не поддерживается, независимо от того, как задан этот параметр схемы. См. связанный параметр 0x800000000.
0x200000000
Преобразует типы данных даты и времени (date, time, datetimeoffset, и datetime2), которые представлены в SQL Server 2008, в типы данных, которые поддерживаются на более ранних версиях SQL Server. Сведения о сопоставлении этих типов см. в подразделе «Сопоставление новых типов данных для более ранних версий» раздела Использование нескольких версий SQL Server в топологии репликации.
0x400000000
Проводит репликацию параметра сжатия для данных и индексов. Дополнительные сведения см. в разделе Создание сжатых таблиц и индексов.
0x800000000
Задайте этот параметр для сохранения данных атрибута FILESTREAM в его файловой группе на подписчике. Если этот параметр не задан, данные атрибута FILESTREAM сохраняются в файловой группе по умолчанию. Репликация не создает файловые группы, поэтому, если этот параметр задан, необходимо создать файловую группу до применения моментального снимка на подписчике. Дополнительные сведения о создании объектов до применения моментального снимка см. в разделе Выполнение сценариев до и после применения моментального снимка.
См. связанный параметр 0x100000000.
0x1000000000
Преобразует определяемые пользователем типы данных среды CLR в тип данных varbinary(max), чтобы столбцы с определяемым пользователем типом данных могли реплицироваться на подписчики, на которых выполняется SQL Server 2005.
0x2000000000
Преобразует тип данных hierarchyid в varbinary(max), чтобы столбцы типа hierarchyid можно было реплицировать на подписчики, использующие SQL Server 2005. Дополнительные сведения об использовании столбцов hierarchyid в реплицированных таблицах см. в разделе hierarchyid (Transact-SQL).
0x4000000000
Проводит репликацию всех фильтруемых индексов для таблицы. Дополнительные сведения о фильтруемых индексах см. в разделе Рекомендации по проектированию отфильтрованных индексов.
0x8000000000
Преобразует типы данных geography и geometry в тип varbinary(max), чтобы обеспечить возможность репликации столбцов этих типов на подписчики SQL Server 2005.
0x10000000000
Производит репликацию индексов для столбцов типа geography и geometry.
NULL
Система автоматически создает для статьи допустимые параметры схемы.
status
active
Сценарий начальной обработки для публикации таблицы запущен.
unsynced
Сценарий начальной обработки для публикации таблицы будет запущен при следующем запуске агента моментальных снимков.
stream_blob_columns
true
Используется оптимизация потока данных при репликации столбцов больших двоичных объектов. Однако некоторые возможности репликации слиянием, например логические записи, могут воспрепятствовать включению потоковой оптимизации. Параметр stream_blob_columns установлен в значение true, если включен режим FILESTREAM. Это позволяет репликация данных FILESTREAM для оптимального выполнения и сокращения использования памяти. Чтобы статьи таблиц FILESTREAM не использовали большие двоичные объекты, установите параметр stream_blob_columns в значение false.
Важно!Включение данного режима оптимизации памяти может снизить производительность агента слияния во время синхронизации. Этот параметр должен использоваться только при репликации столбцов, содержащих мегабайты данных.false
Оптимизация при репликации столбцов больших двоичных объектов не используется.
subscriber_upload_options
0
Нет ограничений для обновлений, выполняемых на подписчике с помощью клиентской подписки. Все изменения выгружаются на издатель. Изменение этого свойства может потребовать повторной инициализации существующих подписчиков.
1
Изменения на подписчике с помощью клиентской подписки разрешены, но они не выгружаются на издатель.
2
Изменения на подписчике с помощью клиентской подписки не разрешены.
subset_filterclause
Предложение WHERE задает горизонтальную фильтрацию. Применяется только к статье таблицы.
Важно!По соображениям производительности не рекомендуется применять функции к именам столбцов в предложениях параметризованных фильтров строк, например LEFT([MyColumn]) = SUSER_SNAME(). При использовании в выражении фильтра функции HOST_NAME и при переопределении ее значения может потребоваться преобразование типов данных с помощью функции CONVERT. Дополнительные сведения о наиболее эффективных способах подобного рода преобразований см. в подразделе «Переопределение значения функции HOST_NAME()» раздела Параметризованные фильтры строк.threshold
Значение в процентах, применяемое для подписчиков с SQL Server Compact 3.5 с пакетом обновления 2 (SP2) или SQL Server более ранних версий. От параметра threshold зависит, когда агент слияния назначает новый диапазон идентификаторов. Если превышен указанный процент использованных значений, агент слияния выделяет новый диапазон идентификаторов. Используется, когда параметру identityrangemanagementoption присвоено значение auto или когда значение параметра auto_identity_range равно true. Применяется только к статье таблицы. Дополнительные сведения см. в подразделе «Репликация слиянием» раздела Репликация столбцов идентификаторов.
verify_resolver_signature
1
Для пользовательского сопоставителя проверяется цифровая подпись, чтобы убедиться, что он получен из надежного источника.
0
Для пользовательского сопоставителя цифровая подпись, подтверждающая, что он получен из надежного источника, не проверяется.
NULL (по умолчанию)
Возвращает список поддерживаемых значений для свойства property.
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
Подтверждает, что действие, выполненное этой хранимой процедурой, может сделать текущий моментальный снимок недействительным. Аргумент force_invalidate_snapshot имеет тип bit и значение по умолчанию 0.Значение 0 указывает, что изменения в статье слияния не приводят к недействительности моментального снимка. Если хранимая процедура определяет, что изменение требует создания нового моментального снимка, возникает ошибка и изменения не выполняются.
Значение, равное 1, означает, что изменения в статье слияния могут привести к недействительности моментального снимка, и дает разрешение на его пометку как устаревшего и создание нового моментального снимка, если имеются существующие публикации, которым он может потребоваться.
Сведения о свойствах, при изменении которых требуется формирование нового моментального снимка, см. в разделе «Примечания».
[ @force_reinit_subscription = ] force_reinit_subscription
Подтверждает, что действие, выполняемое данной хранимой процедурой, может сделать необходимой повторную инициализацию текущих подписок. Аргумент force_reinit_subscription имеет тип bit и значение по умолчанию 0.0 указывает, что изменения в статье слияния не вызывают повторной инициализации подписки. Если хранимая процедура определяет, что изменения потребуют повторной инициализации подписок, возникает ошибка и изменения не выполняются.
Значение, равное 1, означает, что изменения в статье слияния вызывают повторную инициализацию подписок, и дает разрешение на выполнение повторной инициализации подписки.
Свойства, которые при изменении потребуют повторной инициализации всех текущих подписок, см. в разделе «Примечания».
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Замечания
Хранимая процедура sp_changemergearticle используется в репликации слиянием.
Поскольку хранимая процедура sp_changemergearticle предназначена для изменения свойств статьи, которые изначально определяются при помощи хранимой процедуры sp_addmergearticle, дополнительные сведения об этих свойствах см. в разделе sp_addmergearticle.
Изменение следующих свойств требует формирования нового моментального снимка, при этом необходимо указать значение 1 для аргумента force_invalidate_snapshot:
check_permissions
column_tracking
destination_owner
pre_creation_cmd
schema_options
subset_filterclause
Изменение следующих свойств требует повторной инициализации текущих подписок, при этом необходимо указать значение 1 для аргумента force_reinit_subscription:
check_permissions
column_tracking
destination_owner
subscriber_upload_options
subset_filterclause
При задании параметру partition_options значения 3 метаданные очищаются при запуске агента слияния, поэтому время действия секционированного снимка истекает быстрее. При использовании этого параметра следует разрешить запрошенный подписчиком секционированный снимок. Дополнительные сведения см. в разделе Моментальные снимки для публикаций слиянием с параметризованными фильтрами.
Если таблица уже опубликована в других публикациях слиянием, свойство column_tracking должно иметь то же значение, что и ранее указанное для этой таблицы. Этот параметр применим только для статей таблиц.
Если в нескольких публикациях содержатся статьи, основанные на одной и той же базовой таблице, изменение свойств delete_tracking или compensate_for_errors в одной статье приведет к аналогичному изменению этого свойства во всех остальных статьях, основанных на той же таблице.
Если имя входа или пользовательская учетная запись на издателе, от имени которой выполняется процесс слияния, не обладает необходимыми разрешениями на таблицы, недопустимые изменения регистрируются в журнале как конфликты.
При изменении значения параметра schema_option система не выполняет побитовое обновление. То есть при установке параметра schema_option с помощью хранимой процедуры sp_changemergearticle могут быть сброшены ранее установленные биты. Чтобы сохранить существующие параметры, необходимо выполнить логическую операцию & (побитовое И) устанавливаемого значения и текущего значения параметра schema_option, которое можно получить, выполнив хранимую процедуру sp_helpmergearticle.
Таблица «Допустимые параметры схемы»
В следующей таблице описаны допустимые значения для аргумента schema_option, зависящие от типа статьи.
Тип статьи |
Значения параметра схемы |
---|---|
func schema only |
0x01 и 0x2000 |
indexed view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 и 0x200000 |
proc schema only |
0x01 и 0x2000 |
table |
Все параметры. |
view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 и 0x200000 |
Пример
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';
-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2008R2]
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property = N'column_tracking',
@value = N'true',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
Разрешения
Только члены предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner могут выполнять хранимую процедуру sp_changemergearticle.
См. также