Проблема
Ошибка утверждения может возникнуть, когда Microsoft SQL Server многократно выполняет хранимую процедуру, которая выполняет следующие действия:
- Принимает в качестве аргумента крупный объект, например varchar(max) или varbinary(max);
- Создает временную таблицу, ограниченную выполнением процедуры, и
- Использует аргумент большого объекта во временной таблице.
В журнале ошибок SQL Server может быть обнаружена ошибка утверждения, похожая на следующую:
SPID даты и времени Ошибка: 17065, серьезность: 16, состояние: 1.
Утверждение даты и времени SPID SQL Server: FilePath\FileName, строка = LineNumber Failed Assertion = 'fFalse' Попытка доступа к дескрипторе BLOB-объекта с истекшим сроком действия (1). Эта ошибка может быть связана со временем. Если ошибка сохраняется после повторного запуска инструкции, используйте DBCC CHECKDB, чтобы проверка базы данных для структурной целостности, или перезапустите сервер, чтобы убедиться, что структуры данных в памяти не повреждены.
SPID даты и времени Ошибка: 3624, серьезность: 20, состояние: 1.
SPID даты и времени Сбой проверка утверждения системы. Дополнительные сведения см. в журнале ошибок SQL Server. Как правило, сбой утверждения вызван ошибкой программного обеспечения или повреждением данных. Чтобы проверка для повреждения базы данных, рассмотрите возможность запуска DBCC CHECKDB. Если вы согласились отправить дампы в корпорацию Майкрософт во время настройки, в корпорацию Майкрософт будет отправлен мини-дамф. Обновление может быть доступно корпорацией Майкрософт в последнем пакете обновления или в исправлении технической поддержки.
Причина
SQL Server имеет внутреннюю логику для отключения кэширования запросов, ссылающихся на большие объекты, чтобы последующие выполнения не ссылались на эти бизнес-объекты (которые были созданы во время предыдущих запусков и, следовательно, недопустимы для последующих запусков). Эта логика не обработала случай отложенного разрешения имен (DNR) во временных таблицах, в результате чего эти планы кэшировались. Временные таблицы с заданной областью создаются дорого, и SQL Server кэширует их для повторного использования в последующих выполнениях. Это предотвращает повторную компиляцию таких запросов из-за изменений схемы.
Узнайте больше об отложенных разрешениях имен.
Решение
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
Накопительный пакет обновления 8 для SQL Server 2016 с пакетом обновления 1 (SP1)
Накопительный пакет обновления 4 для SQL Server 2017 г.
Накопительный пакет обновления 10 для SQL Server 2014 с пакетом обновления 2 (SP2)
Сведения о накопительных обновлениях для SQL Server
Каждое новое накопительное обновление для SQL Server содержит все исправления и исправления безопасности, которые были в предыдущей сборке. Ознакомьтесь с последним накопительным обновлением для SQL Server:
Последнее накопительное обновление для SQL Server 2016 г.
Последнее накопительное обновление для SQL Server 2017 г.
последние накопительные обновления для SQL Server 2014
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Ссылки
Сведения о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.