Проблемы
Рассмотрим следующий сценарий.
-
Предположим, что у вас есть секционированные таблицы в Microsoft SQL Server и они являются частью системы отслеживания измененных данных (CDC) или репликации транзакций. Вы переключаете или выключаете секции из этих таблиц.
-
После переключения секций при выполнении операций языка обработки данных (DML) вы можете заметить, что происходит EXCEPTION_ACCESS_VIOLATION и создается файл дампа памяти.
Дата и время ***Дамп стека, отправляемый в FilePath\FileName
Date/Time SqlDumpExceptionHandler: Process PROCESSID создал неустранимое исключение c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server этот процесс завершается. Дата/время * *** Дата/время * Дата и время * Дата и время * BEGIN STACK DUMP: Date/Time * Date/Time * Date/Time * Date/Time * Date/Time * Date/Time * Exception Address = 000007FEE724BD80 Module(sqllang+00000000015BBD80) Date/Time * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION Дата и время * Нарушение доступа произошло при чтении адреса 000000000000002A даты и времени * входного буфера 70 байт даты и времени * sys.sp_MScdc_capture_job даты и времени *Дата и время ***Дамп стека, отправляемый в FilePath\FileName
Date/Time SqlDumpExceptionHandler: процесс PID создал неустранимое исключение c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server этот процесс завершается. Дата/время * *** Date/Time * Date/Time * BEGIN STACK DUMP: Date/Time * Date/TimeSPID Date/Time * Date/Time *Date/Time * Date/Time * Exception Address = 000007FEE9D26640 Module(sqllang+0000000001586640) Date/Time * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION Дата и время * Произошло нарушение доступа: адрес 00000000000000002A Дата и время * Входной буфер 109 байт - Дата/время * 16 00 00 00 00 00 00 00 00 02 00 00 00 00 Дата/Time * s p _ r e p 01 00 00 00 0b 00 73 00 70 00 5f 00 72 00 65 00 70 00 Дата/Время * l c m d s & ô 6c 00 63 00 6d 00 6d 00 64 00 73 00 00 00 00 00 26 04 04 f4 Дата и время * & & момент 1 00 00 00 00 00 00 26 04 04 00 00 00 00 00 00 00 26 04 04 ff Дата и время * Ляй ¥ & ff ff 00 00 a5 0a 00 00 00 00 00 26 04 04 8f 13 00 Дата и время * & & 00 00 00 00 26 04 04 00 00 00 00 00 26 04 04 20 a1 07 Дата и время * 00-
При выполнении следующего запроса к целевой таблице вы можете заметить, что значение столбца is_replicated будет помечено как "1" для некластиционного индекса, что неправильно.
select index_id, partition_number, * from sys.system_internals_partition_columns pc with(nolock)
JOIN sys.partitions p with(nolock)
ON p.partition_id = pc.partition_id
where p.object_id = object_id ('PartitionTable')
order by 2
Решение
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
Накопительный пакет обновления 1 для SQL Server 2017
Накопительный пакет обновления 5 для SQL Server 2016 с пакетом обновления 1 (SP1)
Накопительный пакет обновления 8 для SQL Server 2014 с пакетом обновления 2 (SP2)
Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
Последнее накопительное обновление для SQL Server 2017
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Ссылки
Сведения о терминологии, которую корпорация Майкрософт использует для описания обновлений программного обеспечения.