KB3213240 — POPRAWKA: Zmiana typu danych, a następnie zaktualizowanie tabeli zawierającej więcej niż 4000 rekordów powoduje uszkodzenie bazy danych

Dotyczy
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

Objawy

Zmieniasz typ danych kolumny w tabeli bazy danych z ntext na nvarchar(max) na serwerze z uruchomionym programem Microsoft SQL Server 2012, 2014 lub 2016. Podczas aktualizowania tabeli przez dodanie ponad 4000 rekordów funkcja DBCC CHECKDB może zgłaszać błędy podobne do następujących:

Uwaga

Komunikat 8961, Poziom 16, Stan 1, Numer wiersza
Błąd tabeli: ObjectID,indexID, partitionID, allocUnitID (typ danych LOB). Węzeł danych off-row na stronie (PageID), slot 0, textID does not match to reference from page (PageID), slot 0.

Komunikat 8961, Poziom 16, Stan 1, Numer wiersza
Błąd tabeli: ObjectID,indexID, partitionID, allocUnitID (typ danych LOB). Węzeł danych off-row na stronie (PageID), slot 0, textID does not match to reference from page (PageID), slot 0.

Wiadomość 8929, Poziom 16, Stan 1, Numer wiersza
ObjectID,indexID,partitionID,allocUnitID (typ Dane w wierszu): Błędy znalezione w danych off-row z identyfikatorem należącym do rekordu danych zidentyfikowanego przez RID = (RID)
Wyniki DBCC dla tabeli 'TableName'.

Dla obiektu "TableName" jest 1 wiersz na 1 stronach.
Funkcja CHECKTABLE znalazła 0 błędów alokacji i 3 błędy spójności w tabeli "TableName" (ObjectID).
repair_allow_data_loss jest minimalnym poziomem naprawy błędów znalezionych przez funkcję DBCC CHECKTABLE (DatabaseName.TableName).
Wykonanie DBCC ukończone. Jeśli DBCC wydrukowało komunikaty o błędach, skontaktuj się z administratorem systemu.

Rozwiązanie

Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:

Aktualizacja skumulowana 5 dla programu SQL Server 2016 RTM

Aktualizacja zbiorcza 2 dla programu SQL Server 2016 z dodatkiem SP1

Aktualizacja zbiorcza 4 dla programu SQL Server 2014 z dodatkiem SP2

Aktualizacja zbiorcza 11 dla programu SQL Server 2014 z dodatkiem SP1

Aktualizacja zbiorcza 7 dla programu SQL Server 2012 z dodatkiem Service Pack 3
        
      

Informacje o aktualizacjach zbiorczych dla programu SQL Server

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki i poprawki zabezpieczeń zawarte w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2012 z dodatkiem SP3

Obejście

Aby obejść ten problem po zmianie typu danych, ustaw opcję Typy dużych wartości poza wierszem na 1.


ALTER TABLE TableName ALTER COLUMN COLUMN_NAME nvarchar(max) NOT NULL 
go
exec sp_tableoption 'TableName', 'large value types out of row', '1'

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.