Включение создания некластеризованных индексов в базе данных подписки для репликации транзакций SQL Server 2012

У нас есть сценарий SQL, который мы используем для создания публикации и ее статей вместе с подпиской по запросу. Это довольно просто, так как мы явно не исключаем какие-либо статьи, а передаем их всем подписчику (база данных, используемая для запросов, которые используются в наших отчетах, чтобы предотвратить чрезмерную нагрузку на базу данных приложения).

Сценарий как часть настройки публикаций статей перебирает каждую статью в исходной базе данных и для таблиц, выполняет следующее:

    DECLARE @Ins nvarchar(255) = 'CALL sp_MSins_'+@articleSchema+@articleName
    DECLARE @Del nvarchar(255) = 'CALL sp_MSdel_'+@articleSchema+@articleName
    DECLARE @Upd nvarchar(255) = 'CALL sp_MSupd_'+@articleSchema+@articleName

exec sp_addarticle
        @publication = @PublishName, 
        @article = @Joined, 
        @source_owner = @articleSchema,
        @source_object = @articleName,
        @type = N'logbased',
        @description = null, 
        @creation_script = null, 
        @pre_creation_cmd = N'drop', 
        @schema_option = 0x00000000080350DF, 
        @identityrangemanagementoption = N'manual',
        @destination_table = @articleName,
        @destination_owner = @articleSchema, 
        @vertical_partition = N'false', 
        @ins_cmd = @Ins,
        @del_cmd = @Del, 
        @upd_cmd = @Upd

Моя проблема связана с параметром @schema_option для хранимой процедуры sp_addarticle.

Я использовал сценарий, найденный здесь:
https://blogs.msdn.microsoft.com/repltalk/2010/02/24/decrypting-schema_option-parameters-binary-value-for-a-transactional-replication-article/

для проверки моего расчетного (побитового или) значения 0x00000000080350DF и в соответствии с этим скриптом для статей в таблице включены следующие параметры:

   **SCHEMA OPTIONS HERE ARE**  
—————————————
0x01 Generates the object creation script (CREATE TABLE, CREATE PROCEDURE, and so on). This value is the default for stored procedure articles.
0x02 – Generates the stored procedures that propagate changes for the article, if defined.
0x04 – Identity columns are scripted using the IDENTITY property.
0x08 – Replicate timestamp columns. If not set, timestamp columns are replicated as binary.
0x10 – Generates a corresponding clustered index. Even if this option is not set, indexes related to primary keys and unique constraints are generated if they are already defined on a published table.
0x40 – Generates corresponding nonclustered indexes. Even if this option is not set, indexes related to primary keys and unique constraints are generated if they are already defined on a published table.
0x80 – Replicates primary key constraints. Any indexes related to the constraint are also replicated, even if options 0x10 and 0x40 are not enabled.
0x1000 – Replicates column-level collation
0x4000 – Replicates UNIQUE constraints. Any indexes related to the constraint are also replicated, even if options 0x10 and 0x40 are not enabled
0x10000 – Replicates CHECK constraints as NOT FOR REPLICATION so that the constraints are not enforced during synchronization
0x20000 – Replicates FOREIGN KEY constraints as NOT FOR REPLICATION so that the constraints are not enforced during synchronization
0x8000000 – Creates any schemas not already present on the subscriber

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

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

Кто-нибудь знает, почему эта опция не включена для табличных статей? Я пытался интерпретировать документацию по technet: https://technet.microsoft.com/en-us/library/ms173857(v=sql.105).aspx, но не обнаружил причину, по которой этот флаг будет игнорироваться.

Я не могу просто изменить параметр в диалоговом окне свойств в студии управления, поскольку для нашего продукта мы не обязательно имеем прямой доступ к экземпляру SQL Server наших клиентов, но должны выполнять сценарии удаленно с установочной машины через powershell, из которых этот скрипт один.

Заранее спасибо.


person Alex Woodhead    schedule 31.01.2017    source источник
comment
Я не вижу никаких проблем с вашими сценариями, эта тема кажется связанной   -  person TheGameiswar    schedule 31.01.2017


Ответы (1)


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

Чтобы реплицировать индексы, вы можете изменить скрипт для sp_addarticle и заменить @schema_option с 0x0000000008000001 на 0x0000000008000051.

person LS_85    schedule 31.01.2017
comment
Извините, возможно, я не ясно выразился. Я пытаюсь установить параметр для репликации таблицы, а не для индексированного представления. Согласно упомянутому сценарию, я установил эту опцию, но этого не происходит. - person Alex Woodhead; 31.01.2017
comment
Может быть, это связано с версиями SQL? "nofollow noreferrer">mssqltips.com/sqlservertip/2128/ - person LS_85; 31.01.2017