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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *