Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł ułatwia obejście problemu, który występuje, ponieważ procedura składowana w bazie danych korzystającej z funkcji Query Data Store okresowo kończy się niepowodzeniem.
Oryginalna wersja produktu: SQL Server 2016
Oryginalny numer KB: 4465511
Objawy
Rozważmy następujący scenariusz:
Masz bazę danych programu Microsoft SQL Server 2016 korzystającą z funkcji Magazyn zapytań.
Masz procedurę składowaną, która wywołuje inną procedurę składowaną przy użyciu
INSERT...EXECskładni.Funkcja Query Data Store okresowo uruchamia automatyczne czyszczenie w miarę zwiększania się do maksymalnego skonfigurowanego rozmiaru. Ponadto stan Query Data Store zmienia się z
READ_WRITEnaREAD_ONLY.
W tym scenariuszu wykonywanie nadrzędnej procedury składowanej okresowo kończy się niepowodzeniem i zostanie wyświetlony komunikat o błędzie podobny do następującego:
Msg 556, Poziom 16, Stan 2, Numer wiersza LineNumber
Instrukcja INSERT EXEC nie powiodła się, ponieważ procedura składowana zmieniła schemat tabeli docelowej.
Przyczyna
Proces automatycznego oczyszczania usuwa plan z Query Data Store. Zapytanie napotyka operację ponownego kompilowania, ponieważ w Query Data Store brakuje planu. Jednak plan jest nadal obecny w pamięci podręcznej procedury. Tak zaprojektowano, że gdy wystąpi operacja ponownej kompilacji, SQL Server zgłasza błąd 556, aby zapobiec zduplikowanemu wykonaniu procedury podrzędnej. Taka operacja duplikowania spowoduje zwrócenie nieprawidłowych wyników.
Rozwiązanie
Informacje o dodatku Service Pack dla programu SQL Server 2016
Ten problem został rozwiązany w następującym dodatku Service Pack dla programu SQL Server:
Service Pack 3 dla SQL Server 2016
Informacje o dodatkach Service Pack dla programu SQL Server:
Pakiety Service Pack są kumulacyjne. Każdy nowy dodatek Service Pack zawiera wszystkie poprawki, które znajdują się w poprzednich pakietach Service Pack, wraz z nowymi poprawkami. Zalecamy zastosowanie najnowszego dodatku Service Pack i najnowszej aktualizacji zbiorczej dla tego dodatku Service Pack. Nie musisz instalować poprzedniego dodatku Service Pack przed zainstalowaniem najnowszego dodatku Service Pack. Aby uzyskać więcej informacji na temat najnowszego dodatku Service Pack i najnowszej aktualizacji zbiorczej, zapoznaj się z tabelą 1 w następującym artykule:
Jak określić wersję, wydanie i poziom aktualizacji programu SQL Server oraz jego składników
Obejście
W celu obejścia tego problemu należy wykonać następujące czynności:
Zwiększ rozmiar magazynu danych zapytań. Spowoduje to zmniejszenie częstotliwości lub prawdopodobieństwa wyczyszczenia planu przez magazyn danych zapytań i przejścia w
READ_ONLYtryb operacyjny.Dodaj obsługę błędów do kodu, aby przechwycić błąd 556, a następnie prześlij ponownie
INSERT EXECzapytanie.Wyczyść pamięć podręczną procedury, gdy magazyn danych zapytań powraca do
READ_WRITEstanu zREAD_ONLY.
Dodatkowe informacje
Ze względu na zmiany wprowadzone w Query Data Store w programie Microsoft SQL Server 2017 ten problem nie występuje w programie SQL Server 2017.