Objawy
Rozważmy następujący scenariusz:
- Załóżmy, że masz podzielone na partycje tabele w usłudze Microsoft SQL Server i są one częścią Rejestrator zmiany danych (CDC) lub replikacji transakcyjnej. Przełączasz partycję z tych tabel.
- Po przełączeniu partycji podczas wykonywania operacji w języku DML (Data Manipulation Language) można zauważyć, że występuje EXCEPTION_ACCESS_VIOLATION i jest generowany plik zrzutu pamięci.
Uwaga
Data/godzina ***Zrzut stosu wysyłany do FilePath\FileName
Data/godzina SqlDumpExceptionHandler: identyfikator procesu procesu wygenerował wyjątek krytyczny c0000005 EXCEPTION_ACCESS_VIOLATION. Program SQL Server kończy ten proces.
Data/godzina * *******************************************************************************
Data/godzina *
Data/godzina * ROZPOCZNIJ ZRZUT STOSU:
Data/godzina *
Data/godzina *
Data/godzina *
Data/godzina *
Data/godzina * Adres wyjątku = 000007FEE724BD80 Moduł(sqllang+00000000015BBD80)
Data/godzina * Kod wyjątku = c0000005 EXCEPTION_ACCESS_VIOLATION
Data/godzina * Nastąpiło naruszenie zasad dostępu 000000000000002A odczytując adres
Data/godzina * Bufor wejściowy 70 bajtów
Data/godzina * sys.sp_MScdc_capture_job
Data/godzina *
Uwaga
Data/godzina ***Zrzut stosu wysyłany do FilePath\FileName
Data/godzina SqlDumpExceptionHandler: identyfikator PID procesu generuje wyjątek krytyczny c0000005 EXCEPTION_ACCESS_VIOLATION. Program SQL Server kończy ten proces.
Data/godzina * *******************************************************************************
Data/godzina *
Data/godzina * ROZPOCZNIJ ZRZUT STOSU:
Data/godzina * Data/godzinaSPID
Data/godzina *
Data/godzina *
Data/godzina * Adres wyjątku = 000007FEE9D26640 Moduł(sqllang+0000000001586640)
Data/godzina * Kod wyjątku = c0000005 EXCEPTION_ACCESS_VIOLATION
Data/godzina * Nastąpiło naruszenie zasad dostępu 000000000000002A odczytując adres
Data/godzina * Bufor wejściowy 109 bajtów -
Data/godzina * 16 00 00 00 12 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
Data/Godzina * s p _ r e p 01 00 00 00 0b 00 73 00 70 00 5f 00 72 00 65 00 70 00
Data/Godzina * l c m d s & ô 6c 00 63 00 6d 00 64 00 73 00 00 00 00 00 26 04 04 f4
Data/godzina * & & ÿ 01 00 00 00 00 26 04 04 00 00 00 00 00 00 00 26 04 04 ff
Data/godzina * ÿÿÿ ¥ & ff ff 00 00 a5 0a 00 00 00 00 00 26 04 04 8f 13 00
Data/godzina * & & ¡ 00 00 00 26 04 04 00 00 00 00 00 00 00 26 04 04 20 a1 07
Data/godzina * 00
- Jeśli uruchamiasz poniższe zapytanie względem tabeli docelowej, możesz zauważyć, że wartość kolumny is_replicated zostanie oznaczona jako "1" dla indeksu nieklastrowanego, co nie jest poprawne.
select index_id, partition_number,* from sys.system_internals_partition_columns pc with(nolock)
JOIN sys.partitions p with(nolock)
ON p.partition_id = pc.partition_id
where p.object_id = object_id ('PartitionTable')
order by 2
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:
Aktualizacja zbiorcza 1 dla programu SQL Server 2017
Aktualizacja skumulowana 5 dla programu SQL Server 2016 z dodatkiem SP1
Aktualizacja zbiorcza 8 dla programu SQL Server 2014 z dodatkiem SP2
Informacje o aktualizacjach zbiorczych programu SQL Server:
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016
Najnowsza aktualizacja zbiorcza 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.