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 Co to jest przechwytywanie zmian danych (CDC)?

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 o zmianach, które są ustrukturyzowane, aby odbiorcy mogli zastosować je do odmiennych 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 odcinkiem programu Data Exposed.

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 przedstawiający schemat blokowy przedstawiający przepływ danych na potrzeby przechwytywania zmian danych.

Wymagania wstępne

Uprawnienia

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

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

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

W przypadku baz danych w modelu zakupów DTU, CDC jest obsługiwane dla 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 instancji przechwytywania dla poszczególnych tabel, należy włączyć funkcję CDC w bazie danych Azure SQL Database.

Aby włączyć usługę CDC, połącz się z bazą danych Azure SQL Database za pośrednictwem aplikacji Azure Data Studio lub 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 na kolumnie is_cdc_enabled w widoku katalogu sys.databases.

Po włączeniu przechwytywania zmian danych dla bazy danych, tworzone są tabele cdc schema, cdc user, dane metadane oraz 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. cdc schema zawiera także skojarzone funkcje systemowe używane do zapytań o zmiany 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łącz usługę 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 poprzez ustawienie parametru na NULL, ale możesz użyć roli ograniczającej, aby ograniczyć dostęp do danych dotyczących zmian.

Kolumny w tabeli źródłowej, które mają być przechwycone

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 ochronnej, jawnie ustaw parametr @role_name na wartość NULL.

Funkcja do wykonywania zapytań dotyczących zmian netto

Wystąpienie przechwytywania zawsze zawiera funkcję zwracającą wartości tabeli, aby zwrócić wszystkie wpisy tabeli zmian, które zaszły w zdefiniowanym interwale. Ta funkcja jest nazwana przez dodanie 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 zmian netto jest również generowana dla instancji 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 tabeli do przechwytywania zmian danych, kolejne dodanie klucza podstawowego jest ignorowane przez mechanizm przechwytywania zmian danych. Dlatego, że przechwytywanie zmian danych nie wykorzystuje klucza podstawowego utworzonego po włączeniu tabeli, można usunąć zarówno klucz, jak i kolumny klucza bez żadnych ograniczeń.

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

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 cdc user, cdc schema oraz zewnętrznych procesów harmonogramu przechwytywania i oczyszczania. 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 CDC

Zadanie przechwytywania CDC w usłudze Azure SQL Database działa bezproblemowo, co 20 sekundach 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ęczne sterowanie 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:

  • Zapytaj tabelę cdc.cdc_jobs o bieżące szczegóły konfiguracji.
  • Dostosuj opcje maxtrans i maxscans przy użyciu procedury składowanej sp_cdc_change_job.
  • Zarządzaj zadaniami, wykorzystując sp_cdc_drop_job i sp_cdc_add_job zgodnie z potrzebami.

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 zatwierdzenia transakcji i nadrobienia zaległości przez skanowanie 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 ona częścią elastycznej puli.

  • Bazy danych w elastycznej puli zasobów współdzielą między sobą zasoby (takie jak miejsce na dysku), dlatego włączenie CDC w wielu bazach danych niesie ryzyko przekroczenia 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 CDC w bazach danych w środowisku produkcyjnym, aby ułatwić określenie odpowiedniego celu SLO 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, aby zachować poprzedni poziom 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.

  • Monitoruj współczynnik 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ą 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. Dzieje się tak, ponieważ całe wiersze są dodawane do tabel zmian, a w przypadku operacji aktualizacji uwzględniany jest również obraz sprzed zmiany. Zalecamy ocenę obciążenia i podjęcie wymaganych środków zgodnie z poprzednimi zaleceniami. Aby uzyskać więcej informacji, zobacz sekcję zarządzanie CDC w tym artykule.

Ważne

Harmonogram uruchamia funkcję przechwytywania i oczyszczania automatycznie w usłudze SQL Database. Zadanie przechwytywania CDC uruchamia się co 20 sekund, a zadanie oczyszczania uruchamia się 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óźnienia poniżej sekundy nie są obsługiwane.

Znane problemy i ograniczenia

Agresywne przycinanie rejestru

Po włączeniu przechwytywania zmian danych (CDC) w bazie danych Azure SQL, funkcja agresywnego obcinania dziennika w ramach 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.

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

CDC jest obsługiwane dla baz danych i puli elastycznych w dowolnym poziomie usług w modelu zakupowym opartym na rdzeniach wirtualnych, jednak bazy danych poniżej poziomu S3 (takie jak Podstawowa, S0, S1, S2) nie są obsługiwane w modelu zakupów DTU.

Limity dzienników usługi Azure SQL Database

Przyspieszone odzyskiwanie bazy danych i usługa CDC są zgodne. Jednak agresywne zachowanie obcinania dziennika przez ADR jest wyłączone po włączeniu usługi CDC. Jest to spowodowane tym, że skanowanie CDC aktywnie uzyskuje dostęp do dziennika transakcji bazy danych i wchodzi z nim w interakcję, co zapobiega agresywnemu skracaniu dziennika przez ADR.

Po włączeniu usługi CDC może być obserwowane wyższe wykorzystanie dziennika transakcji. Może być konieczne skalowanie w górę do wyższej warstwy usługi lub rozmiaru obliczeniowego, aby upewnić się, że wystarczająca ilość miejsca w dzienniku transakcji jest dostępna dla potrzeb wszystkich obciążeń.

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.

Instrukcje języka definicji danych (DDL) w trybie online nie są obsługiwane

Instrukcje DDL online nie są obsługiwane, gdy przechwytywanie danych zmieniających się jest włączone w bazie danych.

Dostosowywanie przechwytywania i czyszczenia

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

Przełączanie awaryjne w usłudze Azure SQL Database

W lokalnych lub geograficznych scenariuszach przełączenia awaryjnego, jeśli baza danych ma włączone CDC, proces przechwytywania i czyszczenia zmian danych odbywa się automatycznie w nowej podstawowej bazie danych po przełączeniu.

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 Microsoft Entra i włączasz w niej usługę CDC, użytkownik SQL (na przykład nawet jeden w roli sysadmin) nie może wyłączyć lub zmienić elementów 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 włączyłeś CDC na Azure SQL Database jako użytkownik SQL, przywracanie do punktu w czasie (PITR) zachowuje CDC w przywróconej bazie danych, chyba że zostanie przywrócone do poziomu usługi SLO z rdzeniem podrzędnym. W przypadku przywrócenia do subcore SLO artefakty CDC nie są dostępne.

Jeśli włączysz CDC w bazie danych jako użytkownik Microsoft Entra, nie będzie możliwe przywracanie do punktu w czasie (PITR) do subcore SLO. Przywróć bazę danych do tego samego lub wyższego poziomu 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 CDC zostały usunięte. 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 tworzony jest schemat cdc, użytkownik cdc, tabele metadanych oraz 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 bazodanowy 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 użytkownik bazy danych, ponieważ użytkownik nie istnieje

  • Przyczyna: Nie można się podszywać pod ten typ podmiotu, lub nie masz uprawnień. Błąd może wystąpić, gdy metadane CDC zostały porzucone lub nie są już częścią roli db_owner. 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 aparat bazy danych programu SQL Server nie może odnaleźć lub uzyskać dostępu do tabeli systemu replikacji "%s". Tabela może być nieobecna lub niedostępna. Aby usługa CDC działała prawidłowo, nie modyfikuj ręcznie żadnych metadanych cdC, takich jak CDC schema, tabele zmian, procedury składowane systemu CDC, domyślne uprawnienia cdc user (sys.database_principals) lub zmień nazwę cdc user.

  • Zalecenie: Sprawdź, czy tabela systemowa istnieje i jest dostępna, wykonując zapytanie bezpośrednio w tabeli. Wykonaj zapytanie do katalogu systemowego sys.objects, ustaw klauzulę predykatu z is_ms_shipped=1 oraz schema_name=cdc, aby wyświetlić listę wszystkich obiektów związanych z 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 zmian danych dla bazy danych powoduje utworzenie tabel cdc schema, cdc user, tabel metadanych i innych obiektów systemowych dla tej 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ąć. Monitoruj dokładnie wykorzystanie przestrzeni. 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 dla pojedynczej bazy danych w usłudze Azure SQL Database, zobacz Limity zasobów dla pojedynczych baz danych przy użyciu modelu zakupów rdzeni wirtualnych oraz 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 pojawia się, gdy przekroczono przydzielony limit wykorzystania przestrzeni w elastycznej puli.

  • 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 pojedynczej bazy danych w usłudze Azure SQL Database, zobacz Limity zasobów dla elastycznych pul przy użyciu modelu zakupu rdzeni wirtualnych oraz Limity zasobów dla elastycznych pul przy użyciu modelu zakupu 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 procesem przechwytywania danych przez 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 o numerach 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 SUSER_SNAME() w 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_id polecenie :

    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łącz CDC
    • Ponowne włączanie wyzwalacza

Aby uzyskać więcej informacji, zobacz DISABLE TRIGGER.

Błąd 913: Zadanie przechwytywania CDC ulega awarii 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 zatrzymanie DML dla tabeli, uruchomienie zadania przechwytywania zmian, wykonanie DDL dla tabeli, uruchomienie zadania przechwytywania do przetworzenia zmian DDL, a następnie ponowne włączenie przetwarzania DML. Aby uzyskać więcej informacji, zobacz zadanie przechwytywania CDC kończy się niepowodzeniem przy przetwarzaniu zmian w tabeli z typem danych CLR systemu (geometria, geografia lub hierarchyid).

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 użytkownik cdc należy do roli sysadmin 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';