Symptomy
Po uruchomieniu zapytania zawierającego dane dużych obiektów (LOB), które mają zostać załadowane do zmiennej języka Transact-SQL w programie Microsoft SQL Server 2008, Microsoft SQL Server 2012 lub Microsoft SQL Server 2008 R2, występują uszkodzenia danych. Na przykład uruchom następujące zapytanie, aby skopiować dane XML z kolumny bazy danych do zmiennej XML: Declare @OUTXML as XMLSELECT @OUTXML = DataXml FROM Table_1 WHERE id=1 W takiej sytuacji instrukcja SELECT jest uruchamiana, gdy inne wątki próbują zaktualizować tę samą kolumnę XML. Takie zachowanie może spowodować uszkodzenie danych. Ponadto podczas wykonywania operacji odczytu i zapisu w uszkodzonej kolumnie XML jest wyświetlany jeden z następujących komunikatów o błędach:
-
Typ danych XML jest uszkodzony.
-
Wystąpił nieoczekiwany koniec pliku.
Uwagi
-
Ten problem występuje zwykle w przypadku wysokich współbieżnych operacji ładowania.
-
W przypadku odczytywania uszkodzonych danych XML za pomocą agenta czytnika dziennika w tabeli, która jest częścią listy artykułów publikacji na potrzeby replikacji transakcyjnej, jest wyświetlany następujący komunikat o błędzie:
Typ danych XML jest uszkodzony. (Źródło: MSSQLServer, numer błędu: 6611)
Przyczyna
Ten problem występuje, ponieważ blokada kolumny danych LOB jest zwalniana przed skopiowaniem danych LOB z kolumny bazy danych do zmiennej typu danych LOB. Każda kwerenda współbieżna może zaktualizować te same dane LOB przed ukończeniem procesu kopiowania w trakcie procesu kopiowania. W związku z tym występują uszkodzenia danych.
Rozwiązanie
Informacje o aktualizacji zbiorczej
Zbiorcza aktualizacja 7 dla programu SQL Server 2012
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 7. Aby uzyskać więcej informacji na temat uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2012, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2823247 Pakiet aktualizacji zbiorczej 7 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012
Zbiorcza aktualizacja 12 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 12. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2828727 Pakiet aktualizacji zbiorczej 12 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki SQL Server 2008 R2 z dodatkiem Service Pack 1. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2567616 Kompilacje programu SQL Server 2008 R2, które zostały wydane po opublikowaniu dodatku Service Pack 1 dla programu SQL Server 2008 R2
Zbiorcza aktualizacja 10 dla programu SQL Server 2008 z dodatkiem Service Pack 3
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 10. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 z dodatkiem Service Pack 3, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2814783 Pakiet aktualizacji zbiorczej 10 dla programu SQL Server 2008 z dodatkiem Service Pack 3Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji programu SQL Server 2008 z dodatkiem Service Pack 3. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2629969 Kompilacje programu SQL Server 2008 wydane po opublikowaniu dodatku Service Pack 3 dla programu SQL Server 2008
Zbiorcza aktualizacja 5 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 2 (SP2)
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 5. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 R2 S2008 R2 z dodatkiem SP2, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2797460 Pakiet aktualizacji zbiorczej 5 dla programu SQL Server 2008 R2 S2008 R2 z dodatkiem SP2Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji programu SQL Server 2008 R2 S2008 R2 SP2. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2730301 Kompilacja programu SQL Server 2008 R2 opublikowanych po wydaniu programu SQL Server 2008 R2 z dodatkiem Service Pack 2
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".