Aracılığıyla paylaş


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

Denetimi akışı içinde bir Integration Services paket , artımlı bir yük değişiklik veri gerçekleştirir, ikinci görev seçili aralığı için değişiklik veri hazır olduğunu sağlamaktır. Zaman uyumsuz yakalama işlemi henüz tüm değişiklikleri yukarı seçilen bitiş noktasına uygulanmamasına çünkü bu adım gereklidir.

Not

İlk denetim akışı için değişiklik aralığı bitiş noktaları hesaplamak için görevdir.Bu görev hakkında daha fazla bilgi için bkz: Bir değişikliği veri aralığı belirtme.Tasarlama genel işlem açıklaması için denetim akışı, bkz: Değiştir ile veri yakalama artımlı geliştirme yükler.

Paketlerdeki Değiştir veri yakalama kullanımını gösteren tam ve uçtan uca örnekler görmek için bkz: Integration Services örnekleri üzerinde Codeplex.

Solution bileşenleri anlama

Bu konuda açıklanan çözümü kullanan 4 Integration Services bileşenleri:

  • Sürekli olarak bir yürütme sql görev çıktısını değerlendirir için döngü kapsayıcı.

  • Özel Tablo Değiştir veri yakalama işlemi sorgular bir sql Yürüt görev saklar ve sonra veri hazır olup olmadığını belirlemek için bu bilgileri kullanır.

  • Veri hazır olduğunda işleme'de bir gecikme uygulayan bir bileşendir.Bu Script görev veya sql Yürüt görev olabilir.

  • sql Yürüt görevi bir hata veya zaman aşımı koşulu gösteren bir değeri döndürür, hata veya bir zaman aşımı raporları isteğe bağlı olarak, bir bileşendir.

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

İçin küme up paket değişkenleri

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

    1. sql Yürüt görev tarafından döndürülen durum değeri tutmak için bir tamsayı veri türündeki bir değişkeni oluşturun.

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

    2. Süre tutmak için bir değişken oluşturmak saat veri hazır olduğunda gecikme.Gecikme uygulamak için bir komut dosyası görevi kullanmayı planlıyorsanız, değişken bir tamsayı veri türü tamsayı olmalıdır.WAITFOR deyim ile sql Yürüt görev yapmayı planlıyorsanız, değişken "00: 00: 10" gibi değerleri kabul etmek için bir dize veri türü olmalıdır.

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

    3. Geçerli döngü saklamak için bir tamsayı veri türüne sahip bir değişkeni oluşturun.

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

    4. Bir zaman aşımı koşulu raporlamadan önce döngüye sınamalısınız kez veri sayısını belirtmek için bir tamsayı veri türüne sahip bir değişkeni oluşturun.

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

    5. (İsteğe bağlı) İlk değişiklik veri yükünü belirtmek için kullanabileceğiniz bir tamsayı veri türüne sahip bir değişkeni oluşturun.

      Bu örnek başlangıç yüklemesini belirtmek için yalnızca bir değer 0 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üme ile döngü için kapsayıcı eklenecek ilk bileşenidir.

Değişiklik kadar beklemek için döngü kapsayıcı yapılandırmak için veri hazır

  1. Üzerinde denetim akışı sekmesinde SSIS Tasarımcısı, eklemek için döngü kapsayıcı denetimi akışı.

  2. Execute sql bitiş noktaları aralığı için döngü kapsayıcı için hesapladığı görev bağlanın.

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

    1. İçin InitExpression, girmek @DataReady = 0.

      Bu ifade, döngüsü değişkeninin başlangıç değeri ayarlar.

    2. İçin EvalExpressionm, girmek @DataReady == 0.

      Zaman bu ifade veren yanlış, yürütme bir döngü geçirir ve artımlı yük başlatır.

Yapılandırma değişikliği verileri için sorgular sql görev Yürüt

Döngü için kapsayıcı sql Yürüt görev ekleyin.Bu görev sorgular tablo Değiştir veri yakalama işlemi veritabanında saklar.Bu sorguyu Değiştir hazır veridir olup olmadığını gösteren bir durum değeri sonucudur.

Aşağıdaki tablo, ilk sütun sql Yürüt görev örnek Transact-sql sorgu tarafından döndürülen değerleri gösterir.İkinci sütun diğer bileşenler bu değerlere 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 kayıt yok vardır.

Yürütme gecikme uygulayan bileşeni ile devam eder.Daha sonra döndürülen değer olarak 0 sql Yürüt görev olduğunu denetlemek için devam için döngü kapsayıcı denetimi verir.

1

Değişiklik veri için tam aralığı yakalanmadığını değil ya da silinmiş olduğunu gösteriyor olabilir.Bu bir hata koşulu kabul edilir.

Vardır değişiklik veri yakalama kayıt yok önceki seçili aralığının başlangıç noktası

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

2

Veri hazır olduğunu gösterir.

Daha önceki başlangıç noktası ve seçilen aralığın bitiş noktası daha sonra değişiklik veri yakalama kayıt yok.

Yürütme döngü geçirmeden kapsayıcı ve artımlı yük başlatır.

3

Tüm kullanılabilir değişiklik veri Başlangıç yüklemesini 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 döngü geçirmeden kapsayıcı ve artımlı yük başlatır.

5

TimeoutCeiling ulaşıldığını gösterir.

Döngü için verileri belirtilen sayıda test ve veriler hala yok.Bu sınama veya benzer bir test paket sonsuza kadar çalışabilir.

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

Bir sorgu için sql Yürüt görev değişikliği veri hazır olup olmadığını yapılandırmak için

  1. sql Yürüt görev için döngü kapsayıcı içinde ekleyin.

  2. De Yürütme sql görev Düzenleyicisi, Genel sayfa, aşağıdaki seçenekleri belirleyin:

    1. İçin sonuç kümesi, select tek satır.

    2. Geçerli bir kaynak veritabanı bağlantısını yapılandırın.

    3. İçin SQLSourceType, select doğrudan giriş.

    4. İçin sqldeyimi, 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. Üzerinde Parametre eşleme sayfa Yürütme sql görev Düzenleyicisi, aşağıdaki eşlemeleri yapın:

    1. ExtractEndTime değişkeni 0 parametre eşleyin.

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

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

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

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

  4. Üzerinde Sonuç kümesi sayfa Yürütme sql görev Düzenleyicisi, DataReady sonucu DataReady değişkeni ve TimeoutCount sonuç TimeoutCount değişken eşleyin.

Değişiklik veri hazır olana kadar bekleme

Değişiklik veri hazır olduğunda bir gecikme uygulamak için çeşitli yöntemlerden birini kullanabilirsiniz.Aşağıdaki iki yordamdan Script görev veya sql Yürüt görev gecikmesi uygulamak için nasıl kullanılacağı gösterilmektedir.

Not

Önceden derlenmiş komut dosyası, sql Yürüt görev'den daha az ek yük çeker.

Kod görevini kullanarak bir gecikme uygulamak için

  1. Döngü için kapsayıcı içinde kod görev ekleyin.

  2. sql Yürüt görev değişikliği veri yeni Script görev için hazır olup olmadığını belirlemek için sorguladığı bağlanın.

  3. İçin öncelik kısıtlaması Script görev için açık sql Yürüt görev bağlayan öncelik kısıtlaması düzenleyen ve aşağıdaki seçenekleri belirleyin:

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

    2. İçin değeri, select Başarı.

      Kısıtlama değeri Başarı önceki görev başarısı için başvurur.Bu durum, sql Yürüt görev başarısını.

    3. İçin ifade, girmek @DataReady == 0 && @TimeoutCount <= @TimeoutCeiling.

    4. Seçin mantıksal and Tüm kısıtlamalar True olarak değerlendirmelidir, henüz seçili değilse.

  4. De Komut dosyası görev Düzenleyicisi, komut dosyası sayfa için ReadOnlyVariablesseçin User::DelaySeconds tamsayı değişken listesinden.

  5. De Komut dosyası görev Düzenleyicisi, Script sayfa,'ı Komut dosyasını düzenle komut dosyası geliştirme ortamı açmak için.

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

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

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

      - veya -

    • Siz de programlama, Visual 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. Varsayılan kod satırı, döndüren bırakın DtsExecResult.Success gelen komut yürütülmesi

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

sql Yürüt görevini kullanarak bir gecikme uygulamak için

  1. sql Yürüt görev için döngü kapsayıcı içinde ekleyin.

  2. sql Yürüt görev değişikliği veri yeni sql Yürüt görev için hazır olup olmadığını belirlemek için sorguladığı bağlanın.

  3. İçin öncelik kısıtlaması iki sql Yürüt görevleri bağlayan, açık öncelik kısıtlaması düzenleyen ve aşağıdaki seçenekleri belirleyin:

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

    2. İçin değeri, select Başarı.

      Kısıtlama değeri Başarı önceki sql Yürüt görev başarısı için başvurur.

    3. İçin ifade, girmek @DataReady == 0.

    4. Seçin mantıksal and Tüm kısıtlamalar True olarak değerlendirmelidir, henüz seçili değilse.

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

  4. De Yürütme sql görev Düzenleyicisi, Genel sayfa, aşağıdaki seçenekleri belirleyin:

    1. İçin sonuç kümesi, select tek satır.

    2. Geçerli bir kaynak veritabanı bağlantısını yapılandırın.

    3. İçin SQLSourceType, select doğrudan giriş.

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

      WAITFOR DELAY ?
      
  5. Üzerinde Parametre eşleme sayfa Editörü, DelaySeconds dize değişkeni 0 parametre eşleme.

Bir hata koşulu işleme

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

  • Bu bileşen hata oturum ne zaman koşul DataReady değişkeni değerini = 1.Bu değer, seçilen aralığın başlamadan önce kullanılabilir değişiklik veri yok olduğunu gösterir.

  • Bu bileşen TimeoutCeiling değişken değeri erişildiğinde, bir zaman aşımı koşulu oturum açabilir.Döngü için verileri belirtilen sayıda test ve veri hala yok bu değeri gösterir.Bu sınama veya benzer bir test paket sonsuza kadar çalışabilir.

İsteğe bağlı bir komut dosyası görevi bir hata koşulu oturum için yapılandırmak için

  1. İleti günlüğe yazarak hata veya zaman aşımı bildirmek istiyorsanız, paket günlüğünü yapılandırma.Daha fazla bilgi için bkz: Nasıl yapılır: Bir pakette günlüğe kaydetmeyi etkinleştirmek.

  2. Döngü için kapsayıcı içinde kod görev ekleyin.

  3. sql Yürüt görev değişikliği veri yeni Script görev için hazır olup olmadığını belirlemek için sorguladığı bağlanın.

  4. İçin öncelik kısıtlaması Script görev için açık sql Yürüt görev bağlayan öncelik kısıtlaması düzenleyen ve aşağıdaki seçenekleri belirleyin:

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

    2. İçin değeri, select Başarı.

      Kısıtlama değeri Başarı önceki görev başarısı için başvurur.Bu durum, sql Yürüt görev başarısını.

    3. İçin ifade, girmek @DataReady == 1 || @DataReady == 5.

    4. Seçin mantıksal and Tüm kısıtlamalar True olarak değerlendirmelidir, henüz seçili değilse.

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

  5. De Komut dosyası görev Düzenleyicisi, komut dosyası Sayfa Düzenleyicisi için ReadOnlyVariablesseçin User::DataReady ve User::ExtractStartTime değerlerine komut dosyası tarafından kullanılabilir hale getirmek için listeden.

    Belirli Sistem değişkenleri (örneğin, System::PackageName) bilgileri günlüğe yazma bilgileri dahil etmek istediğiniz değişkenleri de seçin.

  6. De Komut dosyası görev Düzenleyicisi, Script sayfa,'ı Komut dosyasını düzenle komut dosyası geliştirme ortamı açmak için.

  7. Ana yordamda çağırarak bir hata günlüğe kaydetmek için kod girin Dts.Log yöntem veya yöntemlerinden birini çağırarak olay oluşturmak için Dts.Events arabirim.Döndürerek hatayı paket bildirmek Dts.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ını tetiklemeye, ve Komut dosyası görev 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 ve Komut dosyası görev Düzenleyicisi.

Sonraki Adım

Değişiklik veri hazır olduğunu belirledikten sonra sonraki değişiklik verilerini sorgulamak hazırlamak için n'nin yükseltileceği adım.

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

Integration Services simgesi (küçük)Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve seçilen topluluk çözümleri yanı sıra Microsoft videolar için ziyaret Integration Services sayfa msdn veya TechNet:

Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.