Estou tentando configurar a replicação - esta é a primeira vez que faço isso, então provavelmente estou cometendo algum erro de novato aqui. No momento, estou apenas trabalhando no ambiente de desenvolvimento. Eu tenho seguido o exemplo dado neste tutorial do MSDN .
Configurei a instância para ser seu próprio distribuidor e, em seguida, vou criar uma publicação (que inclui todas, exceto algumas tabelas e todas, exceto uma exibição). A publicação cria muito bem, mas depois, todas as tabelas e colunas foram definidas como "não para replicação"! Portanto, é claro que, quando vou para o status do agente de instantâneo, vejo o erro "Valor explícito deve ser especificado para a coluna de identidade na tabela quando IDENTITY_INSERT está definido como ON ou quando um usuário de replicação está inserindo em uma coluna de identidade NOT FOR REPLICATION".
Na primeira vez que isso aconteceu, percebi que tinha feito algo estúpido, então reverti selecionando "Desativar publicação e distribuição" e fiz algumas pesquisas. Antes de começar a habilitar e configurar a replicação, todas as tabelas são colunas com "não para replicação" definido como "falso", que é o que eu esperaria. Refiz a configuração do editor e distribuidor, o que não mudou nada nas configurações da tabela/coluna. Mas então eu criei a publicação e todos eles foram modificados. Eu desfiz novamente, o que reverteu todos eles de volta para 'para replicação', então gerei, mas não executei um script de publicação (com a GUI do SQL Server Management Studio), e executei cada comando um de cada vez, verificando o estado do "não para replicação" ao longo do caminho. Isto'sp_addarticle
Cada artigo está sendo adicionado com a opção @identityrangemanagementoption = N'manual'
e @schema_option = 0x000000000803509F
, que se traduz nas opções 0x1, 0x2, 0x4, 0x8, 0x10, 0x80, 0x1000, 0x4000, 0x10000, 0x20000 e 0x8000000 (consulte este artigo do MSDN para saber o que significam).
O ambiente é o SQL Server 2012 - dev é a edição Developer e o ambiente de produção eventual é a edição Standard. Estou usando este script para verificar o estado da configuração "não para replicação":
SELECT
tables.name AS table_name,
columns.name AS column_name,
COLUMNPROPERTY(columns.object_id, columns.name, 'IsIdNotForRepl') AS IsIdNotForRepl
FROM sys.tables
JOIN sys.columns
ON tables.object_id = columns.object_id
ORDER BY 3 DESC, 1, 2
Por que a criação de uma publicação de replicação excluiria ativamente os objetos de assunto da replicação e como altero esse comportamento?
Não tenho certeza se você verificou isso; mas há uma opção em sp_addarticle chamada @identityrangemanagementoption. Se definido como manual, ele "Marca a coluna de identidade usando NOT FOR REPLICATION". Por favor, verifique se este é o caso.
Ref: https://msdn.microsoft.com/en-us/library/ms173857(v=sql.110).aspx