Objawy
Błąd potwierdzenia może wystąpić, gdy firma Microsoft SQL Server wielokrotnie wykonuje procedurę składowaną, która wykonuje następujące czynności:
- Przyjmuje duży obiekt, taki jak varchar(max) lub varbinary(max), jako argument i
- Tworzy tabelę tymczasową, której zakres jest ograniczony do wykonywania procedury, oraz
- Używa argumentu dużego obiektu w tabeli tymczasowej.
W dzienniku błędów programu SQL Server może pojawić się błąd potwierdzenia podobny do następującego:
SPID daty/godziny Błąd: 17065, Ważność: 16, Stan: 1.
Data/godzina SPID Potwierdzenie programu SQL Server: Plik: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Attempt to access expired blob handle (1). Ten błąd może być związany z chronometrażem. Jeśli błąd będzie się powtarzał po ponownym uruchomieniu instrukcji, sprawdź integralność strukturalną bazy danych za pomocą polecenia DBCC CHECKDB lub uruchom ponownie serwer, aby upewnić się, że struktury danych w pamięci nie są uszkodzone.
SPID daty/godziny Błąd: 3624, Ważność: 20, Stan: 1.
SPID daty/godziny Sprawdzanie potwierdzeń systemu nie powiodło się. Sprawdź dziennik błędów programu SQL Server, aby uzyskać szczegółowe informacje. Zazwyczaj niepowodzenie asercji jest spowodowane błędem oprogramowania lub uszkodzeniem danych. Aby sprawdzić, czy baza danych nie jest uszkodzona, rozważ uruchomienie polecenia DBCC CHECKDB. Jeśli wyrażono zgodę na wysyłanie zrzutów do firmy Microsoft podczas instalacji, minizrzut zostanie wysłany do firmy Microsoft. Aktualizacja może być dostępna od firmy Microsoft w najnowszym dodatku Service Pack lub w poprawce z pomocy technicznej.
Przyczyna
Program SQL Server ma wewnętrzną logikę wyłączającą buforowanie zapytań odwołujących się do dużych obiektów, dzięki czemu kolejne wykonania nie odwołują się do tych aplikacji LOB (utworzonych podczas poprzednich uruchomień i dlatego są nieprawidłowe dla kolejnych uruchomień). Ta logika nie obsługiwała przypadku odroczonego rozpoznawania nazw (DNR) w tabelach tymczasowych, co powodowało buforowanie tych planów. Tworzenie tabel tymczasowych o określonym zakresie jest kosztowne i SQL Server buforuje je w celu ponownego użycia w kolejnych wykonaniach. Zapobiega to ponownej kompilacji takich zapytań z powodu zmian schematu.
Dowiedz się więcej o rozpoznawaniu nazw z opóźnieniem.
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:
Aktualizacja zbiorcza 8 dla programu SQL Server 2016 z dodatkiem SP1
Aktualizacja zbiorcza 4 dla programu SQL Server 2017
Aktualizacja zbiorcza 10 dla programu SQL Server 2014 z dodatkiem Service Pack 2
Informacje o aktualizacjach zbiorczych dla programu SQL Server
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń z poprzedniej kompilacji. Sprawdź najnowszą aktualizację zbiorczą dla programu SQL Server:
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017
najnowsze aktualizacje zbiorcze dla programu SQL Server 2014
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.
Źródła informacji
Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.