Udostępnij za pośrednictwem


Zmienianie przechwytywania danych (CDC) za pomocą usługi Azure SQL Database

Dotyczy:Azure SQL Database

W tym artykule dowiesz się, jak funkcja przechwytywania zmian danych (CDC) jest implementowana w usłudze Azure SQL Database w celu rejestrowania aktywności w bazie danych, gdy tabele i wiersze zostały zmodyfikowane. Aby uzyskać szczegółowe informacje na temat funkcji CDC, w tym sposobu implementacji w programie SQL Server i usłudze Azure SQL Managed Instance, zobacz CDC with SQL Server (Usługa CDC z programem SQL Server).

Omówienie

W usłudze Azure SQL Database harmonogram przechwytywania zmian danych zastępuje zadania agenta programu SQL Server, które przechwytują i czyścią dane zmian dla tabel źródłowych. Harmonogram uruchamia procesy przechwytywania i oczyszczania automatycznie w zakresie bazy danych, zapewniając niezawodność i wydajność bez zależności zewnętrznych. Użytkownicy zachowują opcję ręcznego inicjowania procesów przechwytywania i oczyszczania zgodnie z potrzebami.

Dobrym przykładem użytkownika danych używanego przez tę technologię jest aplikacja wyodrębniania, przekształcania i ładowania (ETL). Aplikacja ETL ładuje przyrostowo zmiany danych z tabel źródłowych programu SQL Server do magazynu danych lub składnic danych. Chociaż reprezentacja tabel źródłowych w magazynie danych musi odzwierciedlać zmiany w tabelach źródłowych, kompleksowa technologia, która odświeża replikę źródła, nie jest odpowiednia. Zamiast tego potrzebny jest niezawodny strumień danych zmiany ustrukturyzowanych, aby użytkownicy mogli zastosować je do niepodmiernych reprezentacji docelowych danych. Funkcja przechwytywania zmian danych programu SQL Server zapewnia tę technologię.

Aby dowiedzieć się więcej na temat przechwytywania zmian danych w usłudze Azure SQL Database, zapoznaj się z tym odcinek uwidoczniony w danych:

Przepływ danych

Na poniższej ilustracji przedstawiono główny przepływ danych na potrzeby przechwytywania zmian danych w usłudze Azure SQL Database:

Diagram of a flow chart that depicts data flow for change data capture.

Wymagania wstępne

Uprawnienia

Rola jest wymagana do włączenia przechwytywania db_owner zmian danych dla usługi Azure SQL Database.

Wymagania dotyczące obliczeń usługi Azure SQL Database

Usługę CDC w usłudze Azure SQL Database można włączyć dla dowolnej warstwy usługi w modelu zakupów opartym na rdzeniach wirtualnych dla pojedynczych baz danych i pul elastycznych.

W przypadku baz danych w modelu zakupów jednostek DTU usługa CDC jest obsługiwana w przypadku baz danych w warstwie S3 lub wyższej. Warstwy podrdzeniowe (Podstawowa, S0, S1, S2) nie są obsługiwane w przypadku usługi CDC.

Włączanie usługi CDC dla usługi Azure SQL Database

Przed utworzeniem wystąpienia przechwytywania dla poszczególnych tabel należy włączyć usługę CDC dla usługi Azure SQL Database.

Aby włączyć usługę CDC, połącz się z usługą Azure SQL Database za pośrednictwem programu Azure Data Studio lub PROGRAMU SQL Server Management Studio (SSMS). Otwórz nowe okno zapytania, a następnie włącz usługę CDC, uruchamiając następujący kod T-SQL:

EXEC sys.sp_cdc_enable_db;
GO

Uwaga

Aby określić, czy baza danych jest już włączona, wykonaj zapytanie względem is_cdc_enabled kolumny w sys.databases widoku wykazu.

Po włączeniu przechwytywania zmian danych dla bazy danych cdc schemacdc usertworzone są tabele , metadane i inne obiekty systemowe dla bazy danych. Zawiera cdc schema tabele metadanych przechwytywania zmian, a po włączeniu usługi cdc dla tabel źródłowych poszczególne tabele zmian służą jako repozytorium dla danych zmian. Zawiera cdc schema również skojarzone funkcje systemowe używane do wykonywania zapytań dotyczących zmian danych.

Ważne

Przechwytywanie zmian danych wymaga wyłącznego użycia elementów cdc schema i cdc user. Jeśli schemat lub użytkownik bazy danych o nazwie cdc obecnie istnieje w bazie danych, nie można włączyć cdc dla bazy danych, dopóki schemat i/lub użytkownik nie zostanie porzucony lub zmieniono jego nazwę.

Włączanie usługi CDC dla tabeli

Po włączeniu usługi CDC dla usługi Azure SQL Database możesz włączyć usługę CDC na poziomie tabeli, wybierając co najmniej jedną tabelę w celu śledzenia zmian danych. Utwórz wystąpienie przechwytywania dla poszczególnych tabel źródłowych przy użyciu procedury składowanej sys.sp_cdc_enable_table.

Aby włączyć usługę CDC dla tabeli, uruchom następujący kod T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Napiwek

W poprzednim przykładzie nie jest używana jawna @role_name przez ustawienie parametru na NULL, ale możesz użyć roli gating, aby ograniczyć dostęp do danych zmiany.

Kolumny w tabeli źródłowej do przechwycenia

Domyślnie wszystkie kolumny w tabeli źródłowej są identyfikowane jako przechwycone kolumny. Jeśli należy śledzić tylko podzbiór kolumn, na przykład ze względów prywatności lub wydajności, użyj parametru @captured_column_list , aby określić podzbiór kolumn.

Aby włączyć usługę CDC dla określonej listy kolumn w tabeli, uruchom następujący kod T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Napiwek

Zwróć uwagę, że w poprzednim przykładzie nie jest używana jawna @role_name i przez ustawienie parametru na NULL, ale możesz użyć roli gating, aby ograniczyć dostęp do danych zmiany.

Rola do kontrolowania dostępu do tabeli zmian

Celem nazwanej roli jest kontrolowanie dostępu do danych zmiany. Określona rola może być istniejącą stałą rolą serwera lub rolą bazy danych. Jeśli określona rola jeszcze nie istnieje, zostanie utworzona automatycznie rola bazy danych tej nazwy. Użytkownicy muszą mieć uprawnienie SELECT dla wszystkich przechwyconych kolumn tabeli źródłowej. Ponadto po określeniu roli użytkownicy, którzy nie są członkami roli sysadmin lub db_owner , również muszą być członkami określonej roli.

Aby włączyć usługę CDC dla tabeli określającej rolę gating, uruchom następujący kod T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Jeśli nie chcesz używać roli gating, jawnie ustaw parametr @role_name na NULLwartość .

Funkcja do wykonywania zapytań dotyczących zmian netto

Wystąpienie przechwytywania zawsze zawiera funkcję z wartością tabeli, aby zwrócić wszystkie wpisy tabeli zmian, które wystąpiły w zdefiniowanym interwale. Ta funkcja jest wywoływana przez dołączenie nazwy wystąpienia przechwytywania do cdc.fn_cdc_get_all_changes_. Aby uzyskać więcej informacji, zobacz cdc.fn_cdc_get_all_changes.

Jeśli parametr @supports_net_changes jest ustawiony na 1, funkcja net changes jest również generowana dla wystąpienia przechwytywania. Ta funkcja zwraca tylko jedną zmianę dla każdego odrębnego wiersza zmienionego w interwale określonym w wywołaniu. Aby uzyskać więcej informacji, zobacz cdc.fn_cdc_get_net_changes.

Aby obsługiwać zapytania dotyczące zmian netto, tabela źródłowa musi mieć klucz podstawowy lub unikatowy indeks w celu unikatowego identyfikowania wierszy. Jeśli używany jest unikatowy indeks, należy określić nazwę indeksu przy użyciu parametru @index_name . Kolumny zdefiniowane w kluczu podstawowym lub unikatowym indeksie muszą być uwzględnione na liście kolumn źródłowych do przechwycenia.

Aby włączyć usługę CDC dla tabeli z obsługą zmian sieciowych, uruchom następujący kod T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Jeśli przechwytywanie zmian danych jest włączone w tabeli z istniejącym kluczem podstawowym, a parametr @index_name nie jest używany do identyfikowania alternatywnego unikatowego indeksu, funkcja przechwytywania zmian danych używa klucza podstawowego. Kolejne zmiany klucza podstawowego nie są dozwolone bez uprzedniego wyłączania przechwytywania zmian danych dla tabeli. Jest to prawdą niezależnie od tego, czy obsługa zapytań dotyczących zmian netto została zażądana podczas konfigurowania przechwytywania danych zmian.

Jeśli w tabeli nie ma klucza podstawowego w momencie włączenia przechwytywania danych zmian, kolejne dodanie klucza podstawowego jest ignorowane przez przechwytywanie danych zmian. Ponieważ przechwytywanie zmian danych nie używa klucza podstawowego utworzonego po włączeniu tabeli, kolumny klucza i klucza można usunąć bez ograniczeń.

Aby uzyskać więcej informacji na temat sys.sp_cdc_enable_table argumentów procedury składowanej, zobacz sys.sp_cdc_enable_table (Transact-SQL).

Napiwek

Aby określić, czy tabela źródłowa została już włączona do przechwytywania danych zmian, sprawdź kolumnę is_tracked_by_cdc w sys.tables widoku wykazu.

Wyłączanie usługi CDC dla usługi Azure SQL Database

Wyłączenie usługi CDC dla usługi Azure SQL Database spowoduje usunięcie wszystkich skojarzonych metadanych przechwytywania danych zmian, w tym procesów przechwytywania i oczyszczania zewnętrznego cdc usercdc schemaharmonogramu. Jednak wszystkie role gating utworzone przez przechwytywanie zmian danych nie są usuwane automatycznie i muszą zostać jawnie usunięte.

Uwaga

Aby określić, czy baza danych ma włączoną usługę cdc, wykonaj zapytanie o kolumnę is_cdc_enabledsys.databases w widoku wykazu.

Przed wyłączeniem usługi CDC na poziomie bazy danych nie jest konieczne wyłączenie usługi CDC dla poszczególnych tabel.

Aby wyłączyć usługę CDC na poziomie bazy danych, uruchom następujący kod T-SQL:

EXEC sys.sp_cdc_disable_db;
GO

Napiwek

Po wyłączeniu usługi CDC na poziomie bazy danych należy ponownie włączyć usługę CDC dla poszczególnych tabel , jeśli chcesz jeszcze raz użyć funkcji CDC.

Zarządzanie usługą CDC

W usłudze Azure SQL Database usługa CDC jest kluczową funkcją do śledzenia zmian w tabelach bazy danych i zarządzania nimi. W przeciwieństwie do tradycyjnych środowisk programu SQL Server usługa Azure SQL Database wykorzystuje harmonogram przechwytywania zmian danych do obsługi zadań cdC zamiast polegać na zadaniach agenta programu SQL Server. Ten harmonogram automatycznie inicjuje okresowe procesy przechwytywania i oczyszczania tabel cdC w bazie danych, zapewniając niezawodność i wydajność bez zależności zewnętrznych.

Automatyczne przechwytywanie i oczyszczanie usługi CDC

Zadanie przechwytywania cdC w usłudze Azure SQL Database działa bezproblemowo, co 20 sekund w celu wydajnego śledzenia zmian. Jednocześnie zadanie oczyszczania jest uruchamiane co godzinę, dzięki czemu tabele CDC pozostają zoptymalizowane. Użytkownicy mogą mieć pewność, że zarządzanie usługą CDC odbywa się automatycznie bez ręcznej interwencji.

Ważne

Jeśli bezserwerowa baza danych ma włączoną usługę CDC i jest w stanie wstrzymania, usługa CDC nie jest uruchomiona. Skanowanie CDC nie będzie miało wpływu na funkcję autopause.

Ręczna kontrolka CDC

Podczas gdy usługa CDC jest uruchamiana automatycznie, użytkownicy zachowują elastyczność wykonywania ręcznych operacji CDC na żądanie. Procedury sp_cdc_scan i sp_cdc_cleanup_change_tables umożliwiają wyzwalanie zadań przechwytywania i oczyszczania zgodnie z potrzebami.

Monitorowanie usługi CDC

Usługa Azure SQL Database udostępnia cenne narzędzia do monitorowania działań usługi CDC. Dwa dynamiczne widoki zarządzania, sys.dm_cdc_log_scan_sessions i sys.dm_cdc_errors, oferują wgląd w procesy CDC, zapewniając pełny wgląd w zmiany danych.

Dostosowywanie usługi CDC

Chociaż usługa Azure SQL Database usprawnia zarządzanie usługą CDC, istnieją pewne ograniczenia:

  • Nie można dostosować częstotliwości zadań przechwytywania i oczyszczania cdC.
  • Wartości pollinginterval i continuous dla zadań przechwytywania i oczyszczania nie mają zastosowania w usłudze Azure SQL Database.
  • Usunięcie wpisu zadania przechwytywania z cdc.cdc_jobs tabeli nie powoduje zatrzymania zadania przechwytywania w tle.
  • Usunięcie wpisu zadania oczyszczania powoduje zatrzymanie zadania oczyszczania.
  • Tabela cdc.cdc_jobs znajduje się w schemacie cdc , a nie msdb.

Pomimo tych ograniczeń nadal można dostosować następujące opcje:

  • Wykonaj zapytanie względem tabeli pod kątem cdc.cdc_jobs bieżących szczegółów konfiguracji.
  • maxtrans Dostosuj opcje i maxscans przy użyciu procedury składowanejsp_cdc_change_job.
  • Zarządzaj zadaniami, stosując i sp_cdc_add_job zgodnie z potrzebamisp_cdc_drop_job.

Zagadnienia i zalecenia dotyczące wydajności

Włączenie przechwytywania danych zmian dla usługi Azure SQL Database ma efekt wydajności porównywalny do włączenia usługi CDC dla programu SQL Server lub usługi Azure SQL Managed Instance. Jednak kilka czynników wpływa na efekt wydajności podczas włączania usługi CDC, w tym:

  • Liczba tabel z włączoną usługą CDC w usłudze Azure SQL Database.

  • Częstotliwość zmian w śledzonych tabelach lub wolumenie transakcji. Aktywne transakcje uniemożliwiają obcięcie dziennika do momentu zatwierdzeń transakcji i skanowania CDC lub przerwania transakcji. Może to spowodować większe niż zwykle wypełnienie dziennika transakcji i powinno być monitorowane, aby dziennik transakcji nie został wypełniony.

  • Upewnij się, że w źródłowej bazie danych jest dostępne wolne miejsce, ponieważ artefakty CDC (na przykład tabele CT, cdc_jobs itp.) są przechowywane w tej samej bazie danych.

  • Niezależnie od tego, czy masz pojedynczą bazę danych, czy jest częścią elastycznej puli.

  • Bazy danych w zasobie współużytkowania elastycznej puli (takie jak miejsce na dysku), dlatego włączenie usługi CDC w wielu bazach danych powoduje ryzyko osiągnięcia maksymalnego rozmiaru dysku elastycznej puli. Monitoruj zasoby, takie jak procesor CPU, pamięć i przepływność dziennika. Aby uzyskać więcej informacji, zobacz Zarządzanie zasobami w gęstych elastycznych pulach.

  • Podczas pracy z bazami danych w elastycznych pulach należy wziąć pod uwagę liczbę tabel z włączoną usługą CDC oraz liczbę baz danych, do których należą te tabele. Zalecamy ocenę obciążenia i podjęcie wymaganych środków, takich jak skalowanie elastycznej puli. Aby uzyskać więcej informacji, zobacz Skalowanie zasobów elastycznej puli w usłudze Azure SQL Database.

Ważne

Te zagadnienia są ogólnymi wskazówkami. Aby uzyskać dokładne wskazówki dotyczące optymalizacji wydajności dla określonego obciążenia, skontaktuj się z pomocą techniczną firmy Microsoft.

Podczas korzystania z usługi CDC z usługą Azure SQL Database należy wziąć pod uwagę następujące najlepsze rozwiązania:

  • Dokładnie przetestuj obciążenie przed włączeniem usługi CDC w bazach danych w środowisku produkcyjnym, aby ułatwić określenie odpowiedniego celu slo odpowiedniego dla obciążenia. Aby uzyskać więcej informacji na temat rozmiarów obliczeniowych usługi Azure SQL Database, zobacz Warstwy usług.

  • Rozważ skalowanie liczby rdzeni wirtualnych lub przejście do wyższej warstwy bazy danych, takiej jak Hiperskala, w celu zachowania poprzedniego poziomu wydajności po włączeniu usługi CDC w usłudze Azure SQL Database. Aby uzyskać więcej informacji, zobacz Model zakupów rdzeni wirtualnych — Usługa Azure SQL Database i warstwa usługi Hiperskala.

  • Uważnie monitoruj wykorzystanie miejsca. Aby uzyskać więcej informacji, zobacz Zarządzanie miejscem na pliki dla baz danych w usłudze Azure SQL Database.

  • Monitorowanie współczynnika generowania dzienników, aby uzyskać więcej informacji, zobacz Zużycie zasobów według obciążeń użytkownika i procesów wewnętrznych.

  • Procesy skanowania i oczyszczania cdC są częścią zwykłego obciążenia bazy danych (również zużywających zasoby). W zależności od liczby transakcji obniżenie wydajności może być znaczne ze względu na procesy skanowania i czyszczenia, które nie nadążają za obciążeniem, ponieważ całe wiersze są dodawane do zmian tabel i operacji aktualizacji, jest również uwzględniany preimage. Zalecamy ocenę obciążenia i podjęcie wymaganych środków zgodnie z poprzednimi zaleceniami. Aby uzyskać więcej informacji, zobacz sekcję zarządzania cdC w tym artykule.

Ważne

Harmonogram uruchamia funkcję przechwytywania i oczyszczania automatycznie w usłudze SQL Database. Zadanie przechwytywania cdC jest uruchamiane co 20 sekund, a zadanie oczyszczania jest uruchamiane co godzinę.

  • Aby zapobiec wzrostowi opóźnienia, upewnij się, że liczba baz danych z włączoną usługą CDC nie przekracza liczby rdzeni wirtualnych przydzielonych do elastycznej puli. Aby dowiedzieć się więcej, zobacz Zarządzanie zasobami w gęstych elastycznych pulach.

  • Na podstawie poziomu obciążenia i wydajności rozważ zmianę okresu przechowywania cdC na mniejszą liczbę niż domyślna trzy dni, aby upewnić się, że proces oczyszczania może nadążyć za zmianami w tabeli zmian. Utrzymanie niższego okresu przechowywania podczas monitorowania rozmiaru bazy danych jest dobrym rozwiązaniem.

  • Nie podano umowy dotyczącej poziomu usług (SLA) w przypadku wypełniania zmian w tabelach zmian. Opóźnienie podrzędne nie jest również obsługiwane.

Znane problemy i ograniczenia

Agresywne obcinanie dziennika

Po włączeniu funkcji przechwytywania zmian danych (CDC) w usłudze Azure SQL Database funkcja agresywnego obcinania dziennika przyspieszonego odzyskiwania bazy danych (ADR) jest wyłączona. Jest to spowodowane tym, że skanowanie usługi CDC uzyskuje dostęp do dziennika transakcji bazy danych. Aktywne transakcje uniemożliwiają obcięcie dziennika transakcji do momentu zatwierdzeń transakcji i skanowania CDC lub przerwania transakcji. Może to spowodować większe niż zwykle wypełnienie dziennika transakcji i powinno być monitorowane, aby dziennik transakcji nie został wypełniony.

Podczas włączania usługi CDC zalecamy użycie opcji indeksu możliwego do wznowienia podczas tworzenia lub ponownego kompilowania indeksu. Indeksy z możliwością wznowienia nie przechowują długotrwałej transakcji i umożliwiają obcinanie dzienników podczas operacji w celu lepszego zarządzania obszarem dziennika. Aby uzyskać więcej informacji, zobacz Wytyczne dotyczące operacji indeksowania online — zagadnienia dotyczące indeksu możliwego do wznowienia.

Warstwa usługi Azure SQL Database

Chociaż usługa CDC jest obsługiwana w przypadku baz danych i pul elastycznych w dowolnej warstwie usług w modelu zakupów opartym na rdzeniach wirtualnych, bazy danych niższe niż S3 (takie jak Podstawowa, S0, S1, S2) nie są obsługiwane w modelu zakupów jednostek DTU.

Limity dzienników usługi Azure SQL Database

Przyspieszone odzyskiwanie bazy danych i usługa CDC nie są zgodne z usługą Azure SQL Database. Jest to spowodowane tym, że skanowanie CDC aktywnie uzyskuje dostęp do dziennika transakcji bazy danych i współdziała z nim, co może powodować konflikt z agresywnym zachowaniem obcinania dziennika ADR.

Aby zapobiec problemom z skalowalnością i zarządzaniem przestrzenią, należy uważnie monitorować usługę Azure SQL Database i rozważyć skalowanie do wyższej warstwy bazy danych oraz umożliwić wzrost dziennika transakcji zgodnie z potrzebami obciążenia.

Napiwek

Jeśli obciążenie wymaga wyższej ogólnej wydajności z powodu większej przepływności dziennika transakcji i krótszych czasów zatwierdzania transakcji, użyj warstwy usługi Hiperskala.

Dostosowywanie przechwytywania i oczyszczania

Konfigurowanie częstotliwości przechwytywania i procesów oczyszczania dla usługi CDC w bazach danych Azure SQL Database nie jest możliwe. Harmonogram uruchamia funkcję przechwytywania i czyszczenia automatycznie.

Tryb failover w usłudze Azure SQL Database

W przypadku scenariuszy trybu failover lokalnego lub geograficznego odzyskiwania po awarii, jeśli baza danych ma włączoną usługę CDC, proces przechwytywania i czyszczenia zmian danych nastąpi automatycznie w nowej podstawowej bazie danych po zakończeniu pracy w trybie failover.

Microsoft Entra ID

Uwaga

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Jeśli tworzysz bazę danych w usłudze Azure SQL Database jako użytkownik usługi Microsoft Entra i włączasz w niej usługę CDC, użytkownik SQL (na przykład nawet jeden w sysadmin roli) nie może wyłączyć/wprowadzić zmian w artefaktach CDC. Jednak inny użytkownik firmy Microsoft Entra może włączyć/wyłączyć usługę CDC w tej samej bazie danych.

Podobnie, jeśli tworzysz bazę danych jako użytkownik SQL, włączenie/wyłączenie przechwytywania zmian danych jako użytkownik firmy Microsoft Entra nie działa.

Włączenie usługi CDC kończy się niepowodzeniem, jeśli tworzysz bazę danych w usłudze Azure SQL Database jako użytkownik firmy Microsoft Entra, nie włączaj usługi CDC, a następnie spróbuj włączyć usługę CDC po przywróceniu bazy danych.

Aby rozwiązać ten problem, połącz się z bazą danych przy użyciu konta administratora firmy Microsoft Entra i uruchom następujący kod T-SQL:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Przywracanie do punktu w czasie (PITR)

Jeśli usługa CDC została włączona w usłudze Azure SQL Database jako użytkownik SQL, przywracanie do punktu w czasie (PITR) zachowuje cdC w przywróconej bazie danych, chyba że zostanie przywrócony do celu slo z podrdzeniami. W przypadku przywrócenia do celu slo z podrdzeniami artefakty cdC nie są dostępne.

Jeśli włączysz usługę CDC w bazie danych jako użytkownik firmy Microsoft Entra, nie będzie możliwe przywracanie do punktu w czasie (PITR) do podrdzeniowego celu slo. Przywróć bazę danych do tego samego lub wyższego celu slo co źródło, a następnie w razie potrzeby wyłącz usługę CDC.

Rozwiązywanie problemów

Ta sekcja zawiera wskazówki i kroki rozwiązywania problemów skojarzone z usługą CDC w usłudze Azure SQL Database. Błędy związane z cdC mogą utrudniać prawidłowe działanie procesu przechwytywania i prowadzić do rozszerzenia dziennika transakcji bazy danych.

Aby zbadać te błędy, możesz wykonać zapytanie dotyczące dynamicznego widoku zarządzania sys.dm_cdc_errors. sys.dm_cdc_errors Jeśli dynamiczny widok zarządzania zwraca błędy, zapoznaj się z poniższą sekcją, aby zrozumieć kroki ograniczania ryzyka.

Uwaga

Aby uzyskać więcej informacji na temat określonego kodu błędu, zobacz Zdarzenia i błędy aparatu bazy danych.

Są to różne kategorie rozwiązywania problemów zawarte w tej sekcji:

Kategoria opis
Metadane zmodyfikowane Zawiera informacje na temat rozwiązywania problemów związanych z usługą CDC po zmodyfikowaniu lub usunięciu śledzonej tabeli.
Zarządzanie przestrzenią bazy danych Zawiera informacje na temat rozwiązywania problemów, gdy miejsce w bazie danych zostało wyczerpane.
Ograniczenie usługi CDC Zawiera informacje na temat rozwiązywania problemów spowodowanych ograniczeniami usługi CDC.

Metadane zmodyfikowane

Błąd 200/208 — nieprawidłowa nazwa obiektu

  • Przyczyna: Błąd może wystąpić, gdy metadane usługi CDC zostały porzucone. Aby usługa CDC działała prawidłowo, nie należy ręcznie modyfikować żadnych metadanych cdC, takich jak CDC schema, tabele zmian, procedury składowane systemu CDC, domyślne cdc user uprawnienia (sys.database_principals) ani zmienić nazwy cdc user.

  • Zalecenie: Aby rozwiązać ten problem, należy wyłączyć i ponownie włączyć usługę CDC dla bazy danych. Podczas włączania przechwytywania danych zmian dla bazy danych tworzy schemat cdc, użytkownika cdc, tabele metadanych i inne obiekty systemowe dla bazy danych. Należy ręcznie ponownie włączyć usługę CDC dla poszczególnych tabel po włączeniu usługi CDC dla bazy danych.

Uwaga

Obiekty znalezione w widoku katalogu systemowego sys.objects z elementem is_ms_shipped=1 i schema_name=cdc nie powinny być zmieniane ani usuwane.

Błąd 1202 — Podmiot zabezpieczeń bazy danych nie istnieje lub użytkownik nie jest członkiem

  • Przyczyna: Błąd może wystąpić, gdy użytkownik usługi CDC został porzucony. Aby usługa CDC działała prawidłowo, nie należy ręcznie modyfikować żadnych metadanych cdC, takich jak CDC schema, tabele zmian, procedury składowane systemu CDC, domyślne cdc user uprawnienia (sys.database_principals) lub zmiana nazwy cdc user.

  • Zalecenie: Upewnij się, że cdc użytkownik istnieje w bazie danych, a także ma przypisaną db_owner rolę. Aby utworzyć cdc użytkownika, zobacz przykład Tworzenie użytkownika cdc i przypisywanie roli.

Błąd 15517 — nie można wykonać jako podmiotu zabezpieczeń bazy danych, ponieważ podmiot zabezpieczeń nie istnieje

  • Przyczyna: Nie można personifikować tego typu podmiotu zabezpieczeń lub nie masz uprawnień. Błąd może wystąpić, gdy metadane usługi CDC zostały porzucone lub nie jest już częścią db_owner roli. Aby usługa CDC działała prawidłowo, nie należy ręcznie modyfikować żadnych metadanych cdC, takich jak CDC schema, tabele zmian, procedury składowane systemu CDC, domyślne cdc user uprawnienia (sys.database_principals) ani zmienić nazwy cdc user.

  • Zalecenie: Upewnij się, że cdc użytkownik istnieje w bazie danych, a także ma przypisaną db_owner rolę. Aby utworzyć cdc użytkownika, zobacz przykład Tworzenie użytkownika cdc i przypisywanie roli.

Błąd 18807 — nie można odnaleźć identyfikatora obiektu dla tabeli systemu replikacji

  • Przyczyna: Ten błąd występuje, gdy program SQL Server nie może znaleźć tabeli systemu replikacji %s lub uzyskać do jej dostępu. Przyczyną może być brak tabeli lub brak jej możliwości osiągnięcia. Aby usługa CDC działała prawidłowo, nie należy ręcznie modyfikować żadnych metadanych CDC, takich jak CDC schema, tabele zmian, procedury składowane systemu CDC, domyślne cdc user uprawnienia (sys.database_principals) ani zmienić nazwy cdc user.

  • Zalecenie: Sprawdź, czy tabela systemowa istnieje i jest dostępna, wykonując zapytanie bezpośrednio w tabeli. Wykonaj zapytanie względem katalogu systemowego sys.objects, ustaw klauzulę predykatu i , aby wyświetlić listę wszystkich obiektów związanych z usługą is_ms_shipped=1schema_name=cdc CDC. Jeśli zapytanie nie zwraca żadnych obiektów, należy je wyłączyć, a następnie ponownie włączyć usługę CDC dla bazy danych. Włączenie przechwytywania danych zmian dla bazy danych powoduje utworzenie cdc schemaobiektów , cdc user, metadanych i innych obiektów systemowych dla bazy danych. Należy ręcznie ponownie włączyć usługę CDC dla poszczególnych tabel po włączeniu usługi CDC dla bazy danych.

Błąd 21050 — tylko członkowie administratora systemu lub db_owner stałej roli serwera mogą wykonać tę operację

  • Przyczyna: cdc użytkownik został usunięty z db_owner roli bazy danych lub z sysadmin roli serwera.

  • Zalecenie: Upewnij się, że cdc użytkownik ma przypisaną db_owner rolę. Aby utworzyć cdc użytkownika, zobacz przykład Tworzenie użytkownika cdc i przypisywanie roli.

Zarządzanie obszarem bazy danych

Błąd 1105 — nie można przydzielić miejsca dla obiektu w bazie danych, ponieważ grupa plików jest pełna

  • Przyczyna: Ten błąd występuje, gdy w podstawowej grupie plików bazy danych zabraknie miejsca, a usługa SQL Database nie może przydzielić więcej miejsca dla obiektu (takiego jak tabela lub indeks) w tej grupie plików.

  • Zalecenie: Aby rozwiązać ten problem, usuń wszelkie niepotrzebne dane w bazie danych, aby zwolnić miejsce. Zidentyfikuj nieużywane tabele, indeksy lub inne obiekty w grupie plików, które można bezpiecznie usunąć. Aby uzyskać więcej informacji, zobacz Zarządzanie miejscem na pliki dla baz danych w usłudze Azure SQL Database.

    W przypadku porzucania niepotrzebnych danych/obiektów nie jest opcją, rozważ skalowanie do wyższej warstwy bazy danych.

Ważne

Aby uzyskać szczegółowe informacje na temat rozmiarów obliczeniowych usługi Azure SQL Database (pojedynczej bazy danych) zobacz Limity zasobów dla pojedynczych baz danych przy użyciu modelu zakupów rdzeni wirtualnych i Limity zasobów dla pojedynczych baz danych przy użyciu modelu zakupów jednostek DTU — Azure SQL Database.

Błąd 1132 — pula elastyczna osiągnęła limit magazynu

  • Przyczyna: Ten błąd występuje, gdy użycie magazynu w elastycznej puli przekroczyło przydzielony limit.

  • Zalecenie: Aby rozwiązać ten problem, zaimplementuj strategie archiwizowania i przeczyszczania danych, aby zachować tylko niezbędne dane w bazach danych, które są częścią elastycznej puli. Uważnie monitoruj wykorzystanie miejsca. Aby uzyskać więcej informacji, zobacz Zarządzanie miejscem na pliki dla baz danych w usłudze Azure SQL Database.

    Jeśli archiwizowanie danych lub usuwanie niepotrzebnych danych/obiektów nie jest opcją, rozważ skalowanie do wyższej warstwy bazy danych.

Ważne

Aby uzyskać szczegółowe informacje na temat rozmiarów obliczeniowych usługi Azure SQL Database (pojedynczej bazy danych) zobacz Limity zasobów dla elastycznych pul przy użyciu modelu zakupów rdzeni wirtualnych i Limity zasobów dla elastycznych pul przy użyciu modelu zakupów jednostek DTU.

Ograniczenie usługi CDC

Błąd 2628 — ciąg lub dane binarne zostaną obcięte w tabeli

  • Przyczyna: Zmiana rozmiaru kolumn tabeli z włączoną funkcją CDC przy użyciu instrukcji DDL może powodować problemy z kolejnym procesem przechwytywania cdC. Dynamiczny sys.dm_cdc_errors widok zarządzania (DMV) jest przydatny do sprawdzania dowolnego cdC pod kątem zgłoszonych problemów, takich jak błędy numer 2628 i 8115.

  • Zalecenie: Przed wprowadzeniem zmian w rozmiarze kolumny należy ocenić, czy zmiana jest zgodna z istniejącymi danymi w tabelach zmian cdC. Aby rozwiązać ten problem, należy wyłączyć i ponownie włączyć usługę CDC dla bazy danych. Aby uzyskać więcej informacji na temat włączania usługi CDC dla bazy danych lub tabeli, zobacz Włączanie usługi CDC dla usługi Azure SQL Database i Włączanie usługi CDC dla sekcji tabeli w tym artykule.

Błąd 22830 — wbudowana funkcja "SUSER_SNAME" w kontekście personifikacji nie jest obsługiwana w tej wersji programu SQL Server

  • Przyczyna: Ten błąd występuje podczas włączania usługi CDC, jeśli w bazie danych istnieje wyzwalacz użytkownika, który ma wywołanie polecenia SUSER_SNAME() w usłudze create_table. Wyzwalacze można wyświetlić za pomocą następującego skryptu języka Transact-SQL. To polecenie zawiera szczegóły wyzwalacza obiektu i odpowiednie object_idpolecenie :

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Po uzyskaniu definicji wyzwalacza można wyszukać wywołania wykonywane SYSTEM_USER za pomocą następującego skryptu:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Zalecenie: Aby rozwiązać ten problem, wykonaj następujące kroki dla każdego wyzwalacza użytkownika uzyskanego z poprzedniego skryptu.

    • Wyłączanie wyzwalacza
    • Włączanie przechwytywania zmian danych
    • Ponowne włączanie wyzwalacza

Aby uzyskać więcej informacji, zobacz DISABLE TRIGGER (Transact-SQL).

Błąd 913 — zadanie przechwytywania cdC kończy się niepowodzeniem podczas przetwarzania zmian w tabeli z systemowym typem danych CLR

  • Przyczyna: Ten błąd występuje podczas włączania usługi CDC w tabeli z systemowym typem danych CLR, wprowadzaniem zmian DML, a następnie wprowadzaniem zmian DDL w tej samej tabeli, podczas gdy zadanie przechwytywania CDC przetwarza zmiany związane z innymi tabelami.

  • Zalecenie: Zalecane kroki to spoczynke DML do tabeli, uruchomienie zadania przechwytywania w celu przetworzenia zmian, uruchomienie języka DDL dla tabeli, uruchomienie zadania przechwytywania w celu przetworzenia zmian DDL, a następnie ponowne włączenie przetwarzania DML. Aby uzyskać więcej informacji, zobacz Zadanie przechwytywania cdC kończy się niepowodzeniem podczas przetwarzania zmian.

Tworzenie użytkownika i przypisywanie roli

Jeśli element cdc user został usunięty, możesz ręcznie dodać użytkownika z powrotem.

Użyj następującego skryptu języka T-SQL, aby utworzyć użytkownika (cdc) i przypisać odpowiednią rolę (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Sprawdzanie i dodawanie członkostwa w rolach

Aby sprawdzić, czy cdc użytkownik należy do sysadmin roli lub db_owner , uruchom następujące zapytanie T-SQL:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

cdc Jeśli użytkownik nie należy do żadnej roli, wykonaj następujące zapytanie T-SQL, aby dodać db_owner rolę do cdc użytkownika.

EXEC sp_addrolemember 'db_owner' , 'cdc';