none
Erro ao gerar snapshot - replicação MERGE RRS feed

  • Dotaz

  • Olá a todos.

    Gostaria de ver se alguém já passou por este erro e talvez possa dar alguma dica.

    Tenho o SQL SERVER 2017 STD como publisher na matriz e vários SQL 2017 EXPRESS como subscribers nas filiais.

    Há uma publicação para cada filial, pois as tabelas são filtradas e cada filial só recebe o que diz respeito a ela. Nas tabelas há uma coluna que identifica a qual filial o registro pertence. Exemplo:

    Tabela EmpXCli

    Empresa_Id nvarchar(18)

    Cliente_Id nvarchar(18)

    codigo int null

    O filtro de cada replicação usa a coluna "Empresa_Id" , exemplo: [Empresa_Id] = '02937632000101'

    Cada publicação tem o seu filtro e funciona 100%. Acontece que preciso alterar este filtro e incluir a coluna "Cliente_Id" no filtro, deixando assim: "[Empresa_Id] = '02937632000101' or [Cliente_Id] = '02937632000102'"

    Eu consigo alterar o filtro, tanto pela sp_changemergearticle quanto pela interface do SQL Management Studio, mas ao gerar o snapshot, dá erro "Invalid column [Cliente_Id]"

    Este erro ocorre com várias tabelas quando eu altero o filtro. Dá a impressão que esta coluna não está liberada para ser usada no filtro. Já tentei adicionar esta coluna usando o sp_mergearticlecolumn, mas diz que esta coluna já está replicada e continua dando erro na geração do snapshot.

    Como teste, eu criei uma outra tabela, com a mesma estrutura, copiei todos os dados e repliquei esta tabela com  o filtro que eu quero, usando as colunas "Empresa_id" e "Cliente_Id" e funcionou. Então tenho a impressão que o filtro que foi criado quando a tabela foi replicada a primeira vez, não pode mais ser alterado.

    Alguém já passou por isto?

    Grato,

    Telli.

    Complementando: Vi que na tabela MSmerge_bi_<GUID> existe a coluna Empresa_Id mas não existe a coluna Cliente_Id, que foi incluída no filtro. Será que posso criar a coluna Cliente_Id 'na unha' nesta tabela? Como é uma tabela do sistema, não sei as implicações que pode ter...

    • Upravený Telli úterý 30. dubna 2019 18:25
    úterý 30. dubna 2019 17:30

Odpovědi

  • Telli,

    A certo, eu entendi que você tinha alterado a estrutura.

    Sim, realizar a criação vai permitir que funcione.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Označen jako odpověď Telli čtvrtek 2. května 2019 20:09
    úterý 30. dubna 2019 22:06
    Moderátor

Všechny reakce

  • Telli,

    Praticamente é isso mesmo, na verdade, o filtro só pode ser criado com a existência da estrutura, a partir do momento que você realiza uma alteração na estrutura que esta sendo replicada, todo esquema internamente deve ser atualizado, sendo assim, você terá que remover esta tabela do atual modelo de replicação, e posteriormente adicionar a estrutura, aplicar os filtros e publicar novamente a mesma.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    úterý 30. dubna 2019 17:54
    Moderátor
  • Junior,

    grato pela resposta.

    Mas não houve alteração na estrutura da tabela. A coluna Cliente_Id sempre existiu, a única modificação foi no filtro.

    Vi que na tabela MSmerge_bi_<GUID> a coluna Cliente_Id não foi criada. Pelo que entendi, esta tabela guarda os dados do filtro para melhorar a performance da replicação. Será que, se eu criar a coluna Cliente_Id nesta tabela, daria certo? Por ser uma tabela do sistema, não sei se daria algum problema na replicação.

    Att.,

    Telli.

    úterý 30. dubna 2019 18:29
  • Vou tentar rodar a sp_vupgrade_mergeobjects para ver se atualiza esta tabela e cria a coluna Cliente_Id nela.

    Mas só vou conseguirei fazer isto fora do horário, então posto o resultado aqui na quinta.

    Att.,

    Telli.

    úterý 30. dubna 2019 18:57
  • Telli,

    A certo, eu entendi que você tinha alterado a estrutura.

    Sim, realizar a criação vai permitir que funcione.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Označen jako odpověď Telli čtvrtek 2. května 2019 20:09
    úterý 30. dubna 2019 22:06
    Moderátor
  • Telli,

    Isso, sp_vupgrade_mergeobjects, com certeza vai resolver se o cenário for justamente este que você destacou.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    úterý 30. dubna 2019 22:07
    Moderátor
  • Junior,

    ainda não consegui rodar a sp_vupgrade_mergeobjects, mas criei a coluna Cliente_Id 'na unha' dentro da tabela MSMerge_bi_<GUID> e deu certo.

    Ainda vou rodar a sp_vup.... pois tenho mais tabelas para ajustar o filtro, mas é bom saber que dá pra resolver desta forma.

    Grato,

    Telli.

    čtvrtek 2. května 2019 19:58