Udostępnij za pomocą


Zadanie przechwytywania cdC kończy się niepowodzeniem podczas przetwarzania zmian w tabeli z systemowym typem danych CLR (geometria, geografia lub hierarchia)

Ten artykuł ułatwia obejście problemu polegającego na tym, że zadanie przechwytywania cdC kończy się niepowodzeniem podczas przetwarzania zmian w tabeli, która ma systemowy typ danych CLR (geometria, geografia lub hierarchia).

Dotyczy: SQL Server
Oryginalny numer KB: 4538384

Symptomy

Rozważmy następujący scenariusz:

  • Funkcję przechwytywania zmian danych (CDC) można włączyć w tabeli, która ma systemowy typ danych CLR, taki jak geometria, geografia lub hierarchia.
  • Zadanie przechwytywania (skanowania) usługi CDC polega na przetwarzaniu zmian związanych z innymi tabelami. Proces nie osiągnął jeszcze tabeli, która ma systemowy typ danych CLR.
  • Zmiany języka DML (Data Manipulation Language) należy wprowadzić w tabeli zawierającej systemowy typ danych CLR. Następnie należy wprowadzić zmiany języka definicji danych (DDL) w tej samej tabeli (na przykład dodać kolumnę).

W tym scenariuszu, gdy zadanie przechwytywania CDC rozpoczyna przetwarzanie tabeli, która ma systemowy typ danych CLR, kończy się niepowodzeniem i zwraca następujący komunikat o błędzie:

Msg 18805, Level 16, State 1, Procedure sp_replcmds, LineLineNumber[Batch Start LineNumber ]
Proces skanowania dziennika nie może skonstruować zreplikowanego polecenia z numeru sekwencji dzienników (LSN) {nnnnnnnnnn: nnnnnnnn: nnnn}. Tworzenie kopii zapasowej bazy danych publikacji i kontaktowanie się z pomocą techniczną.
Msg 22859, Level 16, State 2, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Proces skanowania dziennika zakończył się niepowodzeniem podczas przetwarzania rekordów dziennika. Zapoznaj się z poprzednimi błędami w bieżącej sesji, aby zidentyfikować przyczynę i rozwiązać wszelkie skojarzone problemy.
Msg 3621, Level 16, State 6, Procedure sp_replcmds, LineNumber [Batch Start LineNumber ]
Instrukcja została zakończona.
Msg 22864, Level 16, State 1, Procedure sp_MScdc_capture_job, LineNumber[Batch Start LineNumber ]
Wywołanie sp_MScdc_capture_job przez zadanie przechwytywania bazy danych "DatabaseName" nie powiodło się. Zapoznaj się z poprzednimi błędami, aby sprawdzić przyczynę błędu.

Ponadto następujący wpis może zostać zarejestrowany w dzienniku błędów:

Błąd: 913, Ważność: 16, Stan: 16. Nie można odnaleźć identyfikatora bazy danych. Baza danych może nie zostać jeszcze aktywowana lub może być w stanie przejścia. Ponownie wyślij zapytanie po udostępnieniu bazy danych. Jeśli nie sądzisz, że ten błąd jest spowodowany bazą danych, która przechodzi jego stan i ten błąd nadal występuje.

Więcej informacji

Ten problem nie występuje, jeśli zadanie przechwytywania cdC początkowo przetwarza tylko DML, a następnie przetwarza zmianę DDL w następnym uruchomieniu.

Rozwiązanie

Aby obejść ten problem, spróbuj wykonać jedną z następujących metod:

  • Unikaj używania problematycznych typów danych (geometrii, geografii, hierarchii) razem z usługą CDC.

  • Upewnij się, że nie masz żadnych zmian w locie DML podczas wprowadzania zmian DDL w tabelach, które mają geometrię, geografię lub hierarchyid typów danych. Aby uniknąć tego problemu, wykonaj następujące kroki:

    1. Przełącz wszystkie pliki DML w stan spoczynku do tabeli.
    2. Uruchom zadanie przechwytywania, aby przetworzyć zmiany.
    3. Uruchom rozszerzenie DDL dla tabeli.
    4. Uruchom zadanie przechwytywania, aby przetworzyć zmiany DDL.
    5. Ponowne włączanie przetwarzania DML.

    Uwaga 16.

    Jeśli ten problem będzie nadal występować, wyłącz usługę CDC, a następnie włącz ponownie usługę CDC w tabeli.