Sintomi
Supponiamo di avere una tabella che contiene un indice columnstore raggruppato in Microsoft SQL Server 2014. Si esegue una query DDL sulla tabella per modificare il tipo di dati di una colonna esistente. Ad esempio, è possibile aggiornare il tipo di dati per Column_1 di Table_1 da VARCHAR (499) a NVARCHAR (500) eseguendo il comando seguente:
ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL
In questa situazione si verificano più errori di asserzione e viene visualizzato il messaggio di errore seguente:
Posizione: <percorso File> \Xmcolenc.inl: 413Expression: PF_CURRENT_STATUS = = PFS_OK (in XMColumnEncoder<carattere non firmato *>:: EncodeValueForSecondary) SPID : <SPID>ID processo : < ID processo> Descrizione: HR: 0x0Location: <percorso file> \Xmerror.cpp: 43EXPRESSION: 0 (in PFSetLastError) SPID: <SPID>ID processo
Inoltre, vengono generati più file di dump della memoria nella cartella del log degli errori di SQL Server e nel log degli errori di SQL Server vengono registrati più messaggi di errore simili a quelli seguenti:
<Data/ora> SPID<ID> * * * il dump dello Stack viene inviato a <nome disco>: \Programmi\Microsoft SQL Server\MSSQL12. SQL2014\MSSQL\LOG\SQLDump0002.txt<Data/ora> SPID<ID> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <data/ora> SPID<id> * <Data/ora> SPID<ID> * Begin STACK dump: <Data Time> SPID<ID> * <Data Time> spid<ID><Data e ora> SPID<ID> * build del server privato. <Data/ora> SPID<ID> * <data e ora> SPID<ID> * location: <percorso file> \xmcolenc.inl: 413<Data/ora> SPID<ID> * espressione: PF_CURRENT_STATUS = = PFS_OK<Data/ora> SPID<ID> * (in XMColumnEncoder<carattere non firmato *>:: EncodeValueForSecondary) <data e ora> SPID<ID> * SPID: 60<data e ora> SPID<ID> * ID processo : 3680<Data/ora> SPID<ID> * Descrizione: HR: 0x0<data e ora> SPID<id> * <data e ora> SPID<ID> * buffer di input 136 byte-<Data Time> SPID<ID> * ALTER TABLE Table_1 ALTER COLUMN col1 nvarchar (500) not null;
Risoluzione
Dopo aver applicato questo hotfix, è possibile che venga visualizzato il messaggio di errore seguente quando la query DDL non riesce:
L'istruzione ALTER TABLE non è riuscita perché un dizionario secondario ha raggiunto il limite massimo di dimensione. Considerare l'eliminazione dell'indice columnstore, la modifica della colonna e la creazione di un nuovo indice columnstore
Questa correzione consente inoltre di evitare che i file di dump della memoria vengano generati nel log degli errori di SQL Server. il problema è stato risolto per la prima volta nei seguenti aggiornamenti cumulativi di SQL Server:
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. È consigliabile scaricare e installare gli aggiornamenti cumulativi più recenti per SQL Server:
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".