Değişiklik veri ile çalışmak
Veri Değiştir veri yakalama tüketiciler tablo değerli işlevler (TVFs) ile değiştirmek sunulmuştur. Tüm sorguları bu işlevlerin döndürülen sonuç kümesini geliştirirken dikkate uygun aralığı, günlük sıra numaraları (LSNs) tanımlamak için iki parametre gerektirir. Aralığa bağlı iki alt ve üst lsn değerleri aralığında dahil kabul edilir.
Bazı işlevler bir tvf sorgulama kullanmak için uygun lsn değerler belirlemeye yardımcı olmak için sağlanmıştır. İşlev sys.fn_cdc_get_min_lsn bir yakalama örneği geçerlilik aralığı ile ilişkili olan en küçük lsn döndürür. Geçerlilik aralığı veri değişikliği için kendi yakalama örnekleri için mevcut bir zaman aralığıdır. İşlev sys.fn_cdc_get_max_lsn en büyük lsn geçerlilik aralığı verir. İşlevleri sys.fn_cdc_map_time_to_lsn ve kullanır.sys.fn_cdc_map_lsn_to_timeBelirtilen lsn değerler geleneksel çizelgesinde yer yardımcı olabilir. Değişiklik veri yakalama kapalı sorgu aralıkları kullandığından, bazen sonraki lsn değeri değişiklikleri birbirini izleyen sorgu penceresi içinde çoğaltılabilir değil emin olmak için bir sıra oluşturmak gereklidir. İşlevleri sys.fn_cdc_increment_lsn ve sys.fn_cdc_decrement_lsn lsn değeri artan bir ayarlama gerekli olduğunda yararlıdır.
Bu Konuda
lsn sınırları doğrulanıyor
Sorgu işlevler
Sorgu işlev senaryoları
lsn sınırları doğrulanıyor
Onların kullanmadan önce tvf Sorguda kullanılacak olan lsn sınırları doğrulanıyor öneririz. Boş uç noktaları veya bitiş noktası yakalama örneği için geçerlilik aralığı dışında kalan bir değişiklik veri yakalama tvf tarafından döndürülen hata zorlar.
Örneğin, aşağıdaki hata tüm değişiklikler için bir sorgu için sorgu aralığını tanımlamak için kullanılan bir parametre geçersiz olduğunda döndürülen veya aralık dışında veya satır filtre seçeneği geçersiz.
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_ ...
Döndürülen karşılık gelen hata bir net changessorgu ise şu:
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_net_changes_ ...
[!NOT]
Msg 313 ileti yanıltıcıdır ve başarısızlığın gerçek nedenini anlayamayabilir tanınır. Yetersizlik içinde bir tvf açık bir hata yükseltmek için bu garip kullanımı kaynaklanmaktadır. Yine de tanınan, yanlış varsa, bir hata dönmeden değeri sadece boş bir sonuç döndürme için tercih sayılır. Bir boş sonuç kümesi geçerli sorgudan dönen değişiklik ayırt olmazdı.
Yetkilendirme hatası hataları gösterildiği gibi tüm değişiklikleri için sorgularken döndürür:
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database 'MyDB', schema 'cdc'.
Net değişiklik için sorgularken geçerlidir:
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object fn_cdc_get_net_changes_...', database 'MyDB', schema 'cdc'.
Şablon görmek Enumerate Net Changes Using TRY CATCHbunlar tvf hataları bilinen yolunu kesmek ve başarısızlık daha anlamlı bilgiler döndürmek nasıl bir gösteri için.
[!NOT]
Üzerinde değişiklik veri yakalama şablonları SQL Server Management Studio'yu bulmaya Görünümü menüsünden tıklatın Şablon Gezgini, genişletin SQL Server şablonları ve ardından Değiştir veri yakalama klasörü.
[Top]
Sorgu işlevler
İzlenen kaynak tablo ve onun yakalama örneği yapılandırıldığı şekilde değişiklik sorgulamak için bir ya da iki TVFs özelliklerini bağlı veri oluşturulur.
İşlev cdc.fn_cdc_get_all_changes_<capture_instance > belirtilen aralık için gerçekleşen tüm değişiklikleri verir. Bu işlev her zaman oluşturulur. Girişler her zaman ilk lsn değişikliği, hareket kaydetme tarafından sıralanmış, döndürülür ve sonra değişiklik içinde kendi işlem sıralarının bir değer tarafından. Bağlı satır filtre seçeneği seçilmiş, son satır güncelleştirme (satır filtre seçeneği "tüm") döndürülür ya da eski ve yeni değerleri güncelleştirmek üstünde döndürülür (satır filtre seçeneği "tüm eski güncelleştirme" ').
İşlev değiştirir<capture_instance > oluşturulduğunda parametre @ supports_net_changes kaynak tablo etkin olduğunda 1 olarak ayarlanır.
[!NOT]
Bu seçenek yalnızca kaynak tabloda tanımlı birincil anahtar varsa ya da eğer desteklenir parametre @ index_name benzersiz bir dizin tanımlamak için kullanılır.
net changesİşlevi bir değişiklik olarak kaynak tablo satır başına. Birden fazla değişikliği satırında belirtilen aralıkta günlüğe kaydedilirse, sütun değerlerini son satırın içeriğini yansıtır. Düzgün hedef ortamda güncelleştirmek için gerekli olan işlemi tanımlamak için tvf satırdaki ilk işlem sırasında aralığı ve satırın son operasyonu dikkate almanız gerekir. Ne zaman satır filtre 'Tümü' seçeneğini Belirtilen tarafından döndürülen işlem bir net changesya da olacak olacak INSERT, delete veya update (yeni değerler) sorgusu. Çünkü orada bir toplama maskesi bilgisayar ile ilişkili maliyet bu seçenek her zaman güncelleştirme maske olarak null döndürür. Bir satırdaki tüm değişiklikleri yansıtan bir toplama maskesi gerektirir, 'all' maskesi kullanın. seçeneği. Akış işlem ekler ve güncelleştirmeler ayırt edici olmasını gerektirmez 'ile Birleştir' kullanın seçeneği. Bu durumda, işlem değeri yalnızca iki değer üzerinde alacak: 1 silme ve ekleme veya güncelleştirme olabilir bir operasyon için 5. Bu seçenek, türev işlem ekleme veya güncelleştirme olmalı ve bu farklılaşma gerekli olduğunda sorgu performansını artırabilirsiniz olup olmadığını belirlemek için gereken ek işlemler ortadan kaldırır.
Güncelleştirme maskesi sorgu işlevinden döndürülen tüm sütunları değiştirme veri satırda değişen tanımlayan kompakt bir temsilidir. Genellikle, bu bilgileri yalnızca olduğunu için küçük bir alt kümesi Yakalanan sütunları gerekli. İşlevleri, maske daha doğrudan uygulamaları tarafından kullanılabilen bir biçimde bilgi çıkarma olarak yardımcı olmak kullanılabilir. İşlev sys.fn_cdc_get_column_ordinal ise verilen yakalama örneğinin adlandırılmış sütun sıralı konumunu verir işlevi sys.fn_cdc_is_bit_set işlev çağrısında geçirilen sıra göre sağlanan maske eşlik bit verir. Birlikte, bu iki fonksiyon güncelleştirme maskesinin verimli çıkarılan ve Değiştir veri isteği ile döndürülen bilgileri sağlar. Şablon görmek Enumerate Net Changes Using All With MaskBu işlevlerin nasıl kullanıldığını gösteren bir gösteri için.
[Top]
Sorgu işlev senaryoları
Aşağıdaki bölümlerde, sorgu işlevleri kullanarak değişiklik veri yakalama verilerini sorgulamak için genel senaryolar açıklanmaktadır cdc.fn_cdc_get_all_changes_<capture_instance>ve cdc.fn_cdc_get_net_changes_<capture_instance>.
Tüm değişiklikleri için yakalama örneği geçerlilik aralığı içinde sorgulama
Değiştir veri en basit isteği tüm geçerli veri yakalama örneği'nın geçerlilik aralığı değiştirmek döndüren bir biridir. Bu istek yapmak için ilk geçerlilik aralığı alt ve üst lsn sınırları belirler. Daha sonra parametrelerini tanımlamak için bu değerleri kullanın @ from_lsn ve @ to_lsn sorgu işleve cdc.fn_cdc_get_all_changes_<capture_instance>ya cdc.fn_cdc_get_net_changes_<capture_instance>. İşlevini kullanın sys.fn_cdc_get_min_lsn alt sınır, elde etmek ve sys.fn_cdc_get_max_lsn üst sınır elde edilir. Şablon görmek Enumerate All Changes for the Valid Rangesorgu işlevini kullanarak tüm geçerli geçerli değişiklik sorgulamak örnek kod için cdc.fn_cdc_get_all_changes_<capture_instance>. Şablon görmek Enumerate Net Changes for the Valid Rangeişlevini kullanarak benzer örnek için cdc.fn_cdc_get_net_changes_<capture_instance>.
Tüm yeni değişiklikleri için son sorgulama değişiklikleri ayarla
Tipik uygulamalar için Değiştir veri sorgulama, dönemsel istekleri için son istekten bu yana meydana gelen tüm değişiklikleri yaparak, sürekli bir süreç olacaktır. Bu tür sorgular için bu işlevi kullanabilirsiniz sys.fn_cdc_increment_lsn geçerli sorgunun alt sınırı üst sınır önceki sorgunun türetmek için. Bu yöntem, sorgu aralığı her zaman kapalı aralığı nerede iki çift aralığa dahil kabul edilir çünkü hiçbir satır yinelenir sağlar. Daha sonra işlevini kullanın sys.fn_cdc_get_max_lsn yüksek son nokta için yeni istek aralığı elde edilir. Şablon görmek Enumerate All Changes Since Previous Requestsistematik son istekten bu yana tüm değişiklikleri edinmek için sorgu penceresine taşımak örnek kod için.
Tüm yeni değişiklikleri kadar şimdi için sorgulama
Bir sorgu işlevi tarafından döndürülen değişiklikleri yerleştirilir tipik bir kısıtlama saat arasında önceki isteğin geçerli tarihe kadar gerçekleştirilen değişiklikler dahil etmektir. Bu sorgu için işlevin geçerli sys.fn_cdc_increment_lsniçin @ from_lsn önceki istekte alt sınırı belirlemek için kullanılan değer. Üst sınır zaman aralığına zaman içinde belirli bir noktası olarak ifade edilir çünkü sorgu işlevi tarafından kullanılmadan önce bir lsn değer dönüştürülmelidir. Datetime değeri karşılık gelen bir lsn değer dönüştürülebilir önce yakalama işlemi, belirtilen üst sınır taahhüt edilen tüm değişiklikleri işlediği emin olmalısınız. Bu eleme değişiklikler değişiklik tablonun yayılma sağlamak için gereklidir. Bunu yapmanın bir yolu, düzenli olarak herhangi bir veritabanı değişikliği tablo geçerli maksimum tamamlama lsn için kaydedilen istek aralığı istenen bitiş saati aşan bakar bir bekleme döngü yapısı etmektir.
Yakalama işlemi zaten bütün ilgili günlüğü girdilerini işlediği gecikme döngü doğruladıktan sonra işlevini kullanın sys.fn_cdc_map_time_to_lsn lsn değer olarak ifade edilen yeni yüksek uç nokta belirlemek için. Belirtilen zaman kaydedilmiş tüm girdiler alınmadan emin olmak için işlev çağrısı sys.fn_cdc_map_time_to_lsnve 'daha az en büyük ya da eşit' seçeneğini kullanın.
[!NOT]
Hareketsizlik dönemlerinde bir kukla giriş tabloya eklenen cdc.lsn_time_mappingyakalama işlemi aslında işaretlemek için değişiklikleri kadar verilen tamamlama süresi için işlediği. Bu yakalama işlemini düştüğünü görünmesini engeller ne zaman orada sadece hayır son arkasında değişiklikleri işleme.
Şablon Enumerate All Changes Up Until Nowsorgu önceki stratejisini Değiştir veri kullanımı gösterilmiştir.
Bir tüm değişiklikler sonucu bir tamamlama süresi ekleme ayarla
Tabloda ilişkili girişi veritabanı değişikliği tablosundaki her hareketi tamamlama zaman kullanılabilir cdc.lsn_time_mapping. Katılarak __$start_lsntüm değişikliklerle talebi döndürülen değer start_lsndeğeri bir cdc.lsn_time_mappingtablosu girdisi, dönebilirsiniz tran_end_timedeğişiklik veri kaynağı hareket tamamlama süresi kullanılarak değişiklik damga birlikte. Şablon Append Commit Time to All Changes Result SetBu birleştirme gerçekleştirmek gösterilmiştir.
Değişiklik veri aynı işlem diğer verilerle katılma
Bazen, o zaman kaynak hareketi hakkında toplanan diğer bilgileri ile Değiştir veri katılmak yararlıdır. tran_begin_lsnTablo cdc.lsn_time_mappinggibi bir birleştirme gerçekleştirmek için gereken bilgileri sağlar. Güncelleştirme kaynak oluştuğunda, değeri database_transaction_begin_lsnSistem dinamik görünüm sys.dm_tran_database_transactions Değiştir veri ile birleştirilecek olan diğer bilgileri ile birlikte kaydedilmiş olması gerekir. İşlevini fn_convertnumericlsntobinarykarşılaştırmak için database_transaction_begin_lsnve tran_begin_lsndeğerler. Bu işlev oluşturmak için kodu şablonda kullanılabilir Create Function fn_convertnumericlsntobinary. Şablon Return All Changes with a Given tran_begin_lsnbirleştirme etkisi gösterilmiştir.
DateTime Wrapper işlevlerini kullanarak sorgulama
Verileri belirli aralıklarla istemek için değiştirmek için sorgulamak için tipik uygulama senaryo, datetime değerleri tarafından çevrelenen kayar pencere kullanarak verileri değiştirin. Tüketiciler bu sınıf için değişiklik veri yakalama saklı yordam sağlar gösterirsys.sp_cdc_generate_wrapper_functiontüm özel sarıcı işlevleri için değişiklik veri yakalama sorgu işlevler oluşturmak için komut dosyası oluşturur. Bu özel paketleyicileri bir datetime çifti olarak ifade edilecek sorgu aralığı sağlar.
Saklı yordam arama seçenekleri arayan erişimi olan tüm yakalama örnekleri veya yalnızca belirtilen yakalama örneği için oluşturulacak paketleyicileri izin verir. Desteklenen seçenekler yakalama aralığı yüksek uç nokta olan kullanılabilir Yakalanan sütunları sonuç kümesi ve hangi dahil sütunları güncelleştirme bayrakları ilişkili dahil edileceğini açık ya da kapalı, olup olmayacağını belirtme yeteneği de. Yordam, bir sonuç kümesi ile iki sütun döndürür: derivable yakalama örnek adı ve sarıcı depolanan yordamı create deyimi oluşturulan işlev adı. Tüm değişiklikleri sorgu KAYDIR işlevi her zaman oluşturulur. Eğer @ supports_net_changes parametresi ayarlanmış yakalama örneği oluşturulduğunda, net değişiklikleri işlevi KAYDIR işlevi de oluşturulur.
Sarmalayıcı saklı yordamlar oluşturma deyimleri oluşturmak ve işlevler oluşturmak için ortaya çıkan oluşturma komut dosyalarını çalıştırmak için komut dosyası üretimi saklı yordam çağrısı için Uygulama Tasarımcısı sorumluluğundadır. Bu Otomatik yakalama örneği oluşturulduğunda oluşmaz.
DateTime wrapper, kullanıcının sahip olduğu ve arayan varsayılan şema oluşturulmaz. Oluşturulan işlev yapılmaksızın çoğu kullanıcı için uygundur. Ancak, daha fazla özelleştirme her zaman işlevi oluşturma önce oluşturulan komut uygulanabilir.
Tüm değişiklikleri sorgu sarmak için işlevin adı fn_all_changes_yakalama örneği adı izler. Net değişiklik wrapper için kullanılan öneki fn_net_changes_. Hem işlevleri TVFs yapmak sadece kendi ilişkili değişiklik veri yakalama üç bağımsız değişken alır. Ancak, sorgu aralığı için sunulu iki datetime değerleri yerine iki lsn değerleri ile sınırlıdır. @ Row_filter_option her iki işlev parametresi aynıdır.
Sistematik olarak Değiştir veri yakalama Zaman Çizelgesi'nde yürüyüş için oluşturulan sarıcı işlevleri aşağıdaki Kongre Destek: It is expected, @ end_time önceki aralığı parametresi olarak kullanılan @ start_time parametresi sonraki aralığı. Sarmalayıcı işlevi datetime değerleri lsn değerler için eşleme ve hiçbir veri kaybı veya varsa bu Kongre ardından tekrar sağlanması ilgilenir.
Sunulu listeler, kapalı bir üst sınır ya da açık bir üst sınır belirtilen Sorgu penceresinde desteklemek için oluşturulabilir. Yani arayan girişleri için üst sınır ayıklama aralığı eşit bir tamamlama zaman aralığında eklenmek üzere belirleyebilirsiniz. Varsayılan olarak, üst sınır bulunmaktadır.
Süre oluşturulan sorgu TVFs başarısız için null değeri belirttiğinizde @ from_lsn değeri veya @ to_lsn değeri datetime wrapper işlevler tüm geçerli değişiklikleri geri dönmek datetime wrapper izin vermek için null kullanın. Yani, boş sorgu penceresi düşük son nokta için datetime wrapper aktarılırsa düşük bitiş noktası yakalama örneği geçerlilik aralığı sorguya tvf uygulanan temel select deyimi kullanılır. Benzer şekilde, boş sorgu penceresi yüksek uç nokta aktarılırsa yakalama örneği geçerlilik aralığı yüksek uç nokta tvf sorgudan seçerken kullanılır.
Bir sarmalayıcı işlevi tarafından döndürülen sonuç kümesi satır ile ilişkili olan işlemi tanımlamak için bir veya iki karakter olarak recoded işlemi sütun, ardından tüm istenen sütunlar içerir. Bit sütun olarak güncelleştirme bayrakları talep etmiş, onlar sonra belirtilen sırayla işlem kodu görünür @ update_flag_list parametresi. Oluşturulan datetime wrapper özelleştirmek için arama seçenekleri hakkında daha fazla bilgi için bkz: gösterirsys.sp_cdc_generate_wrapper_functiontüm (Transact-sql).
Şablon Instantiate a Wrapper TVF With Update Flagnet değişiklik sorgu tarafından döndürülen sonuç kümesi belirtilen sütun için bir güncelleştirme bayrak eklemek için oluşturulan bir işlevi özelleştirmek nasıl gösterir. Şablon Instantiate CDC Wrapper TVFs for a Schemaörneğini gösterir Datetime Wrappers for the Querytüm kaynak tablolar veritabanı şeması için oluşturulan yakalama örnekleri için TVFs.
Bir datetime wrapper sorgu Değiştir veri kullanan bir örnek için bkz: şablona Get Net Changes Using Wrapper With Update Flags. Bu şablon, sarıcı güncelleştirme bayrakları dönmek üzere yapılandırıldığında için sarmalayıcı işlevi ile net değişiklik sorgu gösterilmiştir. Not satır seçeneği 'maske ile'filtre boş olmayan güncelleştirme maske güncelleştirmek üstünde dönmek temel sorgu işlevi için gereklidir. NULL değerleri temel lsn gerçekleştiren sorgu göre düşük bitiş noktası ve geçerlilik aralığının yüksek bitiş noktası yakalama örneği için kullanılacak işlev sinyal iki alt ve üst datetime aralığı sınırları için iletilir. Sorgu, bir kaynak satır yakalama örneği için geçerli aralığın içinde meydana gelen her değişiklik için bir satır döndürür.
Yakalama örnekleri arasında geçiş için Datetime Wrapper işlevler kullanma
Değişiklik veri yakalama, bir tek izlenen kaynak tablo için iki yakalama örnekleri destekler. Asıl bu yeteneği veri tanım dili (ddl) değişiklikler kaynak tablo izleme için kullanılabilen sütunları kümesi genişlettiğinizde birden fazla yakalama örnekleri arasında bir geçiş yerleştirmek için kullanılır. Yeni yakalama örneği için geçiş yaptığınızda, değişiklikler temel alınan sorgu işlevleri adları yüksek uygulama düzeyinde korumak için tek yol bir sarmalayıcı işlevi temel arama sarmak için kullanmaktır. Ardından sarmalayıcı işlevi adı aynı kalmasını sağlamak. Zaman geçiş yapılmasına, eski işlevi bırakılan ve yeni sorgu işlevleri bu başvuruları aynı ada sahip yeni bir oluşturdunuz. İlk aynı adı taşıyan bir sarmalayıcı işlevi oluşturmak için oluşturulan komut dosyasını değiştirerek, yüksek uygulama katmanları etkilemeden yeni yakalama örneği için geçiş yapabilirsiniz.
[Top]
Ayrıca bkz.
Kavramlar
Değişiklik veri yakalama hakkında