Sintomas
Suponha que você tenha uma tabela que tenha um índice columnstore clusterizado no Microsoft SQL Server 2014. Você executa 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:
Location: caminho do arquivo <> \Xmcolenc.inl: 413Expression: PF_CURRENT_STATUS = = PFS_OK (em XMColumnEncoder<caractere não assinado *>:: EncodeValueForSecondary) spid: <SPID>ID do processo: <identificação do processo >descrição: hr: 0X0Location : < SPID> Process \xmerror.cpp: 43Expression: 0 (em PFSetLastError) SPID: <SPID>ID do processo: <identificação do processo>: hr: 0x0
Além disso, vários arquivos de despejo de memória são gerados na pasta de 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:
<data e hora> SPID<ID> * * * despejo de pilha sendo enviado para <nome do disco>: \Arquivos de Programas\Microsoft SQL Server\MSSQL12. SQL2014\MSSQL\LOG\SQLDump0002.txt<data/hora> spid <ID> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <data e hora> SPID<ID> * <data hora> spid<ID> * iniciar despejo de pilha: <Data e hora> SPID<ID> * <data hora> SPID<id><data hora> SPID<ID> * compilação do servidor privado. <data e hora> SPID<ID> * <data e hora> spid<ID> * local: caminho do arquivo <> \xmcolenc.inl: 413<data hora> SPID<id> * expressão: PF_CURRENT_STATUS = = PFS_OK<data hora> SPID<ID> * (em XMColumnEncoder<caractere não assinado *>:: EncodeValueForSecondary) <data e hora> SPID<ID> * SPID: 60<data hora> SPID<ID> * SPID : 3680<data/hora> spid <ID> * Descrição: 0x0:0x0<data e hora> SPID<ID> * <data hora> SPID<ID> * buffer de entrada 136 bytes-<data hora> SPID<ID> * ALTER TABLE Table_1 ALTER COLUMN Col1 nvarchar (500) não nulo;
Resolução
Depois de aplicar esse hotfix, você pode receber a seguinte nova mensagem de erro quando a consulta DDL falhar:
Falha na instrução ALTER TABLE porque um dicionário secundário atingiu o limite de tamanho máximo. Considere remover o índice columnstore, alterar a coluna e criar um novo índice de columnstore
Esta correção também evita que os arquivos de despejo de memória sejam gerados no log de erros do SQL Server. o problema foi corrigido primeiro nas seguintes atualizações cumulativas do 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 do SQL Server:
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".