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.