Mam obecnie używany serwer MS SQL Server 2008 R2 DB z aplikacją produkcyjną.
Nowe ulepszenie aplikacji wymaga teraz zwiększenia długości kolumny varchar(100)
w tabeli.
Czy długość tego istniejąca kolumna w DB produktu ma zostać zwiększona bez wpływu na bieżące dane?
Czy ta zmiana musi zostać wprowadzona poza godzinami pracy, aby uniknąć zakłóceń w działaniu usługi?
Odpowiedź
Jeśli zwiększasz go do varchar(100 - 8000)
(tj. Cokolwiek innego niż varchar(max)
) i robisz to przez TSQL, a nie przez GUI SSMS
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
i nie zmieniając wartości zerowej kolumny z NULL
do NOT NULL
( co spowodowałoby zablokowanie tabeli podczas walidacji wszystkich wierszy i potencjalnego zapisu w ) lub od NOT NULL
do NULL
w pewnych okolicznościach to jest tylko szybka zmiana metadanych. Być może trzeba będzie poczekać na SCH-M
blokadę na stole, ale gdy już uzyska, że zmiana będzie prawie natychmiastowa.
Należy pamiętać o jednym zastrzeżeniu: że podczas oczekiwania na SCH-M
inne zapytania będą blokowane, zamiast przeskakiwać do kolejki przed nią, więc warto rozważyć dodanie SET LOCK_TIMEOUT
najpierw.
Upewnij się również, że w ALTER TABLE
instrukcja, którą wyraźnie określisz NOT NULL
, jeśli jest to oryginalny stan kolumny, w przeciwnym razie kolumna zostanie zmieniona, aby zezwolić na NULL
.