locked
Replicação Transacional - Ordem das entregas RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Estou precisando de uma ajuda pra tentar achar um problema na minha replicação.
    Tenho uma replicação transacional entre 5 servidores.

    Tenho uma tabela que está replicada que tem um identity e uma coluna como unique.

    Em um dos assinantes foi realizada as seguintes operações:

    insert da informação identity 100, unique = 'A'
    delete da informação identity 100, unique = 'A'
    insert da informação identity 101, unique = 'A'

    No meu serviço Queue reader agent estava dando um erro no unique onde não era possível inserir a informação A, pois já existia... Fiz a checagem das informações no publicador e em todos os assinantes e o registro 101 estava em todos.
    Ai liguei o profiler no publicador pra ver o que estava tentando inserir na tabela que estava dando erro, e pra minha surpresa, o insert do 100 estava chegando pra inserção.

    Fiquei abismado porque existia o 101 na tabela e depois estava chegando o 100.

    O que eu fiz pra parar de dar o erro... desliguei a constraint unique do campo 'A', a replicação inseriu o registro 100 e depois apagou... liguei novamente a contraint unique e tudo ficou normalizado.

    Informação complementar... esse insert do 100 e delete do 100 era uma transação e o insert do 101 era outra transação que ocorreu depois..

    O SQL não teria que entregar primeiro o 100 pra depois entregar o 101???
    Queria saber mais detalhes do porque isso aconteceu pra eu mudar a modelagem pra não dar mais este problema.

    Obrigado a todos pela ajuda.
    Abç

    André Duarte

    segunda-feira, 23 de dezembro de 2013 20:23

Respostas

  • Olá pessoal... Obrigado pela ajuda...

    Não tive muito mais informações do que as que passei no post inicial. Pra resolver a situação foi exatamente o que postei... alguns outros casos de erros de foreign key estou resolvendo colocando NOT FOR REPLICATION... mas em específico deste caso ai, foi isso mesmo!


    André Duarte

    quinta-feira, 13 de março de 2014 00:37

Todas as Respostas

  • André,

    Como você esta trabalhando com replicação transacional, por padrão o SQL Server vai replicar os comandos e não os dados, sendo assim, dependendo da ordem de processamento que cada transação foi realizada, o SQL Server vai enviar para as Queue o que deve ser replicado, isso em muitos cenários, poderá mudar a sequência interna de processamento de cada transação dependendo do nível de processamento que os assinantes estão trabalhando no momento.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 3 de janeiro de 2014 13:54
    Moderador
  • Olá André,

    Replicação Transacional não é um dos recursos mais utilizados no SQL Server, talvez por isso ainda não tenhamos muitas contribuições. Só pra entender melhor, no momento das transações o assinante estava offline certo?

    O serviço Queue reader agent que você diz é no mesmo servidor assinante que você rodou a query?

    Estou achando curiosa esta possível desordem, chegou a fazer mais testes?

    Abs,


    Luiz Mercante MCITP SQL 2008 | MCTS SQL 2008 | MTA Database Fundamentals | MCTS Windows Apps | MCTS Windows Network | MCP 2003 sqldicas@outlook.com http://sqldicas.com.br Se a resposta foi útil de alguma forma, classifique como resposta ou vote como útil.

    quarta-feira, 5 de março de 2014 12:49
    Moderador
  • Luiz,

    Cara não concordo que a replicação transacional não é um dos recursos mais utilizados, eu particularmente trabalho muito com este modelo de replicação e recomendo fortemente.

    Esta possível desordem pode ocorrer desde que os agentes não estejam conseguindo identificar o que esta sendo processado no publicador algo fora do comum de acontecer, mas que pode ocorrer.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Durval Ramos quarta-feira, 12 de março de 2014 12:51
    terça-feira, 11 de março de 2014 14:11
    Moderador
  • Olá pessoal... Obrigado pela ajuda...

    Não tive muito mais informações do que as que passei no post inicial. Pra resolver a situação foi exatamente o que postei... alguns outros casos de erros de foreign key estou resolvendo colocando NOT FOR REPLICATION... mas em específico deste caso ai, foi isso mesmo!


    André Duarte

    quinta-feira, 13 de março de 2014 00:37
  • Este post foi encerrado por ser considerado um post antigo.

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

    terça-feira, 5 de junho de 2018 18:21
    Moderador