KB3098529 - CORRECÇÃO: Falha de asserção ao alterar o tipo de uma coluna no SQL Server 2014

Aplica-se a
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Sintomas

Suponha que você tenha uma tabela com um índice columnstore clusterizado no Microsoft SQL Server 2014. Execute uma consulta DDL na tabela para alterar o tipo de dados de uma coluna existente. Por exemplo, você atualiza o tipo de dados para Column_1 de Table_1 de VARCHAR (499) para NVARCHAR (500) executando o seguinte comando:

ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL

Nessa situação, ocorrem várias falhas de asserção e você recebe a seguinte mensagem de erro:

Observação

Local: < Caminho >do arquivo\xmcolenc.inl:413
Expressão: PF_CURRENT_STATUS == PFS_OK
(in XMColumnEncoder<unsigned char *>::EncodeValueForSecondary)
SPID: <SPID>
ID do processo: <ID do processo>
Descrição: hr: 0x0

Local: <Caminho do arquivo>\xmerror.cpp:43
Expressão: 0
(em PFSetLastError)
SPID: <SPID>
ID do processo: <ID do processo>
Descrição: hr: 0x0

Além disso, vários arquivos de despejo de memória são gerados na pasta Log de Erros do SQL Server e várias mensagens de erro semelhantes às seguintes são registradas no log de Erros do SQL Server:

Observação

< Data Hora>ID> do spid< ***Despejo de pilha sendo enviado para o <disco Nome>:\Programa Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\LOG\SQLDump0002.txt
< Data Hora>ID> do spid< * *******************************************************************************
< Data Hora> ID do spid<*>
< Data Hora> ID SPID<* BEGIN STACK DUMP:>
< Data Hora>ID> do spid<* <Data Hora>ID do spid<>
< Data Hora> ID do spid<*> Build do servidor privado.
< Data Hora> ID do spid<*>
< Data Hora> ID do spid<*> Local: < Caminho >do arquivo\xmcolenc.inl:413
< Data Hora> ID do spid<*> Expressão: PF_CURRENT_STATUS == PFS_OK
< Data Hora>ID> do spid<* (em XMColumnEncoder<unsigned char *>::EncodeValueForSecondary)
< Data Hora> ID do spid<*> SPID: 60
< Data Hora> ID do spid<*> ID do processo: 3680
< Data Hora> ID do spid<*> Descrição: hr: 0x0
< Data Hora> ID do spid<*>
< Data Hora> ID do spid<*> Buffer de entrada 136 bytes –
< Data Hora>ID> do spid<* ALTER TABLE Table_1 ALTER COLUMN COL1 NVARCHAR(500) NOT NULL;

Resolução

Depois de aplicar esse hotfix, você poderá receber a seguinte nova mensagem de erro quando a consulta DDL falhar:

Observação

A instrução ALTER TABLE falhou porque um dicionário secundário atingiu o limite máximo de tamanho. Considere descartar o índice columnstore, alterar a coluna e, em seguida, criar um novo índice columnstore

Essa correção também impede que os arquivos de despejo de memória sejam gerados no Log de Erros do SQL Server.

O problema foi corrigido pela primeira vez nas seguintes atualizações cumulativas do SQL Server:

Recomendação: instalar a atualização cumulativa mais recente para o SQL Server

Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Recomendamos que você baixe e instale as atualizações cumulativas mais recentes para o SQL Server:

      

Status

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".