Sintomi
Si può verificare un errore di asserzione quando Microsoft SQL Server esegue ripetutamente una stored procedure che esegue le operazioni seguenti:
-
Accetta un oggetto di grandi dimensioni, ad esempio varchar (max) o varbinary (max), come argomento e
-
Crea una tabella temporanea con ambito per l'esecuzione della procedura e
-
Usa l'argomento oggetto di grandi dimensioni nella tabella temporanea.
Potrebbe essere visualizzato l'errore di asserzione simile al seguente nel log degli errori di SQL Server:
Errore di Data/oraSPID : 17065, gravità: 16, stato: 1.
Data/ora SPID SQL Server: file: FilePath \filename, line = lineNumber asserzione non riuscita =' fFalse ' tentativo di accesso al quadratino di blob scaduto (1). Questo errore può essere correlato alla temporizzazione. Se l'errore persiste dopo la rieseguire l'istruzione, usare DBCC CHECKDB per controllare il database per l'integrità strutturale oppure riavviare il server per verificare che le strutture di dati in memoria non siano danneggiate.
Errore di Data/oraSPID : 3624, gravità: 20, stato: 1.
Data/ora SPID un controllo dell'asserzione di sistema non è riuscito. Per informazioni dettagliate, vedere il log degli errori di SQL Server. In genere, un errore di asserzione è causato da un bug software o da un danneggiamento dei dati. Per verificare il danneggiamento del database, provare a eseguire DBCC CHECKDB. Se si è deciso di inviare dump a Microsoft durante l'installazione, verrà inviato un mini dump a Microsoft. Un aggiornamento potrebbe essere disponibile da Microsoft nel Service Pack più recente o in un hotfix dal supporto tecnico.
Causa
SQL Server include la logica interna per disabilitare la memorizzazione nella cache delle query che fanno riferimento a oggetti di grandi dimensioni in modo che le esecuzioni successive non facciano riferimento a quelle LOB (create durante le esecuzioni precedenti e quindi non valide per le esecuzioni successive). La logica non ha gestito il caso della risoluzione dei nomi Deferred (DNR) su tabelle temporanee che hanno causato la memorizzazione nella cache di tali piani. Le tabelle temporanee con ambito sono costose da creare e SQL Server le memorizza nella cache per riutilizzarle nelle successive esecuzioni. Ciò impedisce la ricompilazione di tali query a causa delle modifiche allo schema.
Leggi altre informazioni sulla risoluzione dei nomi Deferred.
Risoluzione
Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:
Aggiornamento cumulativo 8 per SQL Server 2016 SP1
Aggiornamento cumulativo 4 per SQL Server 2017
Aggiornamento cumulativo 10 per SQL Server 2014 Service Pack 2
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli aggiornamenti rapidi e le correzioni di sicurezza presenti nella build precedente. Vedere l'ultimo aggiornamento cumulativo per SQL Server:
Ultimo aggiornamento cumulativo per SQL Server 2016
Ultimo aggiornamento cumulativo per SQL Server 2017
ultimi aggiornamenti cumulativi per SQL Server 2014
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".
Riferimenti
Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.