Ho un server DB MS SQL Server 2008 R2 attualmente in uso con unapp di produzione.
Un nuovo miglioramento dellapp ora richiede una colonna varchar(100)
in una tabella da aumentare in lunghezza.
Può la lunghezza di questo la colonna esistente nel DB prod essere aumentata senza alterare i dati correnti?
Questa modifica deve essere completata durante gli orari non lavorativi per evitare interruzioni del servizio?
Risposta
Se lo stai aumentando a varchar(100 - 8000)
(ovvero qualsiasi cosa diversa da varchar(max)
) e lo stai facendo tramite TSQL invece che con la GUI SSMS
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
e senza alterare il nullability della colonna da NULL
a NOT NULL
( che bloccherebbe la tabella mentre tutte le righe sono convalidate e potenzialmente scritte in ) o da NOT NULL
a NULL
in alcune circostanze si tratta solo di una rapida modifica dei metadati. Potrebbe essere necessario attendere un SCH-M
blocco sul tavolo, ma una volta acquisito il cambiamento sarà praticamente istantaneo.
Un avvertimento di cui essere consapevoli è che durante lattesa di un SCH-M
blocco altre query verranno bloccate invece di saltare la coda davanti ad essa, quindi potresti prendere in considerazione laggiunta di un SET LOCK_TIMEOUT
prima.
Assicurati anche nel ALTER TABLE
dichiarazione specificata esplicitamente NOT NULL
se questo è lo stato della colonna originale, altrimenti la colonna verrà modificata per consentire NULL
.