Podczas próby utworzenia indeksu klastrowego pojawia się następujący błąd
Instrukcja została zakończona.
Wiadomość 596, poziom 21, stan 1, wiersz 0
Nie można kontynuować wykonywania, ponieważ sesja jest w stanie zabicia.Msg 0, poziom 20, stan 0, wiersz 0
Wystąpił poważny błąd w bieżącym poleceniu. Ewentualne wyniki należy odrzucić.
Indeks to:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE CLUSTERED INDEX IX_CO_DES_INPUT
ON dbo.CO_DES_INPUT(DESIGN_ID, PRODUCT_INPUT_NUM, INPUT_NAME)
WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.CO_DES_INPUT
SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Używam Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Standard Edition (64-bit) w systemie Windows NT 6.3 (kompilacja 9600:)
Uciekłem
DBCC CheckDB ('concept-test') WITH NO_INFOMSGS, ALL_ERRORMSGS
i nie znalazł żadnych problemów
Obawiam się, że moja baza danych jest uszkodzona, ponieważ otrzymuję ten błąd. Jak rozwiązać problem i umieścić ten indeks na stole?
sql-server
sql-server-2012
użytkownik2904235
źródło
źródło
Odpowiedzi:
Tylko wskazówka dotycząca: SQL Server 2017 (gdzie napotykałem ten błąd) i niektóre wersje 2016, aby potencjalnie zaoszczędzić trochę czasu:
Przed SQL Server 2017 CU8 (także 2016 SP1 CU9 i 2016 SP2 CU1) występował problem polegający na tym, że tabele partycjonowane ze statystykami przyrostowymi generowały ten błąd, jeśli operacja DML spowodowała automatyczną aktualizację statystyk.
Minimalna strona KB jest tutaj:
https://support.microsoft.com/en-us/help/4163478/fix-access-violation-when-incremental-statistics-automatically-updated
Zainstalowanie późniejszej CU niż te wymienione powyżej rozwiązuje problem.
źródło
Może to być spowodowane korupcją indeksu,
Najlepszym sposobem na poradzenie sobie z tym jest upuszczenie starego indeksu, który jest uszkodzony.
I niż Uruchom zapytanie w pytaniach, powinno działać dobrze, jeśli wszystkie rekordy są unikalne. w podanych kolumnach.
źródło
W bazie danych skonfigurowanej dla zawsze włączonych grup dostępności możesz również spotkać się z tym zachowaniem, jeśli grupa dostępności jest w trybie SYNCHRONICZNYM, a urządzenia pomocnicze przełączyły się w tryb offline lub zostały zawieszone. Jest to efekt uboczny, którego doświadczają serwery aplikacji. Dzięki,
źródło
Coś, co nieświadomie znalazłem: gdy wyłączasz / przebudowujesz indeksy w widoku indeksowanym, otrzymasz ten sam błąd, jeśli spróbujesz odbudować jedną lub więcej indeksów nieklastrowych przed zbudowaniem klastrowania lub użyj opcji ODBUDUJ WSZYSTKIE.
źródło
Ten błąd zawsze pojawia się, gdy mam uruchomione zapytanie, używając programu nasłuchującego Always On AG, jednej z baz danych AG i następuje przełączenie awaryjne:
.Net SqlClient Data Provider: Msg 596, poziom 21, stan 1, wiersz 0 Nie można kontynuować wykonywania, ponieważ sesja jest w stanie zabicia. .Net SqlClient Data Provider: Msg 0, poziom 20, stan 0, wiersz 0 Wystąpił poważny błąd w bieżącym poleceniu. Ewentualne wyniki należy odrzucić.
Bardzo łatwe do odtworzenia! Oczywiście mogą być inne powody, ale jest to jeden konkretny przypadek, w którym pojawia się ten rodzaj błędu ...
źródło
Mogę odtworzyć ten problem w dość małym programie w języku C #, który wykorzystuje połączenia asynchroniczne, ale nie jestem w 100% pewien, dlaczego. Oto mój program repro, na wypadek gdyby inni chcieli go wypróbować - podejrzewam, że istnieje szereg rzeczy, które muszą być idealnie dopasowane, aby tak się stało:
źródło