Pergunta

Eu tenho um pacote DTS que está levantando um erro com um "Copy SQL Server Objects" tarefa. A tarefa está copiando uma tabela mais os dados de um servidor SQL Server 2000 SP4 para outro (mesma versão) e está dando o erro: -

Não foi possível encontrar restrição CHECK para 'dbo.MyTableName', embora a tabela é marcada como ter um.

A tabela de origem tem uma restrição de verificação definida que parece causar o problema. Depois de executar o pacote DTS, a coisa parece funcionar corretamente - a mesa, todas as restrições e os dados são criados no servidor de destino? Mas o erro acima é levantada causando etapas subseqüentes para não correr.

Qualquer idéia porque este erro é gerado?

Foi útil?

Solução

Isso indica que os metadados nas tabelas de sys ficou fora de sincronia com o seu esquema actual. Se você não está vendo quaisquer outros sinais de corrupção mais generalizada, fazendo uma reconstrução da tabela, copiando-o para outra tabela (SELECT * INTO newtable de OldTable), deixando cair a tabela antiga e, em seguida, mudar o nome do novo e substituir as restrições vão Socorro. Esta é semelhante à forma como o gerente da empresa para 2000 faz as coisas quando você inserir uma coluna que não está no fim da tabela, então a inserção de uma nova coluna no meio da tabela e, em seguida, removendo vai conseguir a mesma coisa se você não 't quer escrever manualmente as consultas.

Eu seria um pouco preocupado com o estado do banco de dados como um todo, se você ver outras ocorrências deste tipo de erro. (Estou assumindo aqui que você já fez comandos CHECKDB e que o erro persiste ...)

Outras dicas

Este erro começou quando uma nova coluna (com uma restrição de verificação) foi adicionado a uma tabela existente. Investigar eu tenho: -

  • Copiado a tabela para um destino diferente do SQL Server e tenho o mesmo erro.
  • Criado uma nova tabela com exatamente a mesma estrutura, mas nome diferente e copiado sem erro.
  • Caiu e recriado a restrição de verificação na mesa o problema, mas ainda obter o mesmo erro.
  • dbcc checktable ( 'MyTableName') com ALL_ERRORMSGS dá nenhum erro.
  • DBCC CHECKDB no banco de dados origem e de destino não dá erros.

Curiosamente o pacote DTS parece: -

  • Copiar tabela.
  • copiar os dados.
  • Criar as restrições

Como a verificação da restrição criar tempo é de 7 minutos após a tabela criar tempo isto cria a restrição de verificação, depois de ter movido os dados. Faz sentido uma vez que não tem que verificar os dados como ele está copiando, presumivelmente melhorar o desempenho.

Como Godeke sugere, acho que algo está corrompido nas tabelas do sistema, como uma nova tabela com as mesmas colunas obras. Mesmo que as instruções DBCC dar nenhum erro?

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