Jai un serveur de base de données MS SQL Server 2008 R2 actuellement utilisé avec une application de production.
Une nouvelle amélioration de lapplication nécessite désormais une colonne varchar(100)
dans un tableau pour être augmentée en longueur.
La longueur de cette colonne existante dans la base de données prod être augmentée sans affecter les données actuelles?
Ce changement doit-il être effectué pendant les heures creuses pour éviter toute interruption de service?
Réponse
Si vous laugmentez à varchar(100 - 8000)
(cest-à-dire autre chose que varchar(max)
) et que vous le faites via TSQL plutôt que via linterface graphique SSMS
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
et sans 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 ne sagit que dun changement rapide de métadonnées. Il peut avoir besoin dattendre un verrou SCH-M
sur la table, mais une fois quil acquiert que le changement sera à peu près instantané.
Une mise en garde à prendre en compte est que pendant lattente dun verrou SCH-M
, les autres requêtes seront bloquées plutôt que de sauter la file dattente avant, vous pouvez donc envisager dajouter un SET LOCK_TIMEOUT
dabord.
Assurez-vous également que dans le ALTER TABLE
vous spécifiez explicitement NOT NULL
si tel est létat de la colonne dorigine, sinon la colonne sera modifiée pour autoriser NULL
.