Un'altra opzione è quella di creare una nuova tabella con la chiave primaria appropriata. Script tutte le relazioni oltre alla struttura di base della tabella sulla tabella iniziale. Imposta la base dati in modalità utente singolo (in modo che nessuno possa modificare i record mentre sei in procinto di trasferirli) dopo esserti assicurato di avere un backup corrente.
Quindi inserire record dalla tabella precedente in bathes di dire 10000 alla volta. Ci vorrà più tempo di un inserto basato su set, ma molto meno probabilità di timeout. Potrebbe essere necessario sperimentare per trovare la dimensione del lotto ottimale. Dopo aver terminato, rilascia la vecchia tabella, rinomina la nuova tabella e imposta nuovamente le relazioni pk/fk. Quindi uscire dalla modalità utente singolo.
Questa è un'attività che deve essere eseguita solo in produzione durante le ore non occupate e come attività di manutenzione del database, a nessun altro deve essere consentito di accedere al database mentre si verifica.
Nota è possibile che non si disponga di informazioni univoche sulla chiave naturale del tavolo. In questo caso si potrebbe avere un problema se lo si utilizza come pk e potrebbe essere necessario spostare alcuni record in una tabella di eccezioni da correggere. Anche se stai usando una chiave surogata come nuovo PK, ti consiglio caldamente un indice univoco sulla chiave naturale del tavolo, se possibile.
Qual è il tipo di colonna: numerico o stringa? –
Stai aggiungendo una nuova colonna come chiave primaria o stai utilizzando una colonna esistente come PK? Se stai usando un esistente, come sai che è unico? – Maess
Suppongo che stiate aggiungendo una sorta di chiave di numerazione automatica. Ti interessa l'ordine delle righe? Ad esempio, a quali file viene assegnato il numero o non importa? – Tony