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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *