KB4058565 – OPRAVA: Chyba kontrolního výrazu při provádění uložené procedury, která odkazuje na velký objekt v SQL Server 2014, 2016 a 2017

Platí pro
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Příznaky

K chybě kontrolního výrazu může dojít, když Microsoft SQL Server opakovaně spouští uloženou proceduru, která provádí následující:

  • Vezme jako argument velký objekt, například varchar(max) nebo varbinary(max), a
  • Vytvoří dočasnou tabulku, která je vymezena na provádění procedury, a
  • Použije argument velký objekt v dočasné tabulce.

V protokolu chyb serveru SQL Server můžete najít chybu kontrolního výrazu podobnou následující:

SPID pro datum a čas Chyba: 17065, závažnost: 16, stav: 1.

Datum a čas SPID Kontrolní výraz serveru SQL Server: Soubor: Cesta k souboru\NázevSouboru, řádek = ČísloŘádku Neúspěšné Kontrolní výraz = 'fFalse' Pokus o přístup k popisovači objektu blob, jehož platnost vypršela (1). Tato chyba může souviset s načasováním. Pokud chyba přetrvává i po opětovném spuštění příkazu, zkontrolujte strukturální integritu databáze pomocí DBCC CHECKDB nebo restartujte server, abyste se ujistili, že nejsou poškozené datové struktury v paměti.

SPID pro datum a čas Chyba: 3624, závažnost: 20, stav: 1.

SPID pro datum a čas Kontrola kontrolního výrazu systému se nezdařila. Podrobnosti najdete v protokolu chyb systému SQL Server. Chyba kontrolního výrazu je obvykle způsobena chybou softwaru nebo poškozením dat. Chcete-li zkontrolovat poškození databáze, zvažte spuštění příkazu DBCC CHECKDB. Pokud jste během instalace souhlasili s odesíláním výpisů do Microsoftu, bude společnosti Microsoft odeslán minivýpis. Aktualizace může být k dispozici od Microsoftu v nejnovější aktualizaci Service Pack nebo v opravě hotfix od technické podpory.

Příčina

SQL Server má interní logiku pro zakázání ukládání dotazů do mezipaměti, které odkazují na velké objekty, aby následná spuštění neodkazovala na tyto obchodní programy (které byly vytvořeny během předchozích spuštění, a proto jsou neplatné pro následující spuštění). Tato logika nezpracovala případ odloženého překladu názvů (DNR) u dočasných tabulek, který způsobil uložení těchto plánů do mezipaměti. Vytvoření dočasných tabulek s oborem je nákladné a SQL Server je ukládá do mezipaměti pro opětovné použití při následných spuštěních. To zabraňuje opětovné kompilaci takových dotazů z důvodu změn schématu.

Přečtěte si další informace o překladu Deferred Name Resolution.

Řešení

Tento problém je opravený v následujících kumulativních aktualizacích pro SQL Server:

Kumulativní aktualizace 8 pro SQL Server 2016 SP1

Kumulativní aktualizace 4 pro SQL Server 2017

Kumulativní aktualizace 10 pro SQL Server 2014 Service Pack 2

Informace o kumulativních aktualizacích pro SQL Server

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a opravy zabezpečení, které byly v předchozím buildu. Podívejte se na nejnovější kumulativní aktualizaci pro SQL Server:

Nejnovější kumulativní aktualizace pro SQL Server 2016

Nejnovější kumulativní aktualizace pro SQL Server 2017

Nejnovější kumulativní aktualizace pro SQL Server 2014

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Reference

Přečtěte si o terminologii , kterou společnost Microsoft používá k popisování aktualizací softwaru.