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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *