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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *