Değiştir veri kullanma
Verileri değiştirme, veri yakalama Tüketiciler tablo değerli işlevler (TVFs) arasında değiştirmek kullanılabilir yapılır.Bu işlev tüm sorgular, döndürülen sonuç kümesi geliştirirken dikkate için uygun olan aralık, günlük sıra sayılarını (LSNs) tanımlamak için iki parametre gerektirir.Aralığa bağlı iki üst ve alt SSN değerler aralığı içinde yer alması kabul edilir.
Bazı işlevler bir TVF sorgulamak amacıyla uygun SSN değerleri belirlemek için sağlanır.The işlevsys.fn_cdc_get_min_lsn bir yakalama örnek geçerlilik aralığına. ile ilişkilendirilmiş olan küçük SSN verir Hangi değişiklik için veri yakalama örneklerini şu anda kullanılabilir saat aralığını geçerlilik aralığıdır.İşlevsys.fn_cdc_get_max_lsn geçerlilik aralığına. en büyük SSN verir İşlevlerisys.fn_cdc_map_time_to_lsn ve sys.fn_cdc_map_lsn_to_time bir geleneksel zaman çizelgesi. SSN değerleri yerleştirmek amacıyla kullanılabilir Değişiklik veri yakalama kapalı sorgu aralığı kullandığından, bazen sonraki SSN değer değişiklikleri birbirini izleyen sorgu penceresi içinde çoğaltılır emin olmak için bir sıra oluşturmak gereklidir.İşlevlerisys.fn_cdc_increment_lsn ve sys.fn_cdc_decrement_lsn yararlı olan bir SSN değeri için artımlı bir düzeltme gerekli olduğunda.
Doğrulama SSN sınırları
Doğrulama, kullanmadan önce TVF sorguda kullanılacak olan SSN sınırlarını öneririz.null uç veya örnek için bir yakalama geçerlilik aralığı dışında kalan uç değişiklik veri yakalama TVF tarafından döndürülen bir hata zorlar.
Örneğin, aşağıdaki hata tüm değişiklikler için bir sorgu için sorgu aralık tanımlamak için kullanılan bir parametre geçerli değil, döndürülen veya aralık dışında veya satır filtre seçeneği geçersiz.
Msg 313, düzey 16, State 3, satır 1
Yetersiz sayıda bağımsız değişken için yordam veya işlev cdc.fn_cdc_get_all_changes_ verildi...
Karşılık gelen hata için verilen birnet changesaşağıdaki sorgudur:
Msg 313, düzey 16, State 3, satır 1
Yetersiz sayıda bağımsız değişken için yordam veya işlev cdc.fn_cdc_get_net_changes_ verildi...
Not
Hata 313 iletinin yanıltıcı ve gerçek nedenini hata veren tanınır.Bu alışılmadık kullanım yüklenememesi bir TVF içinde açık hata yükseltmek için'dan kaynaklandığını.Yine de, yanlış, tanınan bir hatası, değer yalnızca boş bir sonuç döndürme için tercih kabul.Boş bir sonuç küme değişiklik döndüren geçerli sorgudan ayrılabilir olmayacaktır.
Yetkilendirme hatası hataları tüm değişiklikler için sorgularken gösterilen döndürür:
Msg 229, düzey 14, State 5, satır 1
SELECT izni '... fn_cdc_get_all_changes_' nesnesinde veritabanı 'MyDB' şema 'cdc' reddedildi.
Net değişim için sorgularken de aynı durum geçerlidir:
Msg 229, düzey 14, State 5, satır 1
... Nesne fn_cdc_get_net_changes_ üzerinde SELECT iznine engellendi ', 'MyDB', 'cdc' şema veritabanı.
Bkz: ağ değişiklikleri numaralandırma için bir örnek, bu bilinen TVF hataları yakalamak için TRY CATCH kullanarak şablon ve dönmek daha anlamlı bilgiler hatası.
Not
, SQL Server Management Studio'da değişiklik veri yakalama şablonları bulmak içinGörünüm menüsünde Template Explorer' ı tıklatın, SQL Server şablonları ' nı genişletin ve Değiştir, veri yakalama klasörüne. genişletin
Sorgu İşlevler
İzlenen kaynak tablo ve yakalama, örnek yapılandırılmış şekilde değişiklik sorgulamak için bir veya iki TVFs özelliklerini bağlı veri oluşturulur.
The işlevcdc.fn_cdc_get_all_changes_<capture_instance>sayı tüm değişiklikleri oluştu için belirtilen aralığı.Bu işlev her zaman oluşturulur.Girişler her zaman ilk hareket yürütme değişiklik SSN göre sıralanmış, döndürülür ve daha sonra bir değer, kendi işlem içinde değişiklik serileri.Bağlı satır filtre seçeneği seçili son satır güncelleştirme (satır filtre seçeneği "tümü") döndürülür ya da yeni ve eski değerleri güncelleştirme döndürülür (satır filtre seçeneğini "tüm eski güncelleştirme" ').
The işlevcdc.fn_cdc_get_net_changes_<capture_instance>kaynak tablo etkinleştirildiğinde parametre @ supports_net_changes 1 olarak ayarlandığında, oluşturulan.
Not
Bu seçenek yalnızca kaynak tablo olan tanımlı birincil anahtar veya parametre @ index_name tanımlayan için kullanılmıştı desteklenir benzersiz bir dizini.
The netchanges function returns one change per modified source table row.Birden fazla değişiklik için satırı belirtilen aralığında oturum açtıysa, sütun değerlerinin son satırın içeriğini yansıtır.TVF doğru hedef ortam güncelleştirmek için gerekli olan işlemi tanımlamak için aralığın başlangıç işleminde satırda hem de son operasyonda satır düşünmeniz gerekir.Tarafından döndürülen işlem, satır filtre seçeneği 'all' belirtilirse, birnet changesekleme, silme veya güncelleştirme (yeni değerler) olarak sorgulamak ya da olur.toplamak maskesi bilgisayar ile ilişkili maliyet olduğundan bu seçenek her zaman güncelleştirme maske null olarak döndürür.Bir satır için tüm değişiklikleri yansıtan bir toplamak maskesi gereksiniminiz varsa 'all' maskesi seçeneğini kullanın.Aşağı akım işlem ekler ve ayırt edici olması için güncelleştirme gerekmiyorsa 'all' ile birleştirme seçeneğini kullanın.Böyle bir durumda, iki değer işlem değeri yalnızca sürer: Sil ve 5 için bir ekleme veya bir güncelleştirme. bir işlem için 1 Bu seçenek, türetilmiş işlemini bir ekleme veya güncelleştirme olmalıdır ve bu farklar gerekli değilse, sorgu performansını artırmak olup olmadığını belirlemek için gereken ek bir işlem ortadan kaldırır.
Bir sorgudan döndürülen güncelleştirme maske işlev değişiklik veri satırı değiştirilen tüm sütunları tanımlayan kısa bir gösterimidir.Genellikle, bu bilgileri yalnızca olan küçük alt küme küme küme yakalanan sütunlar için gerekli.Gelen maske uygulamaları tarafından kullanılabilen daha doğrudan bir biçimde bilgi ayıklama yardımcı olmak işlevleri kullanılabilir.İşlevsys.fn_cdc_get_column_ordinal adlı bir sütun için belirli bir yakalama sıralı konumunu verir örnek, eşlik biti, sağlanan maske geçirilen işlev çağrısı. sıra temel işlevi sys.fn_cdc_is_bit_set verir ama Birlikte, bu iki işlev güncelleştirme maskesinin verimli bir şekilde ayıklanmış ve değişiklik veri isteği ile birlikte verilen bilgileri sağlar.Numaralandırma ağ değişiklikleri kullanarak tüm ile maske nasıl bu işlevlerin bir örnek için kullanılan şablona bakın.
Sorgu işlev senaryoları
Aşağıdaki bölümlerde, değişiklik veri yakalama verilerini kullanarak sorguyu işlevleri cdc.fn_cdc_get_all_changes_ sorgulamak için genel senaryolar açıklanmaktadır<capture_instance>ve cdc.fn_cdc_get_net_changes_<capture_instance>.
Tüm değişiklikleri için yakalama örnek geçerlilik aralığı içinde sorgulama
En basit değişiklik veri isteği tüm geçerli verileri bir yakalama örneğinin geçerlilik aralığı değiştirmek veren biridir.Bu istek yapmak için ilk geçerlilik aralığın alt ve üst SSN sınırlarını belirleyin.Daha sonra bu değerleri ve parametreleri @ from_lsn @ to_lsn sorgu işlev cdc.fn_cdc_get_all_changes_ için geçirilen tanımlama için kullanın.<capture_instance>ya da cdc.fn_cdc_get_net_changes_<capture_instance>.işlev Kullanınsys.fn_cdc_get_min_lsn alt sınırı elde etmek ve sys.fn_cdc_get_max_lsn üst sınırı. elde etmek için Şablon Numaralandırma tüm değişiklikleri sorgulamak sorgu işlev cdc.fn_cdc_get_all_changes_ kullanarak geçerli tüm geçerli değişiklikleri için örnek kod için geçerli aralık için bkz:<capture_instance>.Şablon Numaralandırma Net değişiklikler kullanmaya benzer bir örnek için geçerli aralık için bkz: işlev cdc.fn_cdc_get_net_changes_<capture_instance>.
Son itibaren tüm yeni değişiklikleri için sorgulama değişiklikleri küme
Tipik uygulamalar için değişiklik veri sorgulama dönemsel istekleri için tüm son istek bu yana gerçekleşen değişiklikler yapmak, sürekli bir süreç olacaktır.Gibi sorgular için işlev kullanabilirsiniz.sys.fn_cdc_increment_lsn Geçerli sorgunun üst sınır önceki sorgunun. alt türetmek için bağlı Bu yöntem, sorgu aralığı aralığındaki her iki end-points burada bulunan kapalı aralığı olarak her zaman kabul için hiçbir satır yinelenir sağlar.Sonra işlev kullanınsys.fn_cdc_get_max_lsn yeni istek aralığı. için yüksek son ya da nokta elde etmek için Bkz: şablon tüm değişiklikleri geri geliştirmekte son istek bu yana tüm değişiklikleri almak için sorgu penceresini taşımak için örnek kod isteği sonra numaralandırma.
Tüm yeni değişiklikler kadar yukarı şimdi için sorgulama
Sorgu işlev tarafından döndürülen değişiklikleri veren tipik bir kısıtlama, yalnızca geçerli tarihe kadar önceki isteği saat arasında oluşan değişiklikleri eklemektir.Bu sorgu için işlev sys.fn_cdc_increment_lsn alt sınırı belirlemek için önceki istekte kullanılan @ from_lsn değerine uygulanır.saat saat aralığına üst sınır belirli bir noktaya ifade edilir çünkü sorgu işlev tarafından kullanılmadan önce bir SSN değerine dönüştürülmelidir.Datetime değeri SSN değerine karşılık gelen dönüştürülebilir önce yakalama işlemi belirtilen üst sınır kaydedilmiş olan tüm değişiklikleri işlediği emin olun.Bu, tüm uygun değişiklikleri değişiklik tabloya yayılmasını olmak için gereklidir.Bunu yapmanın bir yolu için geçerli en yüksek kayıt SSN kaydedilmiş, herhangi bir veritabanı değişikliği tablo istek aralığı istenen bitiş saat aşan görmek için düzenli olarak kontrol eden bir bekleme döngü yapısı sağlamaktır.
Döngü doğrular, yakalama işlemi zaten işledi ilgili günlük girişler gecikme sonra işlevini kullanınsys.fn_cdc_map_time_to_lsn bir SSN değeri. ifade edilen yeni yüksek uç nokta belirlemek için Belirtilen saat içinde kaydedilmiş olan tüm girdileri alınan emin olmak için arama işlev sys.fn_cdc_map_time_to_lsn ve 'den daha büyük veya eşit' seçeneğini kullanın.
Not
Etkinlik dönemlerde yakalama işlemi olgu değişiklikleri en çok verilen yürütme saat işlediği işaretlemek için tablo cdc.lsn_time_mapping boş bir girdi eklenir.Bu yakalama işlemi ı görüntülenmesini engelleyen olduğunda sadece Hayır son arka planda kodlama işlemi değiştirir.
Numaralandırma tüm değişiklikleri kadar yukarı şimdi önceki stratejisi için sorgu gösterilmiştir şablon verileri değiştirin.
Tüm bir değişiklik sonucu için yürütme saat ekleme küme
, Her hareketiyle ilişkili girdiyi bir veritabanı değişikliği tamamlama saat tablo tablo kullanılabilircdc.lsn_time_mapping.Yaptığınız bütün değişiklikleri içeren bir cdc.lsn_time_mapping tablosu girdisi start_lsn değeri için bir istek döndürülen __ $ start_lsn değerini birleştirerek hareket yürütme saat kullanılarak değişiklik damga için değişiklik veri ile birlikte tran_end_time dönebilirsiniz kaynak.Şablona ekle onay saat tüm değişiklikleri sonucu küme bu birleştirmek gerçekleştirmek gösterilmiştir.
İle aynı hareketle diğer verilerden değiştirme verileri birleştirme
Bazen, diğer bilgilerle işlem sırasında kabul edilen, toplanan değişiklik veri birleştirmek yararlıdır kaynak.Tablo cdc.lsn_time_mapping tran_begin_lsn sütun gibi bir birleştirmek gerçekleştirmek için gereken bilgileri sağlar.Zaman kaynağının güncelleştirme gerçekleşir, sistem dinamik görünümü database_transaction_begin_lsn değerisys.dm_tran_database_transactions birleştirilecek değişikliği. ile diğer bilgileri ile birlikte kaydedilmiş olması gerekir Use işlev database_transaction_begin_lsn ve tran_begin_lsn değerleri karşılaştırmak için fn_convertnumericlsntobinary.Kod bu işlev oluşturmak için şablon oluşturma işlev fn_convertnumericlsntobinary içinde kullanılabilir.Belirli bir tran_begin_lsn tüm değişiklikleri iade şablonla birleştirmek efekt gösterilmiştir.
Tarih saat sarıcı işlevleri kullanarak sorgulama
Düzenli olarak istemek için verisinde değişiklik için sorgulamak için genel uygulama senaryo, tarih/saat değerleri ilişkisindeki kayan bir pencere kullanarak verileri değiştirin.Tüketiciler, bu sınıftaki değişiklik veri yakalama sağlar saklı yordamsys.sp_cdc_generate_wrapper_function değişiklik veri yakalama sorgu işlevlerini. özel sarıcı işlevleri oluşturmak için komut dosyaları oluşturan Bu özel sarıcıları sorgu aralığı, tarih/saat çifti olarak ifade izin verir.
Saklı yordam için arama seçeneklerini sarıcıları arayan erişimi olan tüm yakalama örnekleri veya yalnızca belirtilen yakalama örnek oluşturulmasına olanak sağlar.Desteklenen seçeneklerin yakalama aralığın üst uç ya da nokta, yakalanan kullanılabilir sütunların sonucu dahil edilecek açık veya kapalı, olması gerekip gerekmediğini belirleme yeteneğini de küme ve içerdiği sütun, güncelleştirme bayrakları.Yordamı, bir sonuç kümesi iki sütun verir: derivable yakalama örnek adı ve kapsayıcı için oluşturma deyim olan oluşturulan işlev adı, saklı yordam. Tüm değişiklikleri sorgu kaydırma işlev her zaman oluşturulur.@ Supports_net_changes parametresi küme yakalama örnek oluşturulduğunda, net değişim işlev kaydırma işlevini de oluşturulur.
Kapsayıcı saklı yordamlar oluşturma deyimleri oluşturmak için ve İşlevler oluşturmak için ortaya çıkan oluşturma komut dosyalarını çalıştırmak için komut dosyası oluşturma saklı yordamını çağırmak için Uygulama Tasarımcısı sorumluluğundadır.Bu otomatik olarak bir yakalama örnek oluşturulduğunda ortaya çıkmaz.
Tarih saat sarıcıları kullanıcının sahip olduğu ve arayanın varsayılan şema oluşturulur.Oluşturulan işlev yapılmaksızın çoğu kullanıcı için uygundur.Ancak, daha fazla özelleştirme her zaman işlev oluşturmadan oluşturulan komut dosyasına uygulanır.
Yakalama örnek adından fn_all_changes_ tüm değişiklikler sorgu kaydırma işlevinin adıdır.Net değişim kapsayıcı için kullanılan önek fn_net_changes_'dir.Her iki işlev TVFs yapmak sadece, değişiklik ilişkili veri yakalama üç bağımsız değişken alır.Ancak, iki tarih/saat değerleri yerine göre iki SSN değeri sorgu aralığı için sarıcıları sınırlıdır.@ Row_filter_option parametresi iki işlev kümeleri için aynıdır.
Geliştirmekte değişiklik veri yakalama zaman izlenecek oluşturulan sarıcı işlevleri aşağıdaki kuralını destekler: @ End_time parametresi önceki aralığı sonraki aralığı. @ start_time parametresi olarak kullanılması beklenir Datetime değeri SSN değerine eşleme ve veri kaybı veya bu gelir, yinelenen sağlama alır kaydırma işlev üstlenir.
Sarıcıları kapalı bir üst sınır ya da açık bir üst sınır belirtilen sorgu penceresini desteklemek için oluşturulabilir.Diğer bir deyişle, arayan girişleri için üst sınır ayıklama aralığı eşit yürütme saat aralığı içinde yer alması için kullanılıp kullanılmayacağını belirtebilirsiniz.Varsayılan olarak, üst sınırı bulunmaktadır.
Oluşturulan sorgu TVFs başarısız olsa da @ from_lsn değer ya da @ to_lsn değer için null bir değer belirttiğinizde, tarih/saat sarıcı işlevleri null geçerli tüm değişiklikleri geri dönmek datetime sarıcıları izin vermek için kullanabilirsiniz.Diğer bir deyişle, null datetime kapsayıcı için sorgu penceresinin alt son nokta geçirilir, sorguya TVF uygulanan temel SELECT deyimindeki düşük bitiş noktasını yakalama örnek geçerlilik aralığı kullanılır.Benzer şekilde, sorgu penceresinin üst uç nokta geçirilen null, yakalama örnek geçerlilik aralığı yüksek uç ya da nokta TVF sorgudan seçerken kullanılır.
Sonuç küme döndürülen bir sarıcı işlev bir işlem satırı ile ilişkili olan işlemi tanımlamak için bir veya iki karakter olarak recoded sütunu, ardından istenen sütun içerir.Güncelleştirme bayrakları istenen, bit sütun olarak işlem kodu @ update_flag_list parametresinde belirtilen sırada sonra görünürler.Oluşturulan datetime sarıcıları, özelleştirmek için arama seçenekleri hakkında bilgi için bkz:sys.sp_cdc_generate_wrapper_function (Transact-SQL).
Belirli bir sütun için bir güncelleştirme bayrağı sonucu eklemek için oluşturulan kapsayıcı işlev özelleştirme Instantiate bir uyarlama TVF ile Update bayrak şablonunu gösterir küme net değişim sorgu tarafından döndürülen.Şablon örneğini HDM uyarlama TVFs bir şema için nasıl sorgu TVFs tüm kaynak tablolar belirli bir veritabanı şemasında oluşturulan yakalama örnekleri için DateTime Wrapper örneğini gösterir.
Örneğin bir datetime sarıcı kullanan değişiklik verilerini sorgulamak için Şablon Al ağ değişiklikleri kullanarak uyarlama ile Update bayrakları bakın.Bu şablon için bir sarıcı olan net değişim sorgu gösterilmiştir işlev, sarıcı yapılandırılmış güncelleştirme bayrak verilecek.'Tüm maskesi' olan satır filtre seçeneği null olmayan güncelleştirme maske güncelleştirmeyi geri dönmek temel sorgu işlev için gerekli olduğunu unutmayın.null değerleri, alttaki SSN gerçekleştirmek için sorgu temel bitiş noktasını düşük ve yüksek uç noktası geçerlilik aralığı için yakalama örnek çalıştıracak şekilde işlev bildirmek her iki alt ve üst bir tarih aralığı sınırları için gönderilir.Sorguyu her değişiklik için yakalama örnek için geçerli aralık içinde oluşan bir kaynak satırı için bir satır döndürür.
Yakalama örnekleri arasında geçiş için DateTime sarıcı işlevleri kullanma
Değişiklik veri yakalama iki yakalama örnekleri tek izlenen kaynak tablo için destekler.Bu özelliği birincil kaynak tablo için veri tanımlama dili (DDL) değişiklikleri izleme için kullanılabilir sütunları kümesi genişlettiğinizde birden çok yakalama örnekleri arasında bir geçiş sağlamak için kullanılır.Dönüşüm için yeni bir yakalama sırasında örnek, yüksek uygulama düzeyleri değişiklikler temel alınan sorgu işlev adlarını korumak için bir yolu olan temel arama kaydırmak için kaydırma işlevini kullanmak için.Daha sonra sarıcı işlevin adı aynı kalır emin olun.Geçiş yapılmasına olduğunda, eski kaydırma işlev iptal ve aynı ada sahip yeni bir yeni sorgu işlevleri, başvuru oluşturulur.İlk aynı ada sahip bir kapsayıcı işlev oluşturmak için oluşturulan komut dosyasını değiştirerek, daha yüksek uygulama katmanları etkilemeden yeni bir yakalama örneğine geçiş yapabilirsiniz.