web-dev-qa-db-fra.com

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

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'augmenter la longueur d'une colonne varchar(100) 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?

26
anataliocs

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 (qui verrouille la table pendant que toutes les lignes sont validées et potentiellement écrites dans ) ou depuis NOT NULL à NULLdans certaines circonstances alors ceci n'est qu'un changement rapide de métadonnées. Il faudra peut-être attendre un SCH-M verrouiller la table mais une fois qu'il acquiert que le changement sera à peu près instantané.

Une mise en garde à savoir est que pendant l'attente d'un SCH-M verrouillez les autres requêtes seront bloquées plutôt que de sauter la file d'attente avant, vous voudrez peut-être envisager d'ajouter un SET LOCK_TIMEOUT en premier.

Assurez-vous également dans le ALTER TABLE instruction que vous spécifiez explicitement NOT NULL si tel est l'état de la colonne d'origine, sinon la colonne sera modifiée pour autoriser NULL.

44
Martin Smith