Udostępnij za pośrednictwem


Za pomocą zmian danych

Zmiana danych jest udostępniona zmienić konsumentów przechwytywania danych za pomocą funkcji wycenione tabela (TVFs).Wszystkie kwerendy z tych funkcji wymaga dwa parametry do zdefiniowania zakres z dziennika sekwencji numerów (LSNs), które są uwzględniane podczas tworzenia zestaw wyników zwracanych.Zarówno górnych i dolnych LSN wartości, które powiązane interwału są uważane za mają zostać uwzględnione w czasie.

Niektóre funkcje są dostarczane mogą pomóc w ustaleniu odpowiednich wartości LSN do użycia w TVF kwerendy.Funkcja sys.fn_cdc_get_min_lsn zwraca najmniejszą LSN, która jest skojarzona z interwału wystąpienie przechwytywania.Okres ważności jest przedział czas, dla których zmiany jest aktualnie dostępna do jego wystąpienia przechwytywania danych.Funkcja sys.fn_cdc_get_max_lsn zwraca największą LSN w danym okresie ważności.Funkcje sys.fn_cdc_map_time_to_lsn and sys.fn_cdc_map_lsn_to_time są dostępne umieścić LSN wartości na osi czasu konwencjonalnych.Ze względu na zmiany przechwytywania danych używa kwerendy zamknięte w odstępach czasu, czasami konieczne jest do generowania następna wartość LSN w kolejności, aby zapewnić, że zmiany nie są zduplikowane w oknach kolejne kwerendy.Funkcje sys.fn_cdc_increment_lsn and sys.fn_cdc_decrement_lsn są przydatne, gdy wymagana jest korekta przyrostowe wartość LSN.

Sprawdzanie poprawności granice LSN

Firma Microsoft zaleca, aby sprawdzanie poprawności granice LSN, które mają zostać użyte w kwerendzie TVF przed ich użyciem.Zerowe punkty końcowe lub punktów końcowych, które znajdą się poza interwału, w przypadku przechwytywania wymusi błąd zwracaną przez zmianę przechwytywania danych TVF.

Na przykład następujący komunikat o błędzie jest zwracana dla kwerendy dla wszystkich zmian, gdy parametr, który jest używany do definiowania interwał kwerendy jest nieprawidłowy lub jest poza zakresem lub opcja wiersz filtru jest nieprawidłowa.

Msg 313, poziom 16 Państwo 3, wiersz 1

Niewystarczająca liczba argumentów były dostarczane do cdc.fn_cdc_get_all_changes_ procedury lub funkcja...

Zwrócony odpowiednich dla net changes kwerendy jest następująca:

Msg 313, poziom 16 Państwo 3, wiersz 1

Niewystarczająca liczba argumentów były dostarczane do cdc.fn_cdc_get_net_changes_ procedury lub funkcja...

Uwaga

Ustalono, że wiadomości dla 313 komunikaty wprowadza w błąd i nie przekazywać rzeczywiste przyczynę błędu.To użycie nieodpowiednich wynika z niemożność podnieść jawny błąd z wewnątrz TVF.Niemniej jednak wartość zwracać błąd nieznany, jeśli niedokładne, uznano preferowanym do zwracania po prostu wynik puste.zestaw wyników pusta nie byłoby różni się od prawidłowej kwerendy zwracać żadnych zmian.

Awarie autoryzacja będzie zwracać błędy podczas badania dla wszystkich zmian, jak pokazano:

Msg 229, poziom 14 Państwo 5, wiersz 1

Uprawnienie SELECT odmówiono dla obiektu „ fn_cdc_get_all_changes_...", bazy danych 'MyDB' schemat"cdc".

To samo dotyczy kwerendy dla obroty netto:

Msg 229, poziom 14 Państwo 5, wiersz 1

Odmówiono uprawnienia SELECT na fn_cdc_get_net_changes_ obiektu w... ", baza danych 'MyDB", 'cdc' schematu.

Zmiany netto enumerate CATCH TRY Using dla pokaz przechwycić te znane błędy TVF szablonu i zwracają ważniejszej informacji na temat błędu.

Uwaga

 Aby zlokalizować szablony przechwytywania zmiany danych w programie SQL Server Management Studio na Widok menu kliknijEksplorator szablonów, expand Program SQL Server szablony a następnie rozwiń Zmienianie przechwytywanie danych folder.

Funkcje kwerendy

W zależności od cech urządzenie źródłowe tabela śledzone i sposób, w którym jego wystąpienie przechwytywania jest skonfigurowane, jeden lub dwa TVFs dla kwerendy zmiany danych są generowane.

  • Funkcja CDC.fn_cdc_get_all_changes_<capture_instance> Zwraca wszystkie zmiany, jakie wystąpiły podczas określonego interwału. Ta funkcja zawsze jest generowany.Wpisy są zawsze zwracane posortowany, najpierw według zatwierdzanie transakcji LSN zmiany, a następnie za pomocą wartości, które sekwencje zmian w jego transakcji.W zależności od wybranego wiersza filtru opcji z końcowym wiersza jest zwracany przy aktualizacji (wiersz filtru opcja "all") lub zwracanych wartości nowych i starych przy aktualizacji (filtr wiersza opcja "wszystkich aktualizacji stare" „).

  • Funkcja CDC.fn_cdc_get_net_changes_<capture_instance> jest generowany, gdy parametr @ supports_net_changes jest ustawiona na 1 podczas urządzenie źródłowe tabeli jest włączona.

    Uwaga

     Ta opcja jest obsługiwana tylko w tabela źródłowej ma zdefiniowany klucz podstawowy lub parametr @ index_name został użyty do identyfikacji indeks unikatowy.

    The netchanges function returns one change per modified source table row.Jeśli więcej niż jedną zmianę jest rejestrowane dla wiersza w określonym przedziale, wartości kolumna będą odzwierciedlać końcowe zawartość wiersza.Aby prawidłowo zidentyfikować operacji, która jest niezbędna do aktualizowania środowiska docelowego, the TVF należy wziąć pod uwagę zarówno początkowy operacji w wierszu, w przedziale, jak i końcowe operacji w wierszu.Jeśli określono opcję Filtr wiersza 'all', operacje, które są zwracane przez net changes kwerendy będą albo być wstawiania, usuwania lub aktualizacji (nowe wartości). Opcja zawsze zwraca maski aktualizacji jako wartość null, ponieważ koszt skojarzony z przetwarzania danych agregacja maskę.Jeśli wymagana jest maska agregacja, który odzwierciedla wszystkie zmiany wprowadzone w wierszu, użyj opcji 'all z maską'.Jeśli przetwarzanie niższego rzędu nie wymaga aktualizacji, należy odróżnić i wstawia, opcja 'all z korespondencji seryjnej'.W tym przypadek wartość operacji zajmie tylko na dwóch wartości: 1 do usunięcia i 5 dla operacji, która może być wstawienia lub aktualizacji. Opcja ta eliminuje dodatkowego przetwarzania potrzebne do określenia, czy pochodne operacji powinna być wstawienia lub aktualizacji i może zwiększyć wydajność kwerendy podczas tego zróżnicowania nie jest konieczne.

Maski aktualizacja, która jest zwracana przez funkcja kwerendy jest reprezentacją compact identyfikujący wszystkich kolumn, które uległy zmianie w wiersz zmiany danych.Zazwyczaj informacje te są tylko wymagane dla mały podzbiór przechwyconych kolumn.Funkcje są dostępne w wyodrębnianie informacji z maski w formularzu, który jest bardziej bezpośrednio używany przez aplikacje.Funkcja sys.fn_cdc_get_column_ordinal zwraca pozycję porządkową nazwanej kolumna dla danego przechwytywania wystąpienie, dlatego funkcja sys.fn_cdc_is_bit_set zwraca parzystość bit w masce pod warunkiem, że oparte na liczebniki, która została przekazana w wywołaniu funkcji.Te dwie funkcje umożliwiają ze sobą informacji z maski aktualizacji wydajnie być wyodrębniane i zwracane z żądanie zmiany danych.Znaleźć szablon wyliczanie sieci zmiany za pomocą wszystko z maska dla pokaz w jaki sposób te funkcje są używane.

Scenariusze funkcja kwerendy

W poniższych sekcjach opisano typowe scenariusze podczas badania zmiany danych przechwytywania danych przy użyciu cdc.fn_cdc_get_all_changes_ funkcje kwerendy<capture_instance> i cdc.fn_cdc_get_net_changes_<capture_instance>.

Wykonywanie kwerendy dla wszystkich zmian okresu ważności wystąpienie przechwytywania

Najbardziej proste żądanie zmiany danych jest taka, która zwraca wszystkie bieżące zmiany w okresie ważności instancję przechwytywania danych.Aby to żądanie, należy najpierw określić dolnymi i górnymi granicami LSN okres ważności.Następnie należy użyć tych wartości do określenia parametrów @ from_lsn i @ to_lsn przekazany do cdc.fn_cdc_get_all_changes_ funkcja kwerendy<capture_instance> lub cdc.fn_cdc_get_net_changes_<capture_instance>. Należy użyć funkcja sys.fn_cdc_get_min_lsn uzyskanie dolną granicą i sys.fn_cdc_get_max_lsn uzyskanie górny powiązane.Zobacz szablonu wylicza wszystkie zmiany dotyczące zakres ważny przykładowy kod do kwerendy dla wszystkich bieżących zmian ważne przy użyciu cdc.fn_cdc_get_all_changes_ funkcja kwerendy<capture_instance>. Znaleźć szablon wyliczanie sieci zmiany dotyczące prawidłowy zakres dla podobnych przykładem przy użyciu funkcja cdc.fn_cdc_get_net_changes_<capture_instance>.

Wykonywanie kwerendy dla wszystkich nowych zmian od czasu ostatniego zestaw zmian

Do typowych zastosowań kwerendy dla danych zmiana będzie procesem ciągłym, tworzenie żądań okresowych wszystkie zmiany, które wystąpiły od ostatniego żądania.Dla takiej kwerendy można użyć funkcja sys.fn_cdc_increment_lsn do uzyskania niższa związane z bieżącej kwerendy z górną granicę poprzedniej kwerendy.Metoda taka daje pewność, że nie wierszy są powtarzane, ponieważ interwał kwerendy jest zawsze traktowane jako interwał zamkniętym gdzie obu end-points są uwzględnione w danym okresie.Następnie należy użyć funkcja sys.fn_cdc_get_max_lsn uzyskania wysokiej punktu końcowego dla nowego interwału żądania.Patrz szablon wylicza wszystkie zmiany od żądania poprzedni przykładowy kod systematycznie przenieść okno kwerendy, aby uzyskać wszystkie zmiany od ostatniego żądania.

Wykonywanie kwerendy dla wszystkich nowych zmian w górę do teraz

Typowe ograniczenia, które znajduje się na zmiany, zwracana przez funkcja kwerendy ma zawierać jedynie zmian wystąpił między poprzedniego żądania do bieżącej data i czas.Dla tej kwerendy należy zastosować sys.fn_cdc_increment_lsn funkcja użytej w poprzednim żądaniu do określenia dolną granicą wartości @ from_lsn.Ponieważ górna granica przedziału czas jest wyrażany jako określonego punktu w czasie, to należy przekonwertować na wartość LSN zanim będzie można używać funkcja kwerendy.Przed wartością typu Data/Godzina mogą być konwertowane na odpowiadające im wartości LSN, należy się upewnić, że proces przechwytywania jest przetwarzane wszystkie zmiany, które zostały zatwierdzone przez określony górną granicą.Jest to wymagane, aby zapewnić, że dostosowywanego zmiany mają zostały propagowane do tabela zmiany.Jednym ze sposobów na sprawdzenie tego jest struktura pętli oczekiwania, która okresowo sprawdza, jeśli bieżący lsn maksymalną zatwierdzanie zarejestrowanych dla dowolnej tabela bazy danych zmian przekracza Godzina zakończenia żądany interwał żądania.

Po Opóźnienie pętli weryfikuje proces przechwytywania jest już przetwarzane wszystkie wpisy dziennika odpowiednie, należy użyć funkcja sys.fn_cdc_map_time_to_lsn , aby określić nowy punkt końcowy wysokiej, wyrażona jako wartość LSN.Aby upewnić się, że pobierane są wszystkie wpisy, które zostały zatwierdzone przez określony czas, wywołanie funkcja sys.fn_cdc_map_time_to_lsn i użyj opcji "największą mniejszą niż lub równe".

Uwaga

W okresach braku aktywności jest fikcyjny wpis jest dodawany do cdc.lsn_time_mapping tabela, aby oznaczyć fakt, że proces przechwytywania przetworzonych zmian do danego zatwierdzanie czas.Zapobiega to wyświetlaniu spada proces przechwytywania tyłu, gdy są po prostu nie ostatnie zmiany procesu.

Dane zmian w szablonie wylicza wszystkie zmiany w górę do teraz pokazano, jak użyć poprzednich strategii dla kwerendy.

Dodawanie raz zatwierdzanie do wszystkie wynik zmiany zestaw

Czas zatwierdzeń każdej transakcji ze skojarzoną z nią pozycję w bazie danych tabela zmian jest dostępne w tabela CDC.lsn_time_mapping.Dołączając wartość start_lsn $ __ zwracana w żądaniu dla wszystkich zmian z wartością start_lsn cdc.lsn_time_mapping wpisu tabela, można zwrócić tran_end_time wraz z danymi zmiany do sygnatury czas zatwierdzenie transakcji na zmianę urządzenie źródłowe.Dołącz zatwierdzanie czas to wszystkie zmiany szablonu zestaw wyników ilustruje sposób wykonania tego łączyć.

Przyłączanie się do zmiany danych z innych danych z tej samej transakcji

Czasami warto dołączyć zmiany danych z innych informacji zebranych o transakcji, po jego zatwierdzeniu w źródle.kolumna tran_begin_lsn cdc.lsn_time_mapping tabela podano informacje potrzebne do wykonywania takiego łączyć.Gdy wystąpi aktualizacji urządzenie źródłowe, wartość database_transaction_begin_lsn z widoku dynamicznych systemu sys.dm_tran_database_transactions musi być zapisany wraz z innymi informacjami mają zostać połączone z danymi zmiany.Umożliwia porównanie wartości database_transaction_begin_lsn i tran_begin_lsn fn_convertnumericlsntobinary funkcja.Kod, który chcesz utworzyć ta funkcja jest dostępna w fn_convertnumericlsntobinary funkcji tworzenia szablonu.Szablon zwrotu wszystkie zmiany z danej tran_begin_lsn pokazuje, jak dokonać łączyć.

Wykonywanie kwerendy za pomocą funkcji otoki daty/godziny

Scenariusz Typowa aplikacja do wykonywania kwerend na zmianę danych jest okresowo żądania zmiany danych przy użyciu przesuwania okna rozpoczynającą się wartości typu Data/Godzina.Dla tej klasy konsumentów przechwytywania danych zmiana zawiera procedura przechowywana sys.sp_cdc_generate_wrapper_function generuje skryptów, aby tworzyć funkcje niestandardowe otoki dla funkcji kwerendy przechwytywania danych zmian.Te niestandardowe otoki umożliwiają wyrażane jako parę daty/godziny interwału kwerendy.

Opcje telefoniczną dla procedura przechowywana umożliwiają otok do wygenerowania dla wszystkich wystąpień przechwytywania, obiekt wywołujący ma dostęp do lub wystąpienie określonego przechwytywania.Obsługiwane opcje obejmują także możliwość określenia, czy wysokiej punktu końcowego interwał przechwytywania powinny być otwarte lub zamknięte, który z dostępnych kolumn przechwyconych powinny być włączone do zestaw wyników i których dołączone kolumny powinny mieć skojarzone flagi aktualizacji.Procedura zwraca zestaw z dwiema kolumnami wyników: Nazwa wygenerowanych funkcja, która jest derivable od nazwy instancji przechwytywania, a instrukcja tworzenia procedura przechowywana otoki. Funkcja zawijanie wszystkie zmiany kwerendy zawsze jest generowany.Jeśli parametr @ supports_net_changes została ustawiona podczas tworzenia wystąpienie przechwytywania, generowany jest również funkcja zawijanie Funkcja Obroty netto.

Jest zadaniem projektanta aplikacji na wywoływanie procedura przechowywana generowania skryptu Generuj instrukcje tworzenia otoki przechowywane procedury i wykonać skryptów tworzenia Wynikowe, tworzyć funkcje.To nie jest wykonywana automatycznie podczas tworzenia wystąpienie przechwytywania.

Daty/godziny otoki będące własnością użytkownika i nie są tworzone w domyślnego schematu obiektu wywołującego.Funkcja wygenerowanych nadaje się bez konieczności ich modyfikacji dla większości użytkowników.Jednak dalszych dostosowań zawsze dotyczą wygenerowany skrypt przed do tworzenia funkcja.

Nazwa funkcja, która ma być zawijany wszystkie kwerendy zmian jest fn_all_changes_, po których następuje nazwa wystąpienie przechwytywania.Prefiks używany dla otoka obroty netto jest fn_net_changes_.Obie funkcje podjąć trzy argumenty, podobnie jak ich przechwytywania danych skojarzone zmiany czy TVFs.Interwał kwerendy dla otoki jest jednak ograniczone przez dwie daty/godziny wartości zamiast niż przez dwie wartości LSN.Parametr @ row_filter_option dla obu zestawów funkcji są takie same.

Funkcje wygenerowanych otoki obsługę systematycznie chodzenie osi czasu przechwytywania danych zmiana następującej konwencji: Oczekuje się, parametr @ end_time poprzedniego interwału było wykorzystać jako parametr @ start_time kolejnych interwału. Funkcja otoki Trwa opieki mapowanie wartości typu Data/Godzina do wartości LSN i zapewnienie, że dane nie zostanie utracony lub powtarzane, jeśli ta Konwencja jest zakończony.

Mogą być generowane otok do obsługi zamkniętego górną granicą lub otwarte górna granica w oknie kwerendy.Oznacza to obiekt wywołujący można określić, czy wpisy o czas zatwierdzeń równa górnej granicy interwału wyodrębniania mają zostać uwzględnione w czasie.Domyślnie górna granica jest włączone.

Podczas generowanej kwerendy TVFs się nie powieść, jeśli podana wartość null dla wartości @ from_lsn lub wartość @ to_lsn, funkcje otoka typu Data/Godzina używają null zezwalająca otoki typu Data/Godzina przywrócić wszystkie bieżące zmiany.Oznacza to czy wartości null są przekazywane jako niski punktu końcowego w oknie kwerendy do otoka typu Data/Godzina, niski punktu końcowego wystąpienie przechwytywania interwału jest używane przez podstawowej instrukcja SELECT zostanie zastosowany do kwerendy TVF.Podobnie jeśli null jest przekazywana jako wysoki punktu końcowego w oknie kwerendy, wysoki punktu końcowego wystąpienie przechwytywania interwału jest używana podczas wybierania z kwerendy TVF.

Zestaw wyników zwróconych przez funkcja otoka zawiera żądane kolumna, następuje kolumnie operacji recoded jako jeden lub dwa znaki do identyfikowania operacji, który jest skojarzony z wierszem.Jeśli zażądano aktualizacji flag, są wyświetlane jako kolumny bit po kodzie operacji w kolejności określonej przez parametr @ update_flag_list.Aby uzyskać informacje na temat wywoływania opcji dostosowywania otoki wygenerowanych typu Data/Godzina zobacz sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Szablon wystąpień otoki TVF za pomocą aktualizacji flagi opisano dostosowywanie funkcja wygenerowanych otoka dołączyć flagi aktualizacji w określonej kolumnie do zestaw wyników zwróconych przez kwerendę obroty netto.Szablon TVFs wystąpień CDC otoki dla schematu przedstawiono sposób tworzenia wystąpienia otoki daty/godziny dla TVFs kwerendy dla wszystkich wystąpień przechwytywania utworzone dla urządzenie źródłowe tabel w schemacie bazy danych.

Na przykład, w którym używa kwerendy zmiany danych, zobacz temat szablonu Pobierz sieci zmiany za pomocą otoki za pomocą aktualizacji flagi otoka typu Data/Godzina.Ten szablon pokazuje, jak dla obroty netto z funkcją otoka kwerendy, gdy otoka jest skonfigurowany tak, aby zwrócić flagi aktualizacji.Należy zauważyć, że opcja filtrowania wierszy "wszystko za pomocą maski" jest wymagane dla podstawowych funkcja kwerendy powinien zwrócić maski niezerowe aktualizacji po aktualizacji.Wartości Null są przekazywane do obu dolnymi i górnymi daty/godziny interwału granice do sygnalizowania funkcja do użycia punkt końcowy niski i wysoki punkt końcowy okres ważności dla wystąpienie przechwytywania, po wykonaniu podstawowej LSN podstawie kwerendy.Zwraca jeden wiersz dla każdej modyfikacji urządzenie źródłowe wiersz, który wystąpił podczas wystąpienie przechwytywania prawidłowego zakres.

Za pomocą funkcji daty/godziny otoki do przejścia między wystąpienia przechwytywania

Przechwytywanie danych zmiana obsługuje maksymalnie dwa wystąpienia przechwytywania tabela pojedyncze urządzenie źródłowe śledzone.Główne korzystanie z tej funkcji jest do przejścia między wiele wystąpień przechwytywania podczas zmiany języka (DDL) definicja danych do tabela źródłowej rozwinąć zestaw dostępnych kolumn do śledzenia.Przechodzi do nowego wystąpienie przechwytywania, jednym ze sposobów ochrony przed zmianami w nazwach podstawowe funkcje kwerend wyższych poziomów aplikacji po użyć funkcja otoki, aby otoczyć odpowiedniego wywołania.Następnie upewnij się, że nazwa funkcja otoka pozostaje bez zmian.Po przełączniku występuje stare funkcja otoki można zostanie usunięty, a nowy plik o tej samej nazwie utworzone odwołania do tej nowej funkcja kwerendy.Modyfikując pierwszego wygenerowany skrypt w celu utworzenia funkcja otoka o takiej samej nazwie, można wprowadzić przełącznik nową instancję przechwytywania nie ma wpływu na wyższych warstw aplikacji.

See Also

Other Resources