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:
- Atualização cumulativa 4 para o SQL Server 2014 SP1
- Atualização cumulativa 10 para o SQL Server 2014
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:
- Atualização cumulativa mais recente do SQL Server 2014 SP1
- Atualização cumulativa mais recente do SQL Server 2014
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".