Am un server MS SQL Server 2008 R2 DB utilizat în prezent cu o aplicație de producție.
O nouă îmbunătățire a aplicației necesită acum o coloană varchar(100)
dintr-un tabel pentru a fi mărită în lungime.
Poate fi lungimea acestei coloana existentă în DB-ul prod va fi mărită fără a afecta datele curente?
Această modificare trebuie finalizată în afara orelor de program pentru a evita întreruperea serviciului?
Răspuns
Dacă îl măriți la varchar(100 - 8000)
(adică orice altceva decât varchar(max)
) și faceți acest lucru prin TSQL și nu prin SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
și nu modifică nulitatea coloanei de la NULL
la NOT NULL
( care ar bloca tabelul în timp ce toate rândurile sunt validate și potențial scrise la ) sau de la NOT NULL
la NULL
în unele circumstanțe , atunci aceasta este o schimbare rapidă numai pentru metadate. S-ar putea să trebuiască să așteptați o blocare SCH-M
pe masă, dar odată ce va dobândi că schimbarea va fi aproape instantanee.
O avertizare de care trebuie să știți este că în timpul așteptării pentru o SCH-M
blocare, alte interogări vor să fie blocate, mai degrabă decât să sară coada în fața ei, așa că vă recomandăm să adăugați un SET LOCK_TIMEOUT
mai întâi.
De asemenea, asigurați-vă că în ALTER TABLE
declarație pe care o specificați în mod explicit NOT NULL
dacă aceasta este starea inițială a coloanei, altfel coloana va fi modificată pentru a permite NULL
.