Udostępnij za pośrednictwem


Włączanie i wyłączanie przechwytywania zmian danych

Dotyczy:programu SQL ServerAzure SQL Managed Instance

W tym artykule opisano sposób włączania i wyłączania przechwytywania zmian danych dla bazy danych i tabeli dla programu SQL Server i usługi Azure SQL Managed Instance. Aby uzyskać informacje o usłudze Azure SQL Database, zobacz CDC with Azure SQL Database.

Uprawnienia

Uprawnienia sysadmin są wymagane do włączenia lub wyłączenia przechwytywania zmian danych w programie SQL Server i usłudze Azure SQL Managed Instance.

Włącz dla bazy danych

Przed utworzeniem instancji przechwytywania dla poszczególnych tabel należy włączyć przechwytywanie zmian dla bazy danych.

Aby włączyć przechwytywanie zmian danych, uruchom procedurę składowaną sys.sp_cdc_enable_db (Transact-SQL) w kontekście bazy danych. Aby określić, czy baza danych ma już włączoną usługę CDC, wykonaj zapytanie w kolumnie is_cdc_enabled w widoku wykazu sys.databases.

Gdy baza danych ma włączone przechwytywanie zmian, schemat cdc, cdc użytkownika, tabele metadanych i inne obiekty systemowe są tworzone dla bazy danych. Schemat cdc zawiera tabele metadanych przechwytywania zmian, a po włączeniu tabel źródłowych na potrzeby przechwytywania danych zmian poszczególne tabele zmian służą jako repozytorium dla danych zmian. Schemat cdc zawiera również skojarzone funkcje systemowe używane do wykonywania zapytań dotyczących zmian danych.

Przechwytywanie zmian danych wymaga wyłącznego użycia schematu cdc i użytkownika usługi cdc. Jeśli schemat lub użytkownik bazy danych o nazwie cdc obecnie istnieje w bazie danych, przechwytywanie zmian danych nie może być włączone dla bazy danych, dopóki schemat i/lub użytkownik nie zostanie usunięty lub zmieniono jego nazwę.

-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO

Notatka

Aby znaleźć szablony związane z usługą CDC w programie SQL Server Management Studio, przejdź do View, wybierz pozycję Template Explorer, a następnie wybierz pozycję SQL Server Templates. Przechwytywanie zmian danych jest podfolderem zawierającym szablony

Wyłącz dla bazy danych

Użyj sys.sp_cdc_disable_db (Transact-SQL) w kontekście bazy danych, aby wyłączyć przechwytywanie zmian danych dla bazy danych. Przed wyłączeniem usługi CDC dla poszczególnych tabel nie jest konieczne wyłączenie usługi CDC dla bazy danych. Wyłączenie usługi CDC dla bazy danych spowoduje usunięcie wszystkich skojarzonych metadanych przechwytywania danych zmian, w tym cdc użytkownika, schematu i zadań przechwytywania zmian danych. Jednak wszystkie role gating utworzone przez CDC nie zostaną automatycznie usunięte i muszą zostać ręcznie usunięte. Aby określić, czy baza danych ma włączoną usługę CDC, wykonaj zapytanie w kolumnie is_cdc_enabled w widoku wykazu sys.databases.

Jeśli baza danych z włączoną usługą CDC zostanie porzucona, zadania przechwytywania zmian danych zostaną automatycznie usunięte.

-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO

Włącz dla tabeli

Po włączeniu funkcji przechwytywania zmian w bazie danych, członkowie stałej roli bazy danych db_owner mogą utworzyć instancję przechwytywania dla poszczególnych tabel źródłowych, korzystając z procedury składowanej sys.sp_cdc_enable_table. Aby określić, czy tabela źródłowa została już włączona do śledzenia zmian danych, należy sprawdzić kolumnę is_tracked_by_cdc w widoku wykazu sys.tables.

Ważny

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

Podczas tworzenia wystąpienia przechwytywania można określić następujące opcje:

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.

grupa plików zawierająca tabelę zmian.

Domyślnie tabela zmian znajduje się w domyślnej grupie plików bazy danych. Właściciele baz danych, którzy chcą kontrolować umieszczanie poszczególnych tabel zmian, mogą użyć parametru @filegroup_name, aby określić określoną grupę plików dla tabeli zmian skojarzonej z wystąpieniem przechwytywania. Nazwana grupa plików musi już istnieć. Ogólnie rzecz biorąc, zaleca się umieszczenie tabel zmian w grupie plików niezależnie od tabel źródłowych. Zobacz szablon "Włącz opcję określania grupy plików dla tabeli", aby zapoznać się z przykładem użycia parametru @filegroup_name.

-- Enable CDC for a table specifying filegroup
USE MyDB
GO

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @filegroup_name = N'MyDB_CT',
    @supports_net_changes = 1
GO

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 administratora systemu lub db_owner roli, również muszą być członkami określonej roli.

Jeśli nie chcesz używać roli gating, jawnie ustaw parametr @role_name na wartość NULL. Zobacz szablon "Włączanie tabeli bez używania roli gatingowej", aby zapoznać się z przykładem włączania tabeli bez roli gatingowej.

-- Enable CDC for a table using a gating role option
USE MyDB
GO
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = NULL,
    @supports_net_changes = 1
GO

funkcja do wykonywania zapytań dotyczących zmian netto.

Wystąpienie przechwytywania zawsze zawiera funkcję o wartości tabeli (TVF) do zwracania wszystkich wpisów tabeli zmian, które wystąpiły w zdefiniowanym interwale. Ta funkcja jest nazwana poprzez 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_<capture_instance> (Transact-SQL).

Jeśli parametr @supports_net_changes jest ustawiony na 1, funkcja net changes 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_<capture_instance> (Transact-SQL).

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.

Zobacz szablon Włącz tabelę dla wszystkich zapytań i zapytań zmian netto, aby zapoznać się z przykładem tworzenia wystąpienia przechwytywania z obiema funkcjami zapytań.

-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @supports_net_changes = 1
GO

Notatka

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 będzie używać klucza podstawowego utworzonego po włączeniu tabeli, kolumny klucza i klucza można usunąć bez ograniczeń.

Wyłącz tabelę

Elementy członkowskie stałej roli db_owner bazy danych mogą usuwać wystąpienie przechwytywania dla poszczególnych tabel źródłowych przy użyciu procedury składowanej sys.sp_cdc_disable_table. Aby określić, czy tabela źródłowa jest obecnie włączona do przechwytywania danych zmian, sprawdź kolumnę is_tracked_by_cdc w widoku wykazu sys.tables. Jeśli po wyłączeniu bazy danych nie włączono żadnych tabel, zadania przechwytywania zmian zostaną również usunięte.

Jeśli tabela z włączoną obsługą przechwytywania danych zmiany zostanie porzucona, automatycznie zostaną usunięte metadane przechwytywania danych skojarzonych z tabelą.

Zobacz szablon "Wyłączanie Instancji Przechwytywania dla Tabeli", aby zapoznać się z przykładem wyłączenia tabeli.

-- Disable a Capture Instance for a table
USE MyDB
GO
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @capture_instance = N'dbo_MyTable'
GO

Zobacz też