Share via


Değiştir hazır veridir olup olmadığını belirleme

denetim akışı, birIntegration Servicespaket, artan bir yük yapar verileri değiştirmek için ikinci görev olduğu için seçili aralığı için değişiklik veri var. hazır olunZaman uyumsuz bir yakalama işlemi henüz tüm değişiklikleri kadar seçilen son nokta işleme değil çünkü bu adım gereklidir.

Not

denetim akışı için ilk görev, değişim aralığının bitiş hesaplamak için uygundur.Bu görev hakkında daha fazla bilgi için bkz:Bir değişikliği veri aralığı belirtme.denetim akışı tasarlarken genel işleminin açıklaması için bkz:Artımlı geliştirme Değiştir veri yakalama ile yükler....

Tam görmek kullanımını gösteren örnekler uçtan uca veri yakalama paketlerindeki değiştirme Bkz:Readme_Change Data Capture for Specified Interval Package SampleveReadme_Change Data Capture since Last Request Package Sample.

Çözüm bileşenlerini anlama

Bu konuda açıklanan çözümü kullanan 4Integration ServicesBileşenler:

  • Sürekli bir yürütmek SQL görev çıktısını veren için döngü kapsayıcı.

  • Özel tablo veri değişikliği işlemi yakalama sorgulayan bir yürütmek SQL görev saklar ve sonra veri hazır olup olmadığını belirlemek için bu bilgileri kullanır.

  • Veri hazır değilse, işlem bir gecikme uygulayan bir bileşendir.Bu komut görevin veya bir SQL yürütmek görev olabilir.

  • İsteğe bağlı olarak, SQL yürütmek görevi, bir değer verdiğinde, bir hata veya bir bileşen hata ya da bir zaman aşımı koşulu belirtir.

Bu bileşenler küme veya döngü içinde ve daha sonra paketi çalışma akışını denetlemek için birkaç paket değişkenlerin değerlerini okuyabilirsiniz.

İçin küme paket değişkenleri ayarlayın.

  • InBusiness Intelligence Development Studio,Değişkenleri penceresinde, aşağıdaki değişkenleri oluşturun:

    1. Döndürülen SQL yürütmek görev. durum değeri tutmak için bir tamsayı veri türündeki bir değişken oluşturma

      Bu örnek, bir başlangıç değeri 0 ile DataReady, değişken adı kullanır.

    2. Veri hazır değilse, geciktirmek için saat tutacak bir değişken oluşturur.Gecikme uygulamak için bir komut dosyası görev kullanmayı planlıyorsanız, değişken, tamsayı veri türü tamsayı olmalıdır.BEKLE deyim ile bir SQL yürütmek görev kullanmayı düşünüyorsanız, değişken "00: 00: 10" gibi değerleri kabul etmek için bir dize veri türüne sahip olmalıdır.

      Bu örnek, bir başlangıç değeri 10, DelaySeconds, değişken adını kullanır.

    3. Basılı döngü. geçerli yineleme için bir tamsayı veri türündeki bir değişken oluşturma

      Bu örnek, bir başlangıç değeri 0 ile TimeoutCount, değişken adı kullanır.

    4. Kaç kez döngü veri bildirdiği önce sınayan belirlemek için bir tamsayı veri türündeki bir değişken oluşturma zaman aşımı koşulu.

      Bu örnek, bir başlangıç değeri 20, TimeoutCeiling, değişken adını kullanır.

    5. (İsteğe bağlı) oluşturma bir tamsayı veri türü, ilk yükünü belirtmek için kullanabileceğiniz bir değişkenle değiştirmek.

      Bu örnek ilk yükü göstermek için yalnızca 0 değeri için değişken adını, IntervalID ve denetimleri kullanır.

Yapılandırma bir döngü kapsayıcı için

Değişkenleri kümesiyle eklenecek ilk bileşen için döngü kapsayıcı.

Değişiklik kadar beklemek için döngü kapsayıcı biçimde veri hazır

  1. ,Akış denetimi sekmesini SSISTasarımcısı, bir for döngüsü ekleme kapsayıcı denetim akışı.

  2. yürütmek SQL for döngüsü için aralığın bitiş hesaplayan görevi bağlamak kapsayıcı.

  3. ,Döngü Düzenleyicisi için, aşağıdaki seçenekleri belirleyin:

    1. İçinInitExpression, enter @DataReady = 0.

      Bu ifade döngünün değişkeninin başlangıç değeri belirler.

    2. İçinEvalExpressionm, enter @DataReady == 0.

      Bu deyimin sonucu içinYanlışdöngü ve artan yükü başlar. , yürütme geçirir

Yapılandırma değiştirme veri sorguları, SQL görevi yürütmek

Döngü için kapsayıcı içinde bir SQL yürütmek görev ekleyin.Bu görev sorgu veri değişikliği işlemi yakalama tablo veritabanında saklar.Bu sorguyu değiştirme veri hazır olup olmadığını gösteren bir durum değeri sonucudur.

Aşağıdaki tabloda, ilk sütun yürütmek SQL görevden örnek Transact-SQL sorgusu tarafından döndürülen değerleri gösterir.İkinci sütun, diğer bileşenler için bu değerleri nasıl yanıt gösterir.

Dönüş Değeri

Anlamı

Yanıt

0

Değişiklik veri hazır olduğunu gösterir.

Seçilen aralığın bitiş noktası daha sonra değişiklik veri yakalama kaydı vardır.

Yürütme uygulayan bir gecikme bileşeni ile devam eder.For döngüsü denetim verir kapsayıcı, 0 ise, döndürülen değer olarak SQL Yürüt görev kontrol eder.

1

Değişiklik veri tam aralığını yakalandı değil, ya da silinmiş olduğunu gösteriyor olabilir.Bu bir hata durumu kabul edilir.

Yok hiçbir değişiklik veri yakalama kaydı Seçilen aralığın başlangıç noktası öncesi

Yürütme hata günlükleri isteğe bağlı bileşeni ile devam eder.

2

Veri hazır olduğunu gösterir.

Tarihi başlangıç noktası ve seçilen aralığın bitiş noktası daha sonra değişiklik veri yakalama kaydı vardır.

Yürütme için döngü kaba aktarır ve artan yükü başlar.

3

Tüm kullanılabilir değişiklik verilerin ilk yükü gösterir.

Koşullu mantığı, yalnızca bu amaç için kullanılan bir özel paket değişken bu değeri alır.

Yürütme için döngü kaba aktarır ve artan yükü başlar.

5

TimeoutCeiling ulaşıldı gösterir.

Belirtilen sayıda döngü verileri için sınama ve veriler hala kullanılabilir değil.Bu sınama veya benzer bir sınama olmadan paket sonsuza kadar çalışabilir.

Yürütme zaman aşımı oturum isteğe bağlı bileşeni ile devam eder.

Sorgu için bir SQL yürütmek Görev değişikliği veri hazır olup olmadığını yapılandırmak için

  1. Döngü için kapsayıcı içinde bir SQL yürütmek görev ekleyin.

  2. ,yürütmek SQL görev DüzenleyicisiGenel üzerinde sayfa, aşağıdaki seçenekleri belirleyin:

    1. İçinResultSet, select Single row.

    2. Kaynak veritabanı için geçerli bir bağlantı yapılandırın.

    3. İçinSQLSourceType, seçme doğrudan giriş .

    4. İçinSQLStatement, aşağıdaki SQL deyim girin:

      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. ,Parametre eşleme sayfa yürütmek SQL görev Düzenleyicisi, şu eşlemeleri olun:

    1. ExtractEndTime değişkeni 0 parametre olarak eşler.

    2. IntervalID değişken parametre 1 eşleyin.

    3. ExtractStartTime değişken parametre 2 eşleyin.

    4. Parametre 3 TimeoutCount değişken eşleyin.

    5. Parametre 4 TimeoutCeiling değişken eşleyin.

  4. ,Sonuç kümesi sayfa yürütmek SQL görev Düzenleyicisi'ni, DataReady değişkeni ve TimeoutCount değişkenini. TimeoutCount sonucu DataReady sonucu eşleme

Değiştir hazır verisi kadar bekleme

Değişiklik veri hazır değilse, bir gecikme uygulamak için çeşitli yöntemlerden birini kullanabilirsiniz.Aşağıdaki iki yordam kod görev veya bir SQL yürütmek görev gecikme uygulamak için nasıl kullanılacağını göstermektedir.

Not

Önceden derlenmiş komut dosyası, bir SQL yürütmek görev'den daha az ek yük oluşturur.

Bir komut dosyası görevini kullanarak bir gecikme uygulamak için

  1. Döngü için kapsayıcı içinde bir komut dosyası eklemek.

  2. SQL yürütmek Görev değişikliği verileri yeni kod göreve hazır olup olmadığını belirlemek için sorguladığı bağlayın.

  3. Açın komut dosyası göreve yürütmek SQL görev bağlayan öncelik kısıtlaması içinÖncelikli sınırlama Düzenleyicisi ve aşağıdaki seçeneklerden seçin:

    1. İçinDeğerlendirme işlemi, seçin ifade ve kısıtlama .

    2. İçinDeğer seçme başarılı .

      Kısıtlama değeriBaşarı başarısı için önceki görevi. gösterir Bu durumda, SQL yürütmek görevin başarısı.

    3. İçinİfade, enter @DataReady == 0 && @TimeoutCount <= @TimeoutCeiling.

    4. SeçinMantıksal AND. Tüm kısıtlamalar için doğru , seçili değilse değerlendirmelidir.

  4. ,Komut dosyası görev Düzenleyicisikomut dosyası üzerinde sayfa, listesi. User::DelaySeconds tamsayı değişkeni ReadOnlyVariables, seçmek için

  5. ,Komut dosyası görev Düzenleyicisikomut dosyası geliştirme ortamı. açmak için Komut dosyası Düzenle Script sayfasında tıklatın

  6. Ana yordamda, aşağıdaki kod satırlarını birini girin:

    • C# ile programlama, aşağıdaki kod satırını girin:

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

      -ya da-

    • Durumunda programlamaVisual Basic, aşağıdaki kod satırını girin:

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

      Not

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

  7. Kod, sayı varsayılan satır bırakın.DtsExecResult.Successkomut yürütülmesi arasında

  8. Komut dosyası geliştirme ortamı kapatın veKomut dosyası görev Düzenleyicisi.

Bir SQL yürütmek görevini kullanarak bir gecikme uygulamak için

  1. Döngü için kapsayıcı içinde bir SQL yürütmek görev ekleyin.

  2. SQL yürütmek Görev değişikliği verileri yeni yürütmek SQL göreve hazır olup olmadığını belirlemek için sorguladığı bağlayın.

  3. yürütmek SQL iki görevi birbirine bağlayan öncelik kısıtlaması için açıkÖncelikli sınırlama Düzenleyicisi ve aşağıdaki seçeneklerden seçin:

    1. İçinDeğerlendirme işlemi, seçin ifade ve kısıtlama .

    2. İçinDeğer, select Success.

      Kısıtlama değeriBaşarı başarısı için önceki SQL Yürüt görev. gösterir

    3. İçinİfade, enter @DataReady == 0.

    4. SeçinMantıksal AND. Tüm kısıtlamalar için doğru , seçili değilse değerlendirmelidir.

      Bu koşul, kısıtlama ve ifade olması gerektiğini doğru gerektirir.

  4. ,yürütmek SQL görev DüzenleyicisiGenel üzerinde sayfa, aşağıdaki seçenekleri belirleyin:

    1. İçinResultSet, select Single row.

    2. Kaynak veritabanı için geçerli bir bağlantı yapılandırın.

    3. İçinSQLSourceType, seçme doğrudan giriş .

    4. İçinSQLStatement, aşağıdaki SQL deyim girin:

      WAITFOR DELAY ?
      
  5. ,Parametre eşleme sayfa Düzenleyicisi, DelaySeconds dize değişkeni 0 parametre olarak eşleştirmek.

Bir hata durumu işleme

İsteğe bağlı olarak, bir hata veya bir zaman aşımı koşulu döngü içinde başka bir bileşen yapılandırabilirsiniz:

  • Bu bileşen hata günlüğünü tutabilir, koşul DataReady değişkenin değeri = 1.Bu değer, önce seçilen aralığın başlangıcını değiştirme kullanılabilir veri yok belirtir.

  • Bu bileşen TimeoutCeiling değişkeni değerinin yerine geldiğinde, bir zaman aşımı koşulu oturum açabilir.Bu değer, belirtilen sayıda döngü verileri için sınama ve veriler hala kullanılabilir belirtir.Bu sınama veya benzer bir sınama olmadan paket sonsuza kadar çalışabilir.

Bir hata durumu günlüğe kaydetmek için isteğe bağlı bir komut dosyası görevi yapılandırmak için

  1. İleti günlüğe yazarak hata veya zaman aşımı bildirmek isterseniz, günlüğü paket için yapılandırın.Daha fazla bilgi için bkz:Nasıl Yapılır: Bir paket'nde günlüğü etkinleştir.

  2. Döngü için kapsayıcı içinde bir komut dosyası eklemek.

  3. SQL yürütmek Görev değişikliği verileri yeni kod göreve hazır olup olmadığını belirlemek için sorguladığı bağlayın.

  4. Açın komut dosyası göreve yürütmek SQL görev bağlayan öncelik kısıtlaması içinÖncelikli sınırlama Düzenleyicisi ve aşağıdaki seçeneklerden seçin:

    1. İçinDeğerlendirme işlemi, seçin ifade ve kısıtlama .

    2. İçinDeğer, select Success.

      Kısıtlama değeriBaşarı başarısı için önceki görevi. gösterir Bu durumda, SQL yürütmek görevin başarısı.

    3. İçinİfade, enter @DataReady == 1 || @DataReady == 5.

    4. SeçinMantıksal AND. Tüm kısıtlamalar için doğru , seçili değilse değerlendirmelidir.

      Bu koşul, kısıtlama ve ifade olması gerektiğini doğru gerektirir.

  5. ,Komut dosyası görev Düzenleyicisikomut dosyası üzerinde sayfa ReadOnlyVariables, için düzenleyici, User::DataReadyUser::ExtractStartTime değerleri için script. kullanılabilir hale getirmek için listeden seçip

    Bazı sistem değişkenlerini (örneğin, System::PackageName) bilgileri günlüğe yazma bilgileri eklemek isterseniz, bu değişkenleri de seçin.

  6. ,Komut dosyası görev Düzenleyicisikomut dosyası geliştirme ortamı. açmak için Komut dosyası Düzenle Script sayfasında tıklatın

  7. Ana yordamda hata çağırarak oturum girmeyeDts.Logyöntem veya yöntemlerinden birini çağırarak bir olay oluşturmak içinDts.Eventsarabirim.Hata döndüren tarafından paket ınformDts.TaskResult = Dts.Results.Failure.

    Aşağıdaki örnek, bir ileti günlüğe yazma gösterilmiştir.Daha fazla bilgi için bkz:Oturum açma komut dosyası görev,Komut dosyası görev olayları yükseltme, veKomut dosyası görevden sonuçları döndürülüyor.

        ' 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. Komut dosyası geliştirme ortamı kapatın veKomut dosyası görev Düzenleyicisi.

Sonraki adım

Sonra belirlemek, değişiklik veri hazır, sonraki adıma olduğu için hazırlamak üzere sorgu değişiklik veri.

Sonraki konu:Sorgu Değiştir veriler için hazırlanılıyor

Integration Services icon (small)tümleştirme Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler, Microsoft Office 2010 Suite gelen video yanı sıra, seçilen topluluk çözümleri için ziyaret edin veIntegration ServicesMSDN veya TechNet sayfa:

Bu güncelleştirmeler otomatik bildirilmesi için sayfanın RSS akışlarını için abone olmak olun.