Określanie, czy zmiana danych jest gotowy
W przepływ sterowania Integration Services pakiet, który wykonuje przyrostowe obciążenia, zmiana danych, drugie zadanie jest zapewnienie, że zmiana danych zaznaczonego interwału jest gotowy. Ten krok jest konieczny, ponieważ proces przechwytywania asynchronicznych może nie jeszcze mają przetworzenia wszystkich zmian do wybranego punktu końcowego.
Ostrzeżenie
Pierwszym zadaniem przepływ sterowania jest obliczyć punkty końcowe zmiany interwału.Aby uzyskać więcej informacji dotyczących tego zadania, zobacz Określanie interwału zmiana danych.Opis ogólny proces projektowania przepływ sterowania, zobacz Poprawę przyrostowe ładuje z przechwytywania danych zmian.
Aby zobaczyć pełną, typu end-to-end próbek, które demonstrują użycie zmiana przechwytywania danych w pakietach, zobacz Integration Services próbki na witrynie Codeplex.
Opis składników roztworu
Rozwiązanie opisane w tym temacie używa 4 Integration Services składniki:
Kontener dla pętli wielokrotnie dającą wyjście na wykonanie zadania SQL.
Zadanie wykonanie instrukcji SQL kwerendy tabele specjalny proces przechwytywania danych zmiana utrzymuje i następnie używa tych informacji do ustalenia, czy dane jest gotowy.
Składnik, który implementuje opóźnienia w przetwarzaniu, gdy dane nie jest gotowy.Może to być zadania skryptu lub zadanie wykonanie instrukcji SQL.
Opcjonalnie składnik raportów błędu lub przekroczenia limitu czasu, gdy zadanie wykonanie instrukcji SQL zwraca wartość wskazuje błąd lub timeout condition.
Te składniki zestaw lub odczytać wartości kilku zmiennych pakiet do sterowania przepływem wykonania wewnątrz pętli i później w pakiecie.
Aby zestaw pakiet zmiennych w górę
W Business Intelligence Development Studio, zmiennych okno Utwórz następujące zmienne:
Utwórz zmienną o typie danych integer do przechowywania wartości stanu zwróconego przez zadanie wykonanie instrukcji SQL.
W tym przykładzie użyto nazwy zmiennej DataReady, początkowa wartość 0.
Tworzenie zmiennej do przechowania okres czas opóźnienia podczas danych nie jest gotowy.Jeśli planujesz użyć zadania skryptu do zaimplementowania opóźnienie zmienną powinien mieć całkowitą typu danych Liczba całkowita.Planując zadania wykonanie instrukcja SQL za pomocą instrukcja WAITFOR zmienna powinny mieć typ danych ciąg zaakceptować wartości, takie jak "00: 00: 10".
W tym przykładzie użyto nazwy zmiennej DelaySeconds, z początkowa wartość 10.
Utwórz zmienną o typie danych integer do przechowywania bieżących iteracji pętli.
W tym przykładzie użyto nazwy zmiennej TimeoutCount, początkowa wartość 0.
Utwórz zmienną z typem danych integer, aby określić liczbę razy pętli należy przetestować danych przed zgłoszeniem timeout condition.
W tym przykładzie użyto nazwy zmiennej TimeoutCeiling, z początkowa wartość 20.
(Opcjonalnie) Utwórz zmienną o typie danych Liczba całkowita, używanego do wskazania pierwszego obciążenia Zmień dane.
W tym przykładzie używa nazwy zmiennej, IntervalID i kontroli tylko w przypadku wartości 0 oznacza ładowania początkowego.
Konfigurowanie dla kontenera pętli
Zestaw zmiennych kontener dla pętli jest pierwszy element do dodania.
Aby skonfigurować kontener dla pętli czekać aż do zmiany danych jest gotowy
Na Przepływ sterowania karcie SSIS Projektant dodać kontener dla pętli do sterowania przepływem.
Połącz zadania SQL wykonanie oblicza punkty końcowe interwał kontener dla pętli.
W Dla edytora pętli, zaznacz następujące opcje:
Dla InitExpression, wprowadź @DataReady = 0.
To wyrażenie ustawia wartość początkowa zmiennej pętli.
Dla EvalExpressionm, wprowadź @DataReady == 0.
Gdy to wyrażenie ma False, przekazuje wykonanie z pętli i uruchamia przyrostowe obciążenia.
Konfigurowanie wykonanie zadania SQL kwerendy o zmianę danych
Wewnątrz kontener dla pętli należy dodać zadanie wykonanie instrukcji SQL.Kwerendy tego zadania tabel, zmień dane proces przechwytywania zachowuje w bazie danych.Wynikiem tej kwerendy jest wartość stanu, który wskazuje, czy zmiana danych jest gotowy.
W poniższej tabela pierwsza kolumna zawiera wartości zwrócone przez kwerendę języka Transact-SQL próbki zadanie wykonanie instrukcji SQL.Druga kolumna pokazuje, jak inne składniki odpowiadają na te wartości.
Wartość zwracana |
Znaczenie |
Odpowiedź |
---|---|---|
0 |
Wskazuje, zmień dane nie jest gotowy. Brak rekordów przechwytywania danych zmiana później niż punkt końcowy zaznaczonego interwału. |
Kontynuuje wykonywanie ze składnikiem, który implementuje opóźnienia.Następnie sterowanie zwraca z kontener dla pętli kontynuuje sprawdzanie zadanie wykonanie instrukcji SQL, tak długo, jak wartość zwracana jest 0. |
1 |
Może wskazywać, zmień dane nie została przechwycona interwału pełną lub został usunięty.Jest to traktowane jako warunek błędu. Brak rekordów przechwytywania danych zmiana wcześniejszych niż punkt początkowy zaznaczonego interwału |
Kontynuuje wykonywanie z opcjonalnym składnikiem, który rejestruje błąd. |
2 |
Wskazuje, że dane są gotowe. Istnieją rekordy przechwytywania danych zmian, które wcześniej niż punkt początkowy i później niż punkt końcowy zaznaczonego interwału. |
Wykonanie przekazuje z kontener dla pętli i uruchamia przyrostowe obciążenia. |
3 |
Wskazuje ładowania początkowego wszystkie dostępne zmiany danych. Warunkowe logiki uzyskuje tę wartość z zmienna pakiet specjalnego, która jest używana tylko do tego celu. |
Wykonanie przekazuje z kontener dla pętli i uruchamia przyrostowe obciążenia. |
5 |
Wskazuje, że osiągnięto TimeoutCeiling. Pętli przetestowała danych określoną liczbę razy, a dane nadal nie jest dostępny.Bez tego testu lub podobne badania pakiet może być uruchamiane przez nieokreślony czas. |
Kontynuuje wykonywanie z opcjonalnym składnikiem, który loguje się limit czasu. |
Aby skonfigurować zadanie wykonanie instrukcji SQL kwerendy, czy zmiana danych jest gotowy
Wewnątrz kontener dla pętli dodać zadanie wykonanie instrukcji SQL.
W Uruchomić Edytor zadań SQL, na Ogólne strona, zaznacz następujące opcje:
Dla ResultSet, wybierz opcję pojedynczy wiersz.
Skonfiguruj prawidłowe połączenie źródłowa baza danych.
Dla SQLSourceType, wybierz opcję wprowadzania bezpośredniego.
Dla Instrukcja_sql, wprowadź następujące instrukcja języka SQL:
declare @DataReady int, @TimeoutCount int if not exists (select tran_end_time from cdc.lsn_time_mapping where tran_end_time > ? ) select @DataReady = 0 else if ? = 0 select @DataReady = 3 else if not exists (select tran_end_time from cdc.lsn_time_mapping where tran_end_time <= ? ) select @DataReady = 1 else select @DataReady = 2 select @TimeoutCount = ? if (@DataReady = 0) select @TimeoutCount = @TimeoutCount + 1 else select @TimeoutCount = 0 if (@TimeoutCount > ?) select @DataReady = 5 select @DataReady as DataReady, @TimeoutCount as TimeoutCount
Na Mapowanie parametr strona Wykonanie Edytor zadań SQL, sprawdź następujące mapowania:
Parametr 0 mapować zmiennej ExtractEndTime.
Parametr 1 mapować zmiennej IntervalID.
Parametr 2 mapować zmiennej ExtractStartTime.
Parametr 3 mapować zmiennej TimeoutCount.
Parametr 4 mapować zmiennej TimeoutCeiling.
Na Zestaw wyników strona Uruchomić Edytor zadań SQL, mapowanie wynik DataReady do zmiennej DataReady i TimeoutCount wynik do zmiennej TimeoutCount.
Oczekiwanie, aż zmiany danych jest gotowy
Jedną z kilku metod umożliwia wdrożenie opóźnienia podczas zmiany danych nie jest gotowy.Dwie następujące procedury ilustrują sposób użycia zadania skryptu lub wykonanie instrukcji SQL do wykonania opóźnienia.
Ostrzeżenie
Skrypt skompilowanych ponosi mniejszego nakładu pracy niż zadanie wykonanie instrukcji SQL.
Aby zaimplementować opóźnienia przy użyciu zadania skryptu
Wewnątrz kontener dla pętli dodać zadanie skryptu.
Połącz zadania wykonanie instrukcji SQL tej kwerendy, czy zmiana danych jest gotowy do nowego zadania skryptu.
Dla ograniczenie pierwszeństwa łączy do zadania skryptu, otwórz zadanie wykonanie instrukcji SQL ograniczenie pierwszeństwa edytora i wybierz następujące opcje:
Dla operacji oceny, wybierz opcję wyrażenie i ograniczenie.
Dla wartość, wybierz opcję Sukces.
Wartość ograniczenia Sukces odnosi się do sukcesu poprzedniego zadania.W tym przypadek powodzenia zadanie wykonanie instrukcji SQL.
Dla wyrażenie, wprowadź @DataReady == 0 && @TimeoutCount <= @TimeoutCeiling.
Wybierz operatora logicznego AND. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA,, jeśli nie jest jeszcze zaznaczona.
W Script Editor zadania, na skryptu strona, dla ReadOnlyVariables, wybierz opcję User::DelaySeconds zmienna typu Liczba całkowita z listy.
W Script Editor zadania, na skryptu strona, kliknij przycisk Edytowanie skryptu otworzyć środowiska programistycznego skryptu.
W procedurze głównej należy wprowadzić jeden z następujących wierszy kodu:
Jeśli programowaniu w języku C# wprowadź poniższy wiersz kodu:
System.Threading.Thread.Sleep((int)Dts.Variables["DelaySeconds"].Value * 1000);
- lub -
Jeśli są programowania w Visual Basic, wpisz następujący wiersz kodu:
System.Threading.Thread.Sleep(Ctype(Dts.Variables("DelaySeconds").Value, Integer) * 1000)
Ostrzeżenie
Thread.Sleep metoda oczekuje argument określony w milisekundach.
Pozostaw domyślną linię kodu, która zwraca DtsExecResult.Success z wykonanie script.
Zamknij środowiska programistycznego skryptu i Script Editor zadania.
Aby zaimplementować opóźnienia przy użyciu zadania wykonanie instrukcji SQL
Wewnątrz kontener dla pętli dodać zadanie wykonanie instrukcji SQL.
Połącz zadania wykonanie instrukcji SQL tej kwerendy, czy zmiana danych jest gotowy do nowego zadania wykonanie instrukcji SQL.
Dla ograniczenie pierwszeństwa łączy dwa zadania wykonanie instrukcji SQL, otwórz ograniczenie pierwszeństwa edytora i wybierz następujące opcje:
Dla operacji oceny, wybierz opcję wyrażenie i ograniczenie.
Dla wartość, wybierz opcję Sukces.
Wartość ograniczenia Sukces odnosi się do sukcesu poprzedniego zadania wykonanie instrukcji SQL.
Dla wyrażenie, wprowadź @DataReady == 0.
Wybierz operatora logicznego AND. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA,, jeśli nie jest jeszcze zaznaczona.
Wybór ten wymaga, że warunki, ograniczenia i wyrażenie, muszą być spełnione.
W Uruchomić Edytor zadań SQL, na Ogólne strona, zaznacz następujące opcje:
Dla ResultSet, wybierz opcję pojedynczy wiersz.
Skonfiguruj prawidłowe połączenie źródłowa baza danych.
Dla SQLSourceType, wybierz opcję wprowadzania bezpośredniego.
Dla Instrukcja_sql, wprowadź następujące instrukcja języka SQL:
WAITFOR DELAY ?
Na Mapowanie parametr strona edytora, mapować zmiennej DelaySeconds ciąg parametru 0.
Obsługa warunek błędu
Opcjonalnie można skonfigurować dodatkowe składnik wewnątrz pętli rejestrować błąd lub timeout condition:
Ten składnik można rejestrować błąd warunek, kiedy wartość zmiennej DataReady = 1.Ta wartość wskazuje, że nie ma danych dostępnych zmiany przed rozpoczęciem zaznaczonego interwału.
Ten składnik można także rejestrować timeout condition, kiedy zostanie osiągnięta wartość zmiennej TimeoutCeiling.Ta wartość wskazuje pętli przetestowała danych określoną liczbę razy, a dane nadal nie jest dostępny.Bez tego testu lub podobne badania pakiet może być uruchamiane przez nieokreślony czas.
Aby skonfigurować opcjonalne zadania skryptu logowania warunek błędu
Jeśli chcesz zgłosić błąd lub limitu czasu pisząc wiadomości w dzienniku Konfigurowanie rejestrowania pakiet.Aby uzyskać więcej informacji, zobacz Jak Włącz rejestrowanie w pakiecie.
Wewnątrz kontener dla pętli dodać zadanie skryptu.
Połącz zadania wykonanie instrukcji SQL tej kwerendy, czy zmiana danych jest gotowy do nowego zadania skryptu.
Dla ograniczenie pierwszeństwa łączy do zadania skryptu, otwórz zadanie wykonanie instrukcji SQL ograniczenie pierwszeństwa edytora i wybierz następujące opcje:
Dla operacji oceny, wybierz opcję wyrażenie i ograniczenie.
Dla wartość, wybierz opcję Sukces.
Wartość ograniczenia Sukces odnosi się do sukcesu poprzedniego zadania.W tym przypadek powodzenia zadanie wykonanie instrukcji SQL.
Dla wyrażenie, wprowadź @DataReady == 1 || @DataReady == 5.
Wybierz operatora logicznego AND. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA,, jeśli nie jest jeszcze zaznaczona.
Wybór ten wymaga, że warunki, ograniczenia i wyrażenie, muszą być spełnione.
W Script Editor zadania, na skryptu strona edytora, dla ReadOnlyVariables, wybierz opcję User::DataReady i User::ExtractStartTime z listy, aby udostępnić ich wartości do skryptu.
Jeśli chcesz dołączyć informacje z pewnych zmiennych systemowych (na przykład System::PackageName) w Dzienniku informacje także wybrać tych zmiennych.
W Script Editor zadania, na skryptu strona, kliknij przycisk Edytowanie skryptu otworzyć środowiska programistycznego skryptu.
W procedurze głównej, należy wprowadzić kod logowania, wywołując błąd Dts.Log metoda, lub aby wygenerować zdarzenie wywołując metoda Dts.Events interfejs.Informuje pakiet błędu przez Dts.TaskResult = Dts.Results.Failure.
Poniższy przykład pokazuje jak napisać wiadomość do dziennika.Aby uzyskać więcej informacji, zobacz Zadania skryptu logowania, Podnoszenie zdarzeń w zadania skryptu, i Zwracanie wyników z zadań skryptu.
' User variables. Dim dataReady As Integer = _ CType(Dts.Variables("DataReady").Value, Integer) Dim extractStartTime As Date = _ CType(Dts.Variables("ExtractStartTime").Value, DateTime) ' System variables. Dim packageName As String = _ Dts.Variables("PackageName").Value.ToString() Dim executionStartTime As Date = _ CType(Dts.Variables("StartTime").Value, DateTime) Dim eventMessage As New System.Text.StringBuilder() If dataReady = 1 OrElse dataReady = 5 Then If dataReady = 1 Then eventMessage.AppendLine("Start Time Error") Else eventMessage.AppendLine("Timeout Error") End If With eventMessage .Append("The package ") .Append(packageName) .Append(" started at ") .Append(executionStartTime.ToString()) .Append(" and ended at ") .AppendLine(DateTime.Now().ToString()) If dataReady = 1 Then .Append("The specified ExtractStartTime was ") .AppendLine(extractStartTime.ToString()) End If End With System.Windows.Forms.MessageBox.Show(eventMessage.ToString()) Dts.Log(eventMessage.ToString(), 0, Nothing) Dts.TaskResult = Dts.Results.Failure Else Dts.TaskResult = Dts.Results.Success End If
Zamknij środowiska programistycznego skryptu i Script Editor zadania.
Następny krok
Po ustaleniu, że zmiana danych jest gotowy, następnym krokiem jest przygotowanie do kwerendy danych zmian.
Następny temat:Przygotowywanie do kwerendy dla danych, zmienianie
|