Określanie, czy zmiany są gotowe

W przepływu sterowania Integration Services pakiet, który wykonuje przyrostowe obciążenie zmiany danych, drugie zadanie upewnij się, że zmiana danych dla zaznaczonego interwału jest gotowy. Ten krok jest konieczny, ponieważ proces przechwytywania asynchronicznego może nie jeszcze zostały przetworzone wszystkie zmiany, aż do wybranego punktu końcowego.

Uwaga

Pierwsze zadanie dla przepływ sterowania jest obliczyć punkty końcowe, interwału zmiany.Aby uzyskać więcej informacji na temat tego zadania Zobacz Specifying an Interval of Change Data. Aby uzyskać opis całego procesu projektowania przepływ sterowania 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.

Opis elementów rozwiązania

Rozwiązanie opisane w tym temacie używa 4 Integration Services składniki:

  • Kontener dla pętli wielokrotnie dającą wyniki wykonać zadania programu SQL.

  • Zadania programu wykonać instrukcji SQL, który wykonuje kwerendę tabel specjalny proces przechwytywania danych zmiana obsługuje i wykorzystuje te informacje do ustalenia, czy dane jest gotowy.

  • Składnik, który implementuje opóźnienia w przetwarzania danych nie jest gotowy.Może to być skrypt zadania lub zadania programu wykonać instrukcji SQL.

  • Opcjonalnie składnik, który raportuje błąd lub limit czasu, gdy zadanie wykonać instrukcji SQL zwraca wartość wskazująca błąd lub warunku limitu czasu.

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.

Do definiowania zmiennych pakiet

  • W Business Intelligence Development Studio, w Zmienne okna, utwórz następujące zmienne:

    1. Utwórz zmienną całkowitą typu danych do przechowywania wartości stanu zwróconego przez zadanie wykonać instrukcji SQL.

      W tym przykładzie użyto nazwy zmiennej DataReady, o wartości początkowej równej 0.

    2. Tworzenie zmiennych do przechowywania okres opóźnienia podczas danych nie jest gotowy.Jeśli planujesz użyć zadania skryptu do zaimplementowania opóźnienie, zmienna powinna mieć całkowitą liczbę całkowitą typu danych.Jeśli planowane jest użycie zadania programu wykonać instrukcja SQL za pomocą instrukcja WAITFOR, zmienna powinna mieć typie danych ciąg akceptuje wartości, na przykład "00: 00: 10".

      W tym przykładzie użyto nazwy zmiennej DelaySeconds, początkowa wartość 10.

    3. Utwórz zmienną typu danych Liczba całkowita do przechowywania bieżących iteracji pętli.

      W tym przykładzie użyto nazwy zmiennej TimeoutCount, o wartości początkowej równej 0.

    4. Utwórz zmienną z typem danych liczbę całkowitą określającą, ile razy należy przetestować pętli danych przed raportowania stanu limitu czasu.

      W tym przykładzie użyto nazwy zmiennej TimeoutCeiling, początkowa wartość 20.

    5. (Opcjonalnie) Utwórz zmienną o typie danych Liczba całkowita, używanych do wskazania pierwszego ładowania zmiany danych.

      W tym przykładzie nazwa zmiennej, IntervalID i kontroli tylko w przypadku wartości 0 oznacza wstępnego ładowania.

Konfigurowanie dla kontener pętli

Zestaw zmiennych kontener dla pętli jest pierwszy element do dodania.

Aby skonfigurować kontener pętli for czekać do momentu zmiany danych jest gotowy

  1. Na Przepływ sterowania Karta SSIS Projektant, dodać przepływ sterowania kontener pętli for.

  2. Połącz zadania SQL wykonać oblicza punkty końcowe interwał w kontenerze pętli for.

  3. W W edytorze pętli, zaznacz następujące opcje:

    1. Dla InitExpression, enter @DataReady = 0.

      To wyrażenie ustawia jako wartość początkowa zmiennej pętli.

    2. Dla EvalExpressionm, enter @DataReady == 0.

      Gdy to wyrażenie jest oceniane jako Fałszywe, wykonanie przekazuje z pętli i rozpoczyna się dodatkowe obciążenie.

Konfigurowanie wykonać zadań SQL, który bada Zmień dane

Wewnątrz kontener dla pętli należy dodać do zadania wykonać instrukcji SQL.Kwerendy tego zadania w tabelach proces przechwytywania danych zmiana zachowuje w bazie danych.Wynikiem tej kwerendy jest wartość stanu, która wskazuje, czy zmiana danych jest gotowy.

W poniższej tabela pierwsza kolumna zawiera wartości zwracane z zadania wykonać instrukcji SQL przez przykładzie kwerendy języka Transact-SQL.Druga kolumna pokazuje, jak inne składniki odpowiadają na te wartości.

Wartość zwracana

Znaczenie

Odpowiedź

0

Wskazuje, że zmiana danych nie jest gotowy.

Nie ma żadnych 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 powraca do tego kontener pętli for, aby sprawdzić, czy zadanie wykonać instrukcji SQL, tak długo, jak wartość zwracana jest równa 0 w dalszym ciągu.

1

Może wskazywać danych zmiana nie została przechwycona interwału pełne lub został usunięty.To jest traktowane jako błąd.

Brak rekordów przechwytywania danych zmiana wcześniejsze od punktu początkowego zaznaczonego interwału

Kontynuuje wykonywanie z składnik opcjonalny, który rejestruje błąd.

2

Wskazuje, że dane są gotowe.

Brak zmian danych przechwytywania rekordy, które są starsze niż punkt początkowy i późniejsza od punktu końcowego zaznaczonego interwału.

Przekazuje wykonywanie z kontener dla pętli i uruchamia dodatkowe obciążenie.

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.

Przekazuje wykonywanie z kontener dla pętli i uruchamia dodatkowe obciążenie.

5

Wskazuje, że osiągnięto TimeoutCeiling.

Pętla zostało przetestowane w przypadku danych określoną liczbę razy, a dane są wciąż nie są dostępne.Bez tego testu lub podobnych testów pakiet może być uruchamiane przez nieokreślony czas.

Kontynuuje wykonywanie z opcjonalny składnik, który loguje się limit czasu.

Aby skonfigurować zadania programu wykonać instrukcji SQL kwerendy, czy zmiana danych jest gotowy

  1. Wewnątrz kontener pętli For Dodawanie zadania dotyczącego wykonać instrukcji SQL.

  2. W Uruchomić Edytor zadań SQL, on the Ogólne strona, należy wybrać następujące opcje:

    1. Dla ResultSet, select Jeden wiersz.

    2. Należy skonfigurować poprawne połączenie ze źródłową bazą danych.

    3. Dla SQLSourceType, select Bezpośredniego wprowadzania.

    4. Dla SQLStatement, należy wprowadzić następującą instrukcję 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
      
  3. Na Parametr mapowania stronaEdytor zadań wykonać SQL, sprawdź następujące mapowania:

    1. Mapować zmiennej ExtractEndTime parametru 0.

    2. Parametr 1 mapować IntervalID zmiennej.

    3. Mapować zmiennej ExtractStartTime parametr 2.

    4. Mapować zmiennej TimeoutCount parametr 3.

    5. Mapować zmiennej TimeoutCeiling parametr 4.

  4. Na Zestaw wyników stronaUruchomić Edytor zadań SQL, mapowanie wynik DataReady do zmiennej DataReady i wynik TimeoutCount do zmiennej TimeoutCount.

Oczekiwanie do zmiany są gotowe

Jedną z kilku metod umożliwia wdrożenie opóźnienia podczas zmiany danych nie jest gotowy.Dwie następujące procedury zilustrować sposób użycia zadania skryptu lub zadania programu wykonać instrukcji SQL do zaimplementowania opóźnienia.

Uwaga

Skrypt wstępnie skompilowanym wiąże się z mniejszym obciążeniu niż zadania programu wykonać instrukcji SQL.

Aby zaimplementować opóźnienia przy użyciu zadania skryptu

  1. Wewnątrz kontener pętli for dodać zadanie skryptu.

  2. Łączenie zadań wykonać instrukcji SQL tej kwerendy w celu ustalenia, czy zmiana danych jest gotowy do nowego zadania skryptu.

  3. Ograniczenia pierwszeństwo łączący zadanie wykonać instrukcji SQL z zadań skryptów, należy otworzyć Edytor ograniczenie pierwszeństwa i wybierz następujące opcje:

    1. Dla Operacja oceny, select Wyrażenie i ograniczenia.

    2. Dla Wartość, select SUKCES.

      Wartość ograniczenia SUKCES odnosi się do pomyślnego zakończenia poprzedniego zadania.W tym przypadek powodzenia zadanie wykonać instrukcji SQL.

    3. Dla Wyrażenie, enter @DataReady == 0 && @TimeoutCount <= @TimeoutCeiling.

    4. Wybierz opcję Logiczne and. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA, , jeśli nie są już wybrane.

  4. W Edytor zadań skryptu, on the Skrypt strona, for ReadOnlyVariables, zaznacz User::DelaySeconds liczba całkowita zmienną z listy.

  5. W Edytor zadań skryptu, on the Skrypt strona, kliknij przycisk Edytowanie skryptu , aby otworzyć środowiska programistycznego skryptu.

  6. W procedurze głównej należy wprowadzić jedną z następujących wierszy kodu:

    • Jeśli programowaniu w języku C# wprowadzić następujący wiersz kodu:

      System.Threading.Thread.Sleep((int)Dts.Variables["DelaySeconds"].Value * 1000);
      

      - lub -

    • Jeśli użytkownik jest programowanie w Visual Basic, wpisz następujący wiersz kodu:

      System.Threading.Thread.Sleep(Ctype(Dts.Variables("DelaySeconds").Value, Integer) * 1000)
      

      Uwaga

      The Thread.Sleep metoda expects an argument that is specified in milliseconds.

  7. Pozostaw domyślną linię kodu, która zwraca DtsExecResult.Success z wykonania skryptu.

  8. Zamknij środowiska programistycznego skryptu, Edytor zadań skryptu.

Aby zaimplementować opóźnienia przy użyciu zadania programu wykonać instrukcji SQL

  1. Wewnątrz kontener pętli For Dodawanie zadania dotyczącego wykonać instrukcji SQL.

  2. Łączenie zadań wykonać instrukcji SQL tej kwerendy w celu ustalenia, czy zmiana danych jest gotowy do nowego zadania wykonać instrukcji SQL.

  3. Ograniczenia priorytetu, który łączy dwa zadania wykonać instrukcji SQL, należy otworzyć Edytor ograniczenie pierwszeństwa i wybierz następujące opcje:

    1. Dla Operacja oceny, select Wyrażenie i ograniczenia.

    2. Dla Wartość, select SUKCES.

      Wartość ograniczenia SUKCES odnosi się do pomyślnego zakończenia poprzedniego zadania wykonać instrukcji SQL.

    3. Dla Wyrażenie, enter @DataReady == 0.

    4. Wybierz opcję Logiczne and. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA, , jeśli nie są już wybrane.

      Wybranie tej opcji wymaga, aby oba warunki, ograniczenia i wyrażenie, muszą być spełnione.

  4. W Uruchomić Edytor zadań SQL, on the Ogólne strona, należy wybrać następujące opcje:

    1. Dla ResultSet, select Jeden wiersz.

    2. Należy skonfigurować poprawne połączenie ze źródłową bazą danych.

    3. Dla SQLSourceType, select Bezpośredniego wprowadzania.

    4. Dla SQLStatement, należy wprowadzić następującą instrukcję SQL:

      WAITFOR DELAY ?
      
  5. Na Parametr mapowania Strona edytora, mapować zmiennej tekstowej DelaySeconds parametru 0.

Obsługa wystąpienia błędu

Opcjonalnie można skonfigurować dodatkowego komponentu w pętli do logowania się błąd lub warunku limit czasu:

  • Składnik ten może rejestrować błąd warunek, kiedy wartość zmiennej DataReady = 1.Ta wartość wskazuje, że nie ma danych dostępne zmiany przed rozpoczęciem zaznaczonego interwału.

  • Ten składnik może także rejestrować warunek limitu czasu, po osiągnięciu wartości zmiennej TimeoutCeiling.Ta wartość wskazuje pętli zostało przetestowane w przypadku danych określoną liczbę razy, a dane są wciąż nie są dostępne.Bez tego testu lub podobnych testów pakiet może być uruchamiane przez nieokreślony czas.

Aby skonfigurować zadania programu Script opcjonalny warunek błędu logowania

  1. Aby zgłosić błąd lub limitu czasu pisząc wiadomości w dzienniku, należy skonfigurować rejestrowania dla pakiet.Aby uzyskać więcej informacji zobaczHow to: Enable Logging in a Package.

  2. Wewnątrz kontener pętli for dodać zadanie skryptu.

  3. Łączenie zadań wykonać instrukcji SQL tej kwerendy w celu ustalenia, czy zmiana danych jest gotowy do nowego zadania skryptu.

  4. Ograniczenia pierwszeństwo łączący zadanie wykonać instrukcji SQL z zadań skryptów, należy otworzyć Edytor ograniczenie pierwszeństwa i wybierz następujące opcje:

    1. Dla Operacja oceny, select Wyrażenie i ograniczenia.

    2. Dla Wartość, select SUKCES.

      Wartość ograniczenia SUKCES odnosi się do pomyślnego zakończenia poprzedniego zadania.W tym przypadek powodzenia zadanie wykonać instrukcji SQL.

    3. Dla Wyrażenie, enter @DataReady == 1 || @DataReady == 5.

    4. Wybierz opcję Logiczne and. Wszystkie ograniczenia musi dawać w wyniku wartość PRAWDA, , jeśli nie są już wybrane.

      Wybranie tej opcji wymaga, aby oba warunki, ograniczenia i wyrażenie, muszą być spełnione.

  5. W Edytor zadań skryptu, on the Skrypt Edytor stronaReadOnlyVariables, select User::DataReady and User::ExtractStartTime z listy w celu udostępnienia ich wartości do skryptu.

    Jeśli chcesz dołączyć informacje z określonych zmiennych systemowych (na przykład System::PackageName), informacje wpisywane w dzienniku, należy także wybrać tych zmiennych.

  6. W Edytor zadań skryptu, on the Skrypt strona, kliknij przycisk Edytowanie skryptu , aby otworzyć środowiska programistycznego skryptu.

  7. W procedurze głównej, należy wprowadzić kod do logowania się, wywołując błąd Dts.Log Metoda, lub aby podnieść zdarzenie, wywołując metody Dts.Events interfejs. Informuje pakiet błędu przywracając Dts.TaskResult = Dts.Results.Failure.

    Poniższy przykład pokazuje, jak napisać wiadomość do dziennika.Aby uzyskać więcej informacji zobacz Logging in the Script Task, Podnoszenie zdarzenia w zadaniu skryptów, a Zwraca wyniki do zadania 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
    
  8. Zamknij środowiska programistycznego skryptu, Edytor zadań skryptu.

Następny krok

Po ustaleniu, że zmiana danych jest gotowy, następnym krokiem jest przygotowanie do kwerendy danych zmian.

Następny temat:Preparing to Query for the Change Data

Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.