Usuário com melhor resposta
Replicação Transacional - FK com DELETE CASCADE

Pergunta
-
Boa tarde pessoal.
Acabei de me deparar com um problema de FK com DELETE CASCADE.
Tenho a tabela A com PK e a tabela B com um campo como FK da tabela A, com delete cascade. Se eu deletar o registro na tabela A, irá deletar automaticamente o registro da tabela B. Essa minha FK é NOT FOR REPLICATION.
Num determinando momento o meu registro da tabela A sofreu alterações simultâneas em dois subscribers. Na hora que chegou no publisher, conflito... até ai, OK.
O problema é que internamente na replicação, quando o sql identifica esse conflito do registro ele executa um delete dessa informação e um insert novamente na versão que vai ganhar o conflito.
delete [dbo].[A] where [IdA] = @c1_old
O problema é que esse delete acaba acionando o cascade, e deleta o registro da tabela B. Ou seja... duas alterações no registro e o sql acabou deletando o meu registro filho....
Gostaria de saber se isso é normal, ou seja, a replicação decidir por executar o que teoricamente é da minha modelagem. Devo evitar a opção CASCADE? Existe CASCADE NOT FOR REPLICATION?
Vlw pessoal.
André Duarte
Respostas
-
André,
Então se o SQL Server esta realizando este comportamento, é porque as operações que estão sendo processadas estão fazendo ele agir assim, dizer que é o comportamento padrão pode ser incoerente e vago.
Acredito que neste caso é melhor você remover o Cascade e observar se não existem outros impactos!!!
Agora uma outra alternativa é replicar esta Foreign Key e observar o comportamento da replicação para entender o que pode acontecer.
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 Edinaldo Junior sexta-feira, 25 de julho de 2014 19:01
- Marcado como Resposta André Duarte quinta-feira, 11 de dezembro de 2014 13:18
-
Fiz mais testes, um pouco mais detalhados e não encontrei mais problemas.
O meu cascade que não estava replicado em um dos lados. Depois acertei tudo e funcionou 100%.
André Duarte
- Marcado como Resposta André Duarte quinta-feira, 11 de dezembro de 2014 13:18
Todas as Respostas
-
André,
Então se o SQL Server esta realizando este comportamento, é porque as operações que estão sendo processadas estão fazendo ele agir assim, dizer que é o comportamento padrão pode ser incoerente e vago.
Acredito que neste caso é melhor você remover o Cascade e observar se não existem outros impactos!!!
Agora uma outra alternativa é replicar esta Foreign Key e observar o comportamento da replicação para entender o que pode acontecer.
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 Edinaldo Junior sexta-feira, 25 de julho de 2014 19:01
- Marcado como Resposta André Duarte quinta-feira, 11 de dezembro de 2014 13:18
-
Fiz mais testes, um pouco mais detalhados e não encontrei mais problemas.
O meu cascade que não estava replicado em um dos lados. Depois acertei tudo e funcionou 100%.
André Duarte
- Marcado como Resposta André Duarte quinta-feira, 11 de dezembro de 2014 13:18