現象
Microsoft SQL Server 2014 で、クラスター化された列ストアインデックスを含むテーブルがあるものとします。 既存の列のデータ型を変更するには、テーブルに対して DDL クエリを実行します。 たとえば、次のコマンドを実行して、VARCHAR (499) から Table_1 の Column_1 のデータ型を NVARCHAR (500) に更新します。
ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL
この状況では、複数のアサーションエラーが発生し、次のエラーメッセージが表示されます。
場所: <ファイルパス> \Xmcolenc.inl: 413Expression: PF_CURRENT_STATUS = = PFS_OK (XMColumnEncoder<unsigned char *>:: EncodeValueForSecondary) spid: <spid>プロセス id: <のプロセス id>説明: 43Expression PFSetLastError) spid: <のPath>: expression : <><>の説明: hr: 0x0。
さらに、SQL Server のエラーログフォルダーで複数のメモリダンプファイルが生成され、次のような複数のエラーメッセージが SQL Server のエラーログに記録されます。
<日付時刻> Spid<ID> * * * <ディスク名に送信されたスタックダンプ>: cd/Server\MSSQL12.SQL2014\MSSQL\LOG\SQLDump0002.txt<日付時刻> Spid<ID> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *: <日付の時刻> spid<id> * <> spid<id> <><>spid <id><Private server のビルドについて><><の場合は、次のようにしてください。 <ID日付時刻> spid<id> * <> spid<id> * Location: <ファイルパス> \xmcolenc.inl: 413<日付時刻> spid<ID> * 式: PF_CURRENT_STATUS = = PFS_OK<> = = <><> <><><> spid:60<日付時刻> spidid * のプロセス id spid: のプロセス id をします。: 3680<日付時刻> Spid<ID> * 説明: <><> <><> spid <id> * 136<> spid Table_1 id * alter TABLE : NULL ではない (500) NULL ではないことを示しています。
解決方法
この修正プログラムを適用した後、DDL クエリが失敗すると、次の新しいエラーメッセージが表示されることがあります。
セカンダリ辞書が最大サイズ制限に達したため、ALTER TABLE ステートメントが失敗しました。 列ストアインデックスを削除し、列を変更して、新しい列ストアインデックスを作成することを検討します。
この修正プログラムでは、SQL Server のエラーログでメモリダンプファイルが生成されないようにすることもできます。この問題は、SQL Server の次の累積的な更新プログラムで最初に修正されました。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムをダウンロードしてインストールすることをお勧めします。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。