Tworzenie funkcja do pobierania danych zmian
Po zakończeniu przepływ sterowania dla Integration Services pakiet, który wykonuje obciążenia przyrostowe zmiany danych, następnego zadania polega na utworzeniu funkcja zwracająca tabelę, pobiera dane zmiany. Trzeba utworzyć tę funkcję, co czas przed pierwszym obciążenia przyrostowych.
Uwaga
Tworzenie funkcja do pobierania danych jest drugi krok w procesie tworzenia pakiet, który wykonuje przyrostowe obciążenie zmiany zmiany danych.Aby uzyskać opis ogólny proces tworzenia tego pakiet zobacz Zwiększanie przyrostowa ładuje z Zmień przechwytywanie danych.
Aby wyświetlić pełną, typu end-to-end próbek, które wykazują stosowania zmian przechwytywania danych w pakietach, wyświetlanie Readme_Change Data Capture for Specified Interval Package Sample i Readme_Change Data Capture since Last Request Package Sample.
Uwagi dotyczące projektowania Zmień dane Przechwytywanie funkcje
W celu pobrania danych zmian, a urządzenie źródłowe składników w przepływie danych pakiet wymaga jednego z następujących funkcji kwerendy przechwytywania danych zmian:
CDC.fn_cdc_get_net_changes_<capture_instance> Dla tej kwerendy jeden wiersz dla każdej aktualizacji zwracane zawiera stan końcowy każdego zmienionego wiersza. W większości przypadków należy tylko danych zwróconych przez kwerendę o obroty netto.Aby uzyskać więcej informacji zobaczcdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
CDC.fn_cdc_get_all_changes_<capture_instance> Ta kwerenda zwraca wszystkie zmiany, które wystąpiły w każdym wierszu w przedziale przechwytywania. Aby uzyskać więcej informacji zobaczcdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).
Składnik urządzenie źródłowe następnie Trwa wyniki zwróconych przez funkcja i przekazuje je do przekształcenia niższego rzędu i miejsc docelowych, które dotyczą zmian danych obiekt docelowy.
Jednak Integration Services urządzenie źródłowe składnika nie można bezpośrednio wywołać zmiany funkcji przechwytywania danych. An Integration Services urządzenie źródłowe component requires metadane about the columns that the query returns. Zmiana funkcji przechwytywania danych nie zostanie zdefiniowana w kolumnach tabela ich wyników.W ten sposób te funkcje nie zwracają wystarczające metadane dla Integration Services urządzenie źródłowe składnika.
Zamiast tego należy użyć funkcja otoka wycenione tabela, ponieważ ten rodzaj funkcja jawnie definiuje kolumny tabela swoich danych wyjściowych w klauzula zwraca jej.To dokładniejsze definicje kolumn zawiera metadane Integration Services urządzenie źródłowe konieczne składnika. Należy utworzyć tę funkcja dla każdej tabela, dla której chcesz pobrać zmiany danych.
Istnieją dwie możliwości tworzenia funkcja otoka wycenione tabela, która wywołuje funkcja kwerendy przechwytywania danych zmian:
Można wywołać sys.sp_cdc_generate_wrapper_function systemu procedura przechowywana do tworzenia wycenione tabela funkcji.
Można napisać swoją własną funkcja zwracająca tabelę przy użyciu wytycznych i w przykładzie w tym temacie.
Wywołuje procedura przechowywana do Utwórz funkcja, wartości w tabela
To najszybszy i najłatwiejszy sposób tworzenia funkcji wycenione tabela należy do wywołania sys.sp_cdc_generate_wrapper_function systemu procedura przechowywana.Ta procedura przechowywana generuje skryptów do tworzenia otoki funkcje, które zostały zaprojektowane specjalnie do potrzeb Integration Services źródłowy składnik.
Important Note: |
|---|
The sys.sp_cdc_generate_wrapper_function system procedura przechowywana does not directly create the wrapper functions.Zamiast tego procedura przechowywana generuje skryptów CREATE dla funkcji otoki.Programista musi uruchamiać skrypty CREATE, procedura przechowywana generuje przed pakiet dodatkowe obciążenie może wywołać funkcji otoki. |
Aby zrozumieć, jak używać tego systemu procedura przechowywana, należy wiedzieć, procedurą funkcji, skrypty, jaki generuje procedury, i jakie otoka funkcje skryptów tworzenia.
Opis i za pomocą procedura przechowywana
The sys.sp_cdc_generate_wrapper_function system procedura przechowywana generates scripts to create wrapper functions for use by Integration Services packages.
Poniżej przedstawiono pierwszych kilka wierszy, definicja procedura przechowywana:
CREATE PROCEDURE sys.sp_cdc_generate_wrapper_function
(
@capture\_instance sysname = null
@closed\_high\_end\_point bit = 1,
@column\_list = null,
@update\_flag\_list = null
)
Wszystkie parametry procedura przechowywana są opcjonalne.Jeśli bez podawania wartości dla każdego z parametrów wywołania procedury przechowywanej, procedura przechowywana tworzy funkcji otoki dla wszystkich wystąpień przechwytywania, do których użytkownik ma dostęp.
Uwaga
Aby uzyskać więcej informacji na temat składni tej procedura przechowywana i jego parametry, zobacz sys.sp_cdc_generate_wrapper_function (Transact-SQL).
Procedura przechowywana generuje zawsze funkcja otoki, aby zwrócić wszystkie zmiany z każdego wystąpienie przechwytywania.Jeśli @supports\_net\_changes została ustawiona podczas tworzenia wystąpienie przechwytywania, procedura przechowywana generuje również funkcja otoki, aby zwrócić obroty netto z każdego wystąpienie przechwytywania stosuje.
Procedura przechowywana zwraca zestaw z dwiema kolumnami wyników:
Nazwa funkcja otoka wygenerowanych przez procedura przechowywana.Ta procedura przechowywana uzyskuje nazwę funkcja z nazwą wystąpienie przechwytywania.(Nazwa funkcja jest "fn_all_changes_", po których następuje nazwa wystąpienie przechwytywania.Prefiks używany dla funkcja obroty netto, jeśli jest tworzony, jest "fn_net_changes_").
Instrukcja CREATE funkcja otoki.
Opis i korzystanie ze skryptów, utworzona przez procedura przechowywana
Zwykle deweloper użyje instrukcja SQL INSERT... EXEC wywołać sys.sp_cdc_generate_wrapper_function procedura przechowywana, a następnie zapisz skryptów, które tworzy procedura przechowywana na tabela tymczasowa.Każdy skrypt może następnie być indywidualnie zaznaczone i uruchomić w celu utworzenia odpowiedniej funkcja otoki.Jednak programista może również używać jednego zestaw poleceń SQL na wykonywanie wszystkich skryptów CREATE, jak pokazano na następujący przykładowy kod:
create table #wrapper_functions
(function_name sysname, create_stmt nvarchar(max))
insert into #wrapper_functions
exec sys.sp_cdc_generate_wrapper_function
declare @stmt nvarchar(max)
declare #hfunctions cursor local fast_forward for
select create_stmt from #wrapper_functions
open #hfunctions
fetch #hfunctions into @stmt
while (@@fetch_status <> -1)
begin
exec sp_executesql @stmt
fetch #hfunctions into @stmt
end
close #hfunctions
deallocate #hfunctions
Opis i korzystania z funkcji utworzona przez procedura przechowywana
Systematycznie zaprezentuje osi czasu, zmiana przechwyconych danych, funkcje wygenerowanych otoki oczekiwanych, @end\_time Parametr dla jeden interwał będzie @start\_time Parametr dla kolejnych interwału. Kiedy następuje tej Konwencji, otoka wygenerowanych funkcji można wykonywać następujące zadania:
Mapowanie datę / czas wartości z wartościami LSN, które będą używane wewnętrznie.
Upewnij się, że dane nie zostanie utracony lub powtarzane.
Aby podczas badania dla wszystkich wierszy w tabela Zmiana prostsze, otoka wygenerowanych funkcji obsługuje następujące konwencje:
Jeśli parametr @ start_time ma wartość null, funkcje otoka użyć najniższej wartości LSN w przechwytywaniu wystąpienie jako dolne ograniczenie kwerendy.
Jeśli parametr @ end_time ma wartość null, funkcje otoka użyć najwyższej wartości LSN w przypadku przechwytywania jako górną granicę kwerendy.
Większość użytkowników powinna mieć możliwość używania otoka funkcje, które sys.sp_cdc_generate_wrapper_function systemowa procedura składowana tworzy bez żadnych modyfikacji.Jednak aby dostosować funkcje otoki, trzeba dostosować skrypty CREATE przed uruchomieniem skryptów.
Gdy pakiet wywołuje funkcji otoki, pakiet, musisz podać wartości parametrów trzy.Te trzy parametry są jak trzy parametry, że zmiana danych przechwytywać funkcji.Te trzy parametry są następujące:
Data początkowa / czas wartości i datę końcową / czas wartość dla przedziału czasu.Funkcje otoką za pomocą wartości data/godziny jako punkty końcowe interwału kwerendy, zmiana danych przechwytywania dwie wartości LSN użycia funkcji jako punkty końcowe.
Filtr wiersza.W przypadku zmiany danych i funkcji otoki przechwytywania funkcji, @row\_filter\_option parametr jest taka sama. Aby uzyskać więcej informacji zobacz cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL) i cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
Zestaw wyników zwróconych przez includesthe funkcji otoki, następujących danych:
Zmienić wszystkie żądane kolumny danych.
Kolumna o nazwie __CDC_OPERATION korzystającej z pole jednej lub dwóch znaków do identyfikowania operacji, który jest skojarzony z wierszem.Prawidłowe wartości dla tego pole są następujące: ‘ I ’ do wstawiania, ‘ D ’ o usunięcie, ‘ UO ’ dla aktualizacji stare wartości i ‘ UN ’ wartości nowych aktualizacji.
Aktualizacja flag, gdy zażąda ich) są wyświetlane jako kolumny bit po kodzie operacji i w kolejności określonej w @update\_flag\_list parametr. Te kolumna noszą nazwy za pomocą dołączania ‘ _uflag ’ do nazwy skojarzonej kolumnie.
Jeśli pakiet wywołuje funkcję otoka tej kwerendy dla wszystkich zmian, funkcja otoka zwraca także kolumny, __CDC_STARTLSN i __CDC_SEQVAL.Te dwie kolumny stają się kolumny pierwszego i drugiego, zestaw wyników.Funkcja otoka również sortuje zestaw wyników na podstawie tych dwóch kolumn.
Pisanie własnych funkcja wartość tabela
Można również użyć SQL Server Management Studio do pisania własnych funkcja otoka wycenione tabela, która wymaga zmiany danych przechwytywania funkcja kwerendy i przechowywać funkcja otoka wycenione tabela w SQL Server. Aby uzyskać więcej informacji na temat tworzenia funkcja języka Transact-SQL zobacz CREATE funkcja języka Transact-SQL).
W poniższym przykładzie określa funkcja zwracająca tabelę, pobiera zmian z tabela Nabywca zmianę określonego interwału.Ta funkcja zastosowań zmiany danych przechwytywania działa mapowania datetime wartości na korzystanie z tabel zmiany wartości liczby (LSN) sekwencji dzienników binarnych. Ta funkcja obsługuje także kilka warunków specjalnych:
Kiedy jest przekazywana wartość null dla początkowego czas, funkcja ta używa tak szybko, jak dostępne wartości.
Gdy wartość null jest przekazywany do zakończenia czas, funkcja ta używa najnowszych dostępnych wartości.
Kiedy LSN początkowej jest równa LSN końcowy, który zazwyczaj wskazuje, że nie ma żadnych rekordów dla wybranego przedziału, kończy działanie tej funkcja.
Przykład funkcja wartość Tabela, która bada Zmień dane
CREATE function CDCSample.uf_Customer (
@start_time datetime
,@end_time datetime
)
returns @Customer table (
CustomerID int
,TerritoryID int
,CustomerType nchar(1)
,rowguid uniqueidentifier
,ModifiedDate datetime
,CDC_OPERATION varchar(1)
) as
begin
declare @from_lsn binary(10), @to_lsn binary(10)
if (@start_time is null)
select @from_lsn = sys.fn_cdc_get_min_lsn('Customer')
else
select @from_lsn = sys.fn_cdc_increment_lsn(sys.fn_cdc_map_time_to_lsn('largest less than or equal',@start_time))
if (@end_time is null)
select @to_lsn = sys.fn_cdc_get_max_lsn()
else
select @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal',@end_time)
if (@from_lsn = sys.fn_cdc_increment_lsn(@to_lsn))
return
-- Query for change data
insert into @Customer
select
CustomerID,
TerritoryID,
CustomerType,
rowguid,
ModifiedDate,
case __$operation
when 1 then 'D'
when 2 then 'I'
when 4 then 'U'
else null
end as CDC_OPERATION
from
cdc.fn_cdc_get_net_changes_Customer(@from_lsn, @to_lsn, 'all')
return
end
go
Trwa pobieranie dodatkowe metadane z danymi, zmienianie
Mimo że utworzyć użytkownika funkcja zwracająca tabelę pokazano tylko starsze zastosowań Operacja $ __ kolumnieCDC.fn_cdc_get_net_changes_<capture_instance> funkcja zwraca cztery kolumna metadane dla każdego wiersza zmiany. Chcąc użyć tych wartości w sieci przepływ danych, można przywrócić je jako dodatkowe kolumny z funkcja otoka wycenione tabela.
Nazwa kolumna |
Typ danych |
Description |
|---|---|---|
__ $ start_lsn |
binary(10) |
LSN skojarzonych z transakcją zatwierdzanie zmiany. Wszystkie zmiany w tej samej transakcji współużytkowanie tej samej transakcji LSN.Na przykład, jeśli operację aktualizacji urządzenie źródłowe tabela modyfikuje dwóch różnych wierszy, w tabela Zmiana będzie zawierał cztery wiersze (dwa z stare wartości) i dwa nowe wartości, każda z tą samą __ $ start_lsn wartość. |
__ $ seqval |
binary(10) |
Sekwencja wartość, która jest używana do zamówienia zmiany wiersza w transakcji. |
Operacja $ __ |
int |
Operacja języka (DML) manipulacji dane związane ze zmianą.Może być jedną z następujących czynności: 1 = delete 2 = wstawiania 3 = aktualizacji (wartości przed wykonaniem operacji aktualizacji.) 4 = aktualizacji (wartości po wykonaniu operacji aktualizacji.) |
__ $ update_mask |
varbinary(128) |
Maskę bitową, która jest oparta na liczby porządkowe kolumna tabela Zmiana identyfikowanie tych kolumn, które zmieniono.Wartość ta może sprawdzić, jeśli użytkownik ma do określenia kolumn, które uległy zmianie. |
<przechwycone urządzenie źródłowe kolumn tabela> |
zmienia się |
Pozostałe kolumny zwróconych przez funkcja są kolumny z urządzenie źródłowe tabela, które zostały zidentyfikowane jako kolumny przechwyconych podczas tworzenia wystąpienie przechwytywania.W przypadku, gdy żadne kolumna pierwotnie została określona na liście kolumn przechwycone, zwracane są wszystkie kolumna w tabela źródłowej. |
Aby uzyskać więcej informacji zobaczcdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
Następny krok
Po utworzeniu funkcja wycenione tabela, która wykonuje kwerendę w przypadku zmiany danych, następnym krokiem jest uruchomienie projektowanie przepływ danych w pakiecie.
Następny temat:Trwa pobieranie i opis danych zmian
|
Important Note:
Konfiguracja w aktualizacji z usług integracja Services pobytu