Comment ajouter une colonne d'identité à une table de base de données qui a un grand nombre de lignes
J'ai une table de base de données qui a ~ 40 000 000 de lignes. Je veux ajouter une colonne d'identité à cette table. Comment le faire dans un journal de manière respectueuse de l'?
Quand je ne les suivants:
ALTER TABLE table_1
ADD id INT IDENTITY
ce seulement remplit la totalité de l'espace du journal.
Est-il possible de le faire dans un journal de manière respectueuse de l'? La base de données sur SQL Server 2008.
Grâce,
Mohan.
- Est-ce MySQL, SQL Server, PostGres, Oracle?
- désactiver le journal, ajouter une colonne, activer le journal.
- Ne pourrait-il pas être une réponse et pas juste un commentaire?
- Je vois qu'il n'y a aucun moyen de désactiver le journal dans SQL Server 2008
- il n'y a aucun moyen de désactiver le journal des transactions comme qui contreviendrait à l'ACIDE.
- Ne pouvez pas désactiver le journal, mais vous pouvez changer ce que les opérations sont enregistrées en modifiant le modèle de récupération. Regardez dans la modification de la base de données de modèle de récupération SIMPLE avant de le modifier, puis modifier à temps PLEIN après l'alter est terminée. N'oubliez pas de faire une sauvegarde du journal des transactions avant de passer à la simple, et une sauvegarde complète ou différentielle après un changement de revenir à la version complète.
- Qui nécessite encore une façon de briser les tâches en petites transactions cependant. Un simple
ALTER TABLE table_1 ADD id INT IDENTITY
sera exécutée comme une seule transaction, et même en mode simple, le journal ne sera pas en mesure d'être tronqué jusqu'à ce que l'ensemble de l'opération est terminée. - Merci à tous pour votre aide. J'ai été en mesure d'augmenter le journal de l'espace avec l'aide de DB Admin et a été en mesure de créer de la colonne d'identité.
Vous devez vous connecter pour publier un commentaire.
L'ensemble du processus sera probablement beaucoup plus lent avec plus globale de verrouillage, mais si vous ne se soucient taille du journal des transactions, vous pouvez essayer la.
ALTER TABLE ... ALTER COLUMN
pour marquer la colonne commeNOT NULL
. Cela nécessitera l'ensemble de la table pour être analysée afin de valider le changement, mais pas besoin de beaucoup de journalisation.ALTER TABLE ... SWITCH
pour rendre la colonne une colonne d'identité. C'est un des métadonnées seul changement.Exemple De Code Ci-Dessous
Il y a deux façons d'ajouter une colonne d'identité à une table avec des données existantes:
Créer une nouvelle table à l'identité, la copie de données à cette nouvelle table, puis supprimer la table existante, suivie par le fait de renommer la table temp.
Créer une nouvelle colonne avec de l'identité & drop la colonne existante
Référence : http://cavemansblog.wordpress.com/2009/04/02/sql-how-to-add-an-identity-column-to-a-table-with-data/
J'ai juste fait ça à ma table qui a plus de 2700 lignes. Aller à la conception du tableau, ajouter la nouvelle colonne, choisissez de ne pas autoriser les valeurs null, définissez la colonne comme colonne d'identité dans les propriétés de la colonne, et qui devrait le faire. J'ai littéralement juste fait cette à moins de 5 minutes, et il a travaillé pour moi. Veuillez sélectionner une réponse si cela répond à votre question.