Solucionando erros de replicação em rollups

Não modifique diretamente dados do banco de dados de rollup

A Ivanti implementa a replicação do SQL Server como uma replicação transacional de mão única, do publicador para o assinante. Se você modificar dados "replicados" no assinante, essas alterações não serão replicadas no publicador. Além disso, o publicador não ficará ciente dessas alterações. Se você quiser reverter as alterações, terá de usar o Replication Monitor do SQL Server, invalidar o instantâneo daquele publicador e forçar um novo instantâneo.

Erro de replicação em ProductSnapshot após atualizar versões do Endpoint Manager

Caso veja esta mensagem de erro:

O processo não pôde copiar em massa na tabela '"dbo"."PRODUCTSnapshot"'

O problema é que a exibição ReplProductV no núcleo atualizado está fora de sincronia com a tabela ProductSnapshot mais antiga no banco de dados de rollup.

Para corrigir esse erro, a exibição precisa coincidir com o esquema. Execute sp_help tanto na exibição como na tabela e assegure-se de que as colunas "Anulável" coincidam. Muito provavelmente, serão as colunas Versão e ProductGUID que estarão dessincronizadas. Você pode modificar a tabela no seu banco de dados de rollup (mas teria de alterar as exibições em cada núcleo não atualizado também):

alter table productsnapshot alter column version nvarchar9255) not null

alter table productsnapshot alter column productguid nvarchar(255) not null

Ou você pode modificar a exibição no seu núcleo atualizado. Para modificar a exibição, você terá de parar a replicação dela dentro do diálogo de propriedades da publicação local.

Erro de replicação Tamanho de campo muito grande

Caso veja este erro no monitor de replicação, o problema é que a exibição no núcleo e a tabela no rollup têm esquemas incompatíveis. Embora essa incompatibilidade possa ser no comprimento das colunas, normalmente ela se dá no atributo NOT NULL (NÃO NULO) da coluna. Todas as definições de coluna entre Repl<tablename>V no núcleo e o nome da tabela de rollup devem ser compatíveis.

Se o erro listar uma tabela que termine com Snapshot, essa tabela é usada como tabela temporária no rollup. A exibição correspondente no núcleo não conterá a palavra "Snapshot" (por exemplo, ProductSnapshot = ReplProductV).

Erros de replicação com as tabelas ISA e IDE

Problema: ao usar uma versão antiga (ou atualizada) do banco de dados Ivanti, você pode encontrar erros de replicação com as tabelas ISA e IDE. As colunas de identidade nas tabelas ISA e IDE foram renomeadas em 2011.

Solução: assim que a replicação estiver em execução, você precisa descartar assinaturas e artigos para as tabelas ISA e IDE. Altere as exibições e use os nomes antigos da coluna de identificação na cláusula SELECT. Crie os índices UNIQUE CLUSTERED para as exibições e adicione novamente os artigos e os filtros de artigos. Atualize a assinatura. Finalmente, você pode clicar manualmente em iniciar, dentro da janela Status do Agente de Instantâneo, ou esperar que o agente de instantâneo detecte as alterações. Consulte o Replication Monitor para ver se os dados estão corretamente replicados.

Use o script abaixo para corrigir o problema. Certifique-se de usar o nome do assinante e do banco de dados (<your subscriber server name> e <your subscriber database name>) nos procedimentos sp_dropsubscription.

– Descarte a assinatura e o artigo para a tabela ISA

sp_dropsubscription 'LDMS', 'ISACSO', '<your subscriber server name>', '<your subscriber database name>'

go

sp_droparticle @publication = 'LDMS', @article='ISACSO'

go

 

– Altere a exibição da tabela ISA e use a coluna ISAPorts_Idn antiga na lista selecionada.

alter VIEW [dbo].[ReplISAV] (Computer_Idn, ISA_IDN, DeviceNum, Description, Designation, Location, Manufacturer, Type, COREGUID)

WITH SCHEMABINDING AS

SELECT isnull((b.Computer_Idn + 2097152), b.Computer_Idn) Computer_Idn, isnull(cast(b.ISAPorts_IDN as int), cast(0 as int)) ISAPorts_IDN, isnull(b.DeviceNum, 0) DeviceNum, b.Description, b.Designation, b.Location, b.Manufacturer, b.Type, isnull(cast(a.SYSTEMGUID as uniqueidentifier), cast(cast(0 as binary) as uniqueidentifier)) COREGUID

FROM dbo.METASYSTEMS a, dbo.ISA b

WHERE a.SYSTEM_IDN = 0

GO

 

– Recrie o índice clusterizado

create unique clustered index PKReplISAV on ReplISAV (CoreGuid, Computer_Idn, ISA_Idn)

go

 

– Adicione o artigo e o filtro de volta na publicação

sp_addarticle @publication = 'LDMS', @article='ISACSO', @source_object='ReplISAV', @destination_table='ISA', @type='indexed view logbased', @sync_object='ReplISAV', @pre_creation_cmd='delete', @schema_option=0x00, @status=24, @ins_cmd='CALL sp_LDins_ISA', @del_cmd='CALL sp_LDdel_ISA', @upd_cmd='MCALL sp_LDupd_ISA', @fire_triggers_on_snapshot='FALSE'

go

sp_articlefilter @publication = 'LDMS', @article='ISACSO', @filter_name='CoreGuidISA', @filter_clause='CoreGuid = cast(''C192290A-8FAC-4ABF-8183-D6B911ACFE73'' as uniqueidentifier)'

go

 

– Descarte a assinatura e o artigo para a tabela IDE

sp_dropsubscription 'LDMS', 'IDECSO', '<your subscriber server name>', '<your subscriber database name>'

go

sp_droparticle @publication = 'LDMS', @article='IDECSO'

go

 

– Altere a exibição da tabela IDE e use a coluna IDEPorts_Idn antiga na lista selecionada.

ALTER VIEW [dbo].[ReplIDEV] (Computer_Idn, IDE_IDN, DeviceNum, Description, Designation, Location, Manufacturer, Type, ProdName, COREGUID)

WITH SCHEMABINDING AS

SELECT isnull((b.Computer_Idn + 2097152), b.Computer_Idn) Computer_Idn, isnull(cast(b.IDEPorts_Idn as int), cast(0 as int)) IDEPorts_IDN, isnull(b.DeviceNum, 0) DeviceNum, b.Description, b.Designation, b.Location, b.Manufacturer, b.Type, b.ProdName, isnull(cast(a.SYSTEMGUID as uniqueidentifier), cast(cast(0 as binary) as uniqueidentifier)) COREGUID

FROM dbo.METASYSTEMS a, dbo.IDE b

WHERE a.SYSTEM_IDN = 0

GO

 

– Recrie o índice clusterizado

create unique clustered index PKReplIDEV on ReplIDEV (CoreGuid, Computer_Idn, IDE_Idn)

go

 

– Adicione o artigo e o filtro de volta na publicação

sp_addarticle @publication = 'LDMS', @article='IDECSO', @source_object='ReplIDEV', @destination_table='IDE', @type='indexed view logbased', @sync_object='ReplIDEV', @pre_creation_cmd='delete', @schema_option=0x00, @status=24, @ins_cmd='CALL sp_LDins_IDE', @del_cmd='CALL sp_LDdel_IDE', @upd_cmd='MCALL sp_LDupd_IDE', @fire_triggers_on_snapshot='FALSE'

go

sp_articlefilter @publication = 'LDMS', @article='IDECSO', @filter_name='CoreGuidIDE', @filter_clause='CoreGuid = cast(''C192290A-8FAC-4ABF-8183-D6B911ACFE73'' as uniqueidentifier)'

go

 

– Atualize a assinatura

sp_refreshsubscriptions @publication='LDMS'

go