Ik heb een MS SQL Server 2008 R2 DB-server die momenteel wordt gebruikt met een productie-app.
Een nieuwe verbetering van de app vereist nu een varchar(100)
kolom in een tabel die in lengte moet worden vergroot.
Kan de lengte hiervan bestaande kolom in de prod DB worden verhoogd zonder de huidige gegevens te beïnvloeden?
Moet deze wijziging buiten kantooruren worden doorgevoerd om onderbreking van de service te voorkomen?
Antwoord
Als je het verhoogt naar varchar(100 - 8000)
(dwz iets anders dan varchar(max)
) en je doet dit via TSQL in plaats van de SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
en de kolom nullability niet wijzigen van NULL
naar NOT NULL
( wat de tabel zou vergrendelen terwijl alle rijen zijn gevalideerd en mogelijk geschreven naar ) of van NOT NULL
naar NULL
in sommige omstandigheden is dit slechts een snelle wijziging van de metagegevens. Het kan nodig zijn om te wachten op een SCH-M
-vergrendeling op de tafel, maar zodra het verwerft, zal de verandering vrijwel onmiddellijk plaatsvinden.
Een voorbehoud om op te letten is dat tijdens het wachten op een SCH-M
-vergrendeling andere zoekopdrachten worden geblokkeerd in plaats van ervoor te springen in de wachtrij, dus u kunt overwegen een SET LOCK_TIMEOUT
eerst.
Zorg er ook voor dat in de ALTER TABLE
instructie specificeert u expliciet NOT NULL
als dat de originele kolomstatus is, anders wordt de kolom gewijzigd om NULL
toe te staan.