Pergunta

Eu erroneamente excluir todas as linhas de uma tabela MS SQL 2000 que é usado em replicação de mesclagem (a tabela está no editor). Eu, então, agravado o problema usando uma operação de DTS para recuperar as linhas de um banco de dados de backup e repovoar a mesa.

Isto criou o seguinte problema: A operação de exclusão marcado as linhas para eliminação nos clientes, mas a operação DTS ignora os gatilhos de replicação para que as linhas importadas não estão marcadas para inserção nos assinantes. Com efeito os assinantes perder os dados, embora seja no editor.

Então eu pensei "sem preocupações" Vou apenas excluir as linhas novamente e, em seguida, adicioná-los corretamente através de uma instrução de inserção e então eles vão ser marcados para inserção nos subscritores.

Este é o meu problema: Eu não posso excluir as linhas DTSed porque eu obter um "Não é possível inserir linha de chave duplicada no objeto 'MSmerge_tombstone' com índice exclusivo 'uc1MSmerge_tombstone'." erro. O que eu gostaria de fazer é de alguma forma excluir as linhas da tabela contornando o gatilho de replicação de mesclagem. Isso é possível? Eu não quero para remover e refazer a replicação porque os subscritores são 50+ janelas dispositivos móveis.

Edit: Eu tentei o comando truncar a tabela. Isto dá o seguinte erro "Pode mesa xxxx não truncar porque é publicada para replicação"

Foi útil?

Solução 6

Obrigado pelas dicas ... Eu finalmente encontrei uma solução:

Eu apaguei o disparador de exclusão de mesclagem da mesa
Eliminado as linhas DTSed
Recriada a fusão de exclusão gatilho
Adicionado minhas linhas corretamente usando uma instrução insert.

Eu estava um pouco preocupado ataque mexer com os disparadores de mesclagem, mas cada coisa aparece para estar funcionando corretamente.

Outras dicas

Você tentou truncar a mesa?

Você pode ter de truncar a tabela e redefinir o campo de volta ID para 0 se você precisa das linhas inseridas ter o mesmo ID. Se não, apenas truncar e ele deve estar bem.

Você também pode olhar para cair temporariamente o índice exclusivo e adicioná-lo de volta quando você está feito.

Olhe em sp_mergedummyupdate

Será que a criação de uma segunda tabela ser uma opção? Você poderia criar uma segunda tabela, preenchê-lo com os dados necessários, adicione as limitações / índices, em seguida, solte a primeira tabela e renomear sua segunda tabela. Isso deve lhe dar os dados com as teclas certas ... e tudo deve consistir de instruções SQL que estão autorizados a escorrer a replicação. Ele só não é provavelmente a melhor sobre o desempenho ... e definitivamente iria impor algum risco.

Eu não tentei isso em primeira mão em um ambiente replicado ... mas pode ser, pelo menos, vale a pena experimentar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top