it-swarm-eu.dev

Změňte délku varcharů v živé produkční tabulce

V současné době se používá produkční aplikace MS SQL Server 2008 R2 DB.

Nové vylepšení aplikace nyní vyžaduje zvětšení sloupce varchar(100) v tabulce.

Lze prodloužit délku tohoto stávajícího sloupce v prod DB, aniž by to ovlivnilo aktuální data?

Musí být tato změna dokončena mimo pracovní dobu, aby nedošlo k přerušení služby?

26
anataliocs

Pokud ji zvyšujete na varchar(100 - 8000) (tj. Cokoli jiného než varchar(max)) a děláte to přes TSQL místo SSMS GUI

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

a nezměnitelnost sloupce z NULL na NOT NULL (které uzamkne tabulku, zatímco jsou všechny řádky ověřeny a případně zapisovány ) nebo z NOT NULLNULLza určitých okolností pak se jedná o rychlou změnu pouze metadat. Možná bude třeba počkat na SCH-M zamkněte na stole, ale jakmile zjistí, že změna bude do značné míry okamžitá.

Jedním z upozornění je, že během čekání na SCH-M lock jiné dotazy budou blokovány spíše než přeskočit frontu před ní, takže byste měli zvážit přidání SET LOCK_TIMEOUT první.

Ujistěte se také v ALTER TABLE příkaz, který explicitně zadáte NOT NULL pokud je to původní stav sloupce, jinak bude sloupec změněn, aby umožnil NULL.

44
Martin Smith