Udostępnij za pomocą


CDC | Centrum Kontroli Chorób.<capture_instance>_CT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Tabela zmian tworzona podczas przechwytywania danych zmian jest włączona w tabeli źródłowej. Tabela zwraca jeden wiersz dla każdej operacji wstawiania i usuwania wykonywanej względem tabeli źródłowej oraz dwa wiersze dla każdej operacji aktualizacji wykonywanej względem tabeli źródłowej. Gdy nazwa tabeli zmian nie jest określona w momencie włączenia tabeli źródłowej, wyprowadza się tę nazwę. Format nazwy to cdc. capture_instance_CT gdzie capture_instance to nazwa schematu tabeli źródłowej, a nazwa tabeli źródłowej w formacie schema_table. Na przykład, jeśli tabela Person.Address w przykładowej bazie danych AdventureWorks jest włączona do przechwytywania danych zmian, nazwa tabeli zmian będzie cdc.Person_Address_CT.

Zalecamy, aby nie zapytywać bezpośrednio tabel systemowych. Zamiast tego wykonaj funkcje cdc.fn_cdc_get_all_changes_<capture_instance> i cdc.fn_cdc_get_net_changes_<capture_instance> .

Nazwa kolumny Typ danych Description
__$start_lsn binary(10) Numer sekwencji logu (LSN) powiązany z transakcją zatwierdzenia zmiany.

Wszystkie zmiany dokonane w tej samej transakcji współdzielą ten sam commit LSN. Na przykład, jeśli operacja usuwania tabeli źródłowej usuwa dwa wiersze, tabela zmian zawiera dwa wiersze, każdy o tej samej wartości __$start_lsn .
__$end_lsn binary(10) Zidentyfikowane tylko do celów informacyjnych. Niewspierane. Zgodność w przyszłości nie jest gwarantowana.

W SQL Server 2012 (11.x) ta kolumna jest zawsze NULL.
__$seqval binary(10) Sekwencja operacji przedstawiona w dzienniku transakcji. Nie powinno się go używać do zamawiania. Zamiast tego użyj kolumny __$command_id .
__$Operacja int Identyfikuje operację języka manipulacji danymi (DML) związaną ze zmianą. Może być jednym z następujących elementów:

1 = usuń

2 = wstaw

3 = aktualizacja (stare wartości)

Dane kolumn mają wartości wierszowe przed wykonaniem instrukcji update.

4 = aktualizacja (nowe wartości)

Dane kolumn mają wartości wierszowe po wykonaniu instrukcji update.
__$update_mask varbinary(128) Maska bitowa oparta na kolumnach porządkowych tabeli zmian, identyfikujących te kolumny, które się zmieniły.
<Przechwycone kolumny tabeli źródłowej> varies Pozostałe kolumny w tabeli zmian to kolumny z tabeli źródłowej, które zostały zidentyfikowane jako przechwycone kolumny podczas tworzenia instancji przechwytu. Jeśli w liście przechwytanych kolumn nie zostały określone żadne kolumny, wszystkie kolumny w tabeli źródłowej są uwzględnione w tej tabeli.
__$command_id int Śledzi kolejność operacji w obrębie transakcji.

Uwagi

Kolumna __$command_id została wprowadzona w aktualizacji kumulatywnej w wersjach 2012–2016. Informacje o wersji i pobieraniu można znaleźć w artykule 3030352 KB na FIX: Tabela zmian jest nieprawidłowo uporządkowana dla zaktualizowanych wierszy po włączeniu przechwytywania danych zmian dla bazy danych Microsoft SQL Server. Więcej informacji można znaleźć w artykule CDC funkcjonalność może się zepsuć po aktualizacji do najnowszej wersji CU dla SQL Server 2012, 2014 i 2016.

Typowe dane przechwyconych kolumn

Przechwycone kolumny zawarte w tej tabeli mają ten sam typ danych i wartość co odpowiadające im kolumny źródłowe, z następującymi wyjątkami:

  • Kolumny znaczników czasu definiuje się jako binarne(8).

  • Kolumny tożsamościowe definiuje się jako int lub bigint.

Jednak wartości w tych kolumnach są takie same jak wartości w kolumnach źródłowych.

Duże typy danych obiektów

Kolumny typu danych: obraz,tekst i ntext zawsze otrzymują wartość NULL , gdy __$operacja = 1 lub __$operacja = 3. Kolumny typu danych varbinary(max),varchar(max) lub nvarchar(max) otrzymują wartość NULL , gdy __$operation = 3, chyba że kolumna zmieniła się podczas aktualizacji. Gdy __$operation = 1, te kolumny są przypisywane w momencie usunięcia. Kolumny obliczane w instancji przechwytu zawsze mają wartość NULL.

Domyślnie maksymalny rozmiar, jaki można dodać do przechwyconej kolumny w pojedynczym INSERT, UPDATE, WRITETEXT lub UPDATETEXT, wynosi 65 536 bajtów lub 64 KB. Aby zwiększyć ten rozmiar i wspierać większe dane LOB, użyj opcji konfiguracji serwera Konfiguruj maksymalny rozmiar tekstowego replu , aby określić większy maksymalny rozmiar. Więcej informacji można znaleźć w sekcji Konfiguruj maksymalną liczbę replik tekstowych w opcji konfiguracji serwera.

Modyfikacje języka definicji danych

Modyfikacje DDL w tabeli źródłowej, takie jak dodawanie lub usuwanie kolumn, są rejestrowane w tabeli cdc.ddl_history . Te zmiany nie są stosowane do tabeli zmian. Oznacza to, że definicja tabeli zmian pozostaje niezmienna. Podczas wstawiania wierszy do tabeli zmian, proces przechwytywania ignoruje te kolumny, które nie pojawiają się w liście przechwytywanych kolumn powiązanej z tabelą źródłową. Jeśli kolumna pojawi się w przechwyconej liście kolumn, która nie znajduje się już w tabeli źródłowych, kolumna otrzymuje wartość null.

Zmiana typu danych kolumny w tabeli źródłowej jest również zapisywana w tabeli cdc.ddl_history . Jednak ta zmiana zmienia definicję tabeli zmian. Typ danych przechwyconej kolumny w tabeli zmian jest modyfikowany, gdy proces rejestracji napotyka rekord logu zmiany DDL dokonanej w tabeli źródłowej.

Jeśli musisz zmodyfikować typ danych przechwyconej kolumny w tabeli źródłowej w sposób zmniejszający rozmiar tego typu, użyj następującej procedury, aby upewnić się, że odpowiednia kolumna w tabeli zmian może zostać pomyślnie zmodyfikowana.

  1. W tabeli źródłowej zaktualizuj wartości w kolumnie, którą ma się modyfikować, aby pasowały do planowanego rozmiaru typu danych. Na przykład, jeśli zmienisz typ danych z int na smallint, zaktualizuj wartości do rozmiaru mieszczącego się w zakresie smallint , od -32 768 do 32 767.

  2. W tabeli zmian wykonaj tę samą operację aktualizacji do odpowiadającej kolumny.

  3. Zmodyfikuj tabelę źródłową, określając nowy typ danych. Zmiana typu danych jest pomyślnie propagowana do tabeli zmian.

Modyfikacje języka manipulacji danymi

Gdy operacje wstawiania, aktualizacji i usuwania są wykonywane w tabeli źródłowej z włączoną zmianą danych, zapis tych operacji DML pojawia się w dzienniku transakcji bazy danych. Proces przechwytywania danych zmian pobiera informacje o tych zmianach z dziennika transakcji i dodaje do tabeli zmian jeden lub dwa wiersze, aby zarejestrować zmianę. Wpisy są dodawane do tabeli zmian w tej samej kolejności, w jakiej zostały zatwierdzone do tabeli źródłowej. Należy jednak pamiętać, że zatwierdzanie wpisów w tabeli zmian zazwyczaj musi być wykonywane na grupie zmian, a nie na każdym z nich.

Operacja wstawiania skutkuje dodaniem jednego wiersza do tabeli zmian; operacja usuwania skutkuje dodaniem jednego wiersza do tabeli zmian; jeśli SQL Server implementuje aktualizację jako "odroczoną aktualizację", czyli jako parę operacji usuwania i wstawiania, operacja aktualizacji skutkuje dodaniem dwóch wierszy do tabeli zmian: pierwszego wiersza odzwierciedlającego usunięcie zebranych danych, a drugiego odpowiadającego wstawieniu zaktualizowanych, przechwyconych danych; jeśli SQL Server nie zaimplementuje aktualizacji jako "odroczonej aktualizacji", operacja aktualizacji skutkuje dodaniem dwóch wierszy do tabeli zmian: pierwszego wiersza odzwierciedlającego zebrane dane przed aktualizacją oraz drugiego odzwierciedlającego zebrane dane po aktualizacji.

W wpisie tabeli zmian kolumna __$start_lsn służy do zapisywania LSN zatwierdzenia powiązanego ze zmianą w tabeli źródłowej, kolumna __$command_id służy do kolejności zmiany w transakcji, a kolumna __$operation służy do zapisu wykonanej operacji. Razem te kolumny metadanych mogą być użyte, aby zapewnić zachowanie kolejności zatwierdzeń zmian źródłowych. Ponieważ proces przechwytywania pobiera informacje o zmianach z dziennika transakcji, ważne jest, aby zauważyć, że wpisy w tabeli zmian nie pojawiają się synchronicznie z odpowiadającymi im zmianami w tabeli źródłowej. Zamiast tego odpowiadające zmiany pojawiają się asynchronicznie, po przetworzeniu odpowiednich wpisów zmian z dziennika transakcji przez proces rejestracji.

Dla operacji wstawiania i usuwania wszystkie bity w masce aktualizacji są ustawiane. W przypadku operacji aktualizacji maska aktualizacji zarówno w wierszach aktualizacji starego, jak i nowego będzie modyfikowana tak, aby odzwierciedlać kolumny, które zmieniły się podczas aktualizacji.

Zobacz też

sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)