Erro ao copiar uma restrição de verificação usando DTS
-
03-07-2019 - |
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?
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?