Jeg har en MS SQL Server 2008 R2 DB-server i øjeblikket i brug med en produktionsapp.

En ny forbedring af appen kræver nu en varchar(100) -kolonne i en tabel, der skal øges i længden.

Kan længden af dette eksisterende kolonne i prod DB øges uden at påvirke de aktuelle data?

Skal denne ændring afsluttes uden for åbningstiden for at undgå afbrydelse af tjenesten?

Svar

Hvis du øger det til varchar(100 - 8000) (dvs. alt andet end varchar(max)), og du gør dette gennem TSQL snarere end SSMS GUI

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

og ændrer ikke kolonnens ugyldighed fra NULL til NOT NULL ( som ville låse tabellen, mens alle rækker er valideret og potentielt skrevet til ) eller fra NOT NULL til NULL under nogle omstændigheder så er dette en hurtig ændring af kun metadata. Det kan være nødvendigt at vente på en SCH-M -lås på bordet, men når den først er klar over, at ændringen vil være stort set øjeblikkelig.

En advarsel at være opmærksom på er at under ventetiden på en SCH-M låser andre forespørgsler bliver blokeret i stedet for at springe køen foran den, så du måske overvejer at tilføje en SET LOCK_TIMEOUT først.

Sørg også for i ALTER TABLE udsagn, du angiver eksplicit NOT NULL, hvis det er den oprindelige kolonnetilstand, ellers ændres kolonnen for at tillade NULL.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *