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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *