Modifier la longueur de varchar sur la table de production en direct

25

J'ai un serveur de base de données MS SQL Server 2008 R2 actuellement utilisé avec une application de production.

Une nouvelle amélioration de l'application nécessite désormais d' varchar(100)augmenter la longueur d' une colonne dans un tableau.

La longueur de cette colonne existante dans la base de données prod peut-elle être augmentée sans affecter les données actuelles?

Ce changement doit-il être effectué en dehors des heures d'ouverture pour éviter toute interruption de service?

anataliocs
la source

Réponses:

42

Si vous l'augmentez à varchar(100 - 8000)(c'est- à -dire autre chose que varchar(max)) et que vous le faites via TSQL plutôt que l'interface graphique SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

et ne pas modifier la nullité de la colonne de NULLà NOT NULL(ce qui verrouillerait la table alors que toutes les lignes sont validées et potentiellement écrites dans ) ou de NOT NULLà NULL dans certaines circonstances, il s'agit d'un changement de métadonnées rapide uniquement. Il faudra peut-être attendre un SCH-Mverrou sur la table, mais une fois qu'il aura acquis que le changement sera à peu près instantané.

Une mise en garde à prendre en compte est que pendant l'attente d'un SCH-Mverrou, d'autres requêtes seront bloquées plutôt que de sauter la file d'attente avant, vous voudrez peut-être envisager d'ajouter une SET LOCK_TIMEOUTpremière.

Assurez-vous également dans l' ALTER TABLEinstruction que vous spécifiez explicitement NOT NULLs'il s'agit de l'état de colonne d'origine, sinon la colonne sera modifiée pour autoriser NULL.

Martin Smith
la source
Merci pour la réponse rapide, je vérifiais juste. C'était presque instantané.
anataliocs