Domanda

Ho un pacchetto DTS che sta generando un errore con un " Copia oggetti SQL Server " compito. L'attività sta copiando una tabella più i dati da un server SQL Server 2000 SP4 a un altro (stessa versione) e sta dando l'errore: -

Impossibile trovare il vincolo CHECK per 'dbo.MyTableName', sebbene la tabella sia contrassegnata come avente uno.

La tabella di origine ha un vincolo di controllo definito che sembra causare il problema. Dopo aver eseguito il pacchetto DTS, la cosa sembra funzionare correttamente: la tabella, tutti i vincoli e i dati SONO creati sul server di destinazione? Ma l'errore sopra riportato viene generato causando la mancata esecuzione dei passaggi successivi.

Qualche idea sul perché questo errore viene generato?

È stato utile?

Soluzione

Ciò indica che i metadati nelle tabelle sys non sono stati sincronizzati con lo schema reale. Se non vedi altri segni di corruzione più generalizzata, fai una ricostruzione della tabella copiandola su un'altra tabella (seleziona * in newtable da oldtable), rilasciando la vecchia tabella e quindi rinominando quella nuova e sostituendo i vincoli Aiuto. Questo è simile al modo in cui Enterprise Manager per 2000 fa le cose quando si inserisce una colonna che non è alla fine della tabella, quindi l'inserimento di una nuova colonna al centro della tabella e quindi la rimozione otterrà la stessa cosa se non si non voglio scrivere manualmente le query.

Sarei alquanto preoccupato dallo stato del database nel suo complesso se vedessi altre occorrenze di questo tipo di errore. (Suppongo che tu abbia già eseguito i comandi CHECKDB e che l'errore persista ...)

Altri suggerimenti

Questo errore è iniziato quando una nuova colonna (con un vincolo di controllo) è stata aggiunta a una tabella esistente. Per indagare ho: -

  • Copia la tabella in un altro SQL Server di destinazione e viene visualizzato lo stesso errore.
  • Creata una nuova tabella con esattamente la stessa struttura ma con un nome diverso e copiata senza errori.
  • Eliminato e ricreato il vincolo check nella tabella dei problemi, ma viene comunque visualizzato lo stesso errore.
  • dbcc checktable ('MyTableName') con ALL_ERRORMSGS non dà errori.
  • dbcc checkdb nel database di origine e di destinazione non fornisce errori.

È interessante notare che il pacchetto DTS sembra: -

  • Copia la tabella.
  • Copia i dati.
  • Crea i vincoli

Poiché il tempo di creazione del vincolo di controllo è 7 minuti dopo l'orario di creazione della tabella, ovvero crea il vincolo di controllo DOPO che ha spostato i dati. Ha senso in quanto non è necessario controllare i dati durante la copia, presumibilmente migliorando le prestazioni.

Come suggerisce Godeke, penso che qualcosa sia corrotto nelle tabelle di sistema, poiché funziona una nuova tabella con le stesse colonne. Anche se le istruzioni DBCC non danno errori?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top