O redimensionamento de uma coluna bloqueia a tabela?

6

O que acontece se eu alterar uma coluna de nvarchar (2) para nvarchar (10) ou uma coluna de char (2) para nvarchar (10). Isso bloqueia, reorganiza a tabela ou isso funciona sem nenhum impacto ou tempo de inatividade?

Eu tentei encontrar o que acontece se eu alterar uma coluna, mas não encontrei nada. É uma grande mesa com uma ou duas colunas para ser alterada. É sobre um MS SQL Server 2008 R2.

    
por Uwe 21.12.2010 / 09:03

3 respostas

1

A maneira mais fácil de descobrir seria usar um ambiente de teste para criar uma tabela fictícia e alguns registros fictícios aplicam a mudança e, em seguida, rastrear as ações por meio do profiler.

OU Altere a tabela na tabela projetada em SSMS e use o botão "Gerar script de mudança". Quando eu mudo minha coluna de Char (2) para NVARCHAR (10). O script de mudança gera o seguinte:

   CREATE TABLE dbo.Tmp_t2
    (
    id int NULL,
    c1 nvarchar(50) NULL,
    c2 nvarchar(2) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_t2 SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.t2)
     EXEC('INSERT INTO dbo.Tmp_t2 (id, c1, c2)
        SELECT id, CONVERT(nvarchar(50), c1), c2 FROM dbo.t2 WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.t2
GO
EXECUTE sp_rename N'dbo.Tmp_t2', N't2', 'OBJECT' 
GO
COMMIT
    
por 21.01.2011 / 18:07
0

Se você estiver usando os comandos ALTER, ele criará outra tabela, copiará os dados existentes para a nova tabela, eliminará a tabela antiga quando terminar e renomeará a nova tabela com o nome da tabela antiga. Não acho que seja uma boa prática fazer isso durante o banco de dados ativo, mas há métodos para lidar com dados de produção.

link

    
por 22.12.2010 / 17:36
0

Nenhuma outra operação (como insert update delete) pode ser feita quando o tipo de dados da coluna da tabela está sendo modificado, toda a tabela será bloqueada. também não pode ser selecionado com NOLOCK.

    
por 05.12.2014 / 15:55