Tenho um servidor de banco de dados MS SQL Server 2008 R2 atualmente em uso com um aplicativo de produção.
Um novo aprimoramento do aplicativo agora requer que uma coluna varchar(100)
em uma tabela seja aumentada em comprimento.
Pode o comprimento disso coluna existente no banco de dados prod ser aumentada sem afetar os dados atuais?
Essa mudança deve ser concluída fora do horário comercial para evitar a interrupção do serviço?
Resposta
Se você estiver aumentando para varchar(100 - 8000)
(ou seja, qualquer coisa diferente de varchar(max)
) e estiver fazendo isso por meio de TSQL em vez de SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
e não alterando a anulação da coluna de NULL
para NOT NULL
( que bloquearia a tabela enquanto todas as linhas são validadas e potencialmente gravadas em ) ou de NOT NULL
para NULL
em algumas circunstâncias então esta é uma mudança rápida apenas de metadados. Pode ser necessário esperar por um SCH-M
bloqueio na mesa, mas assim que ele perceber que a mudança será praticamente instantânea.
Uma advertência a ser observada é que durante a espera por um SCH-M
bloqueio outras consultas serão bloqueadas em vez de pular a fila adiante, então você pode querer considerar a adição de um SET LOCK_TIMEOUT
primeiro.
Certifique-se também de ALTER TABLE
instrução você especifica explicitamente NOT NULL
se esse for o estado da coluna original, caso contrário, a coluna será alterada para permitir NULL
.