Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Değişiklik veri yakalama etkinleştirildiğinde oluşturulan değişim tablosu, bir kaynak tabloda gerçekleşir. Tablo, kaynak tabloya karşı yapılan her ekleme ve silme işlemi için bir satır ve kaynak tabloya karşı yapılan her güncelleme işlemi için iki satır döner. Kaynak tablo etkinleştirildiğinde değişiklik tablosunun adı belirtilmediğinde, isim türetilir. İsmin formatı cdc'dir. capture_instance_CT burada capture_instance , kaynak tablonun şema adı ve schema_table formatında kaynak tablo adıdır. Örneğin, AdventureWorks örnek veritabanındaki Person.Address tablosu değişiklik veri yakalama için etkinleştirilmişse, türetilen değişiklik tablosu adı cdc.Person_Address_CT olur.
Sistem tablolarını doğrudan sorgulamamanızı öneririz. Bunun yerine, cdc.fn_cdc_get_all_changes_<capture_instance> ve cdc.fn_cdc_get_net_changes_<capture_instance> fonksiyonlarını çalıştırın.
| Sütun adı | Veri türü | Description |
|---|---|---|
| __$start_lsn | binary(10) | Değişiklik için commit işlemiyle ilişkili log dizisi numarası (LSN). Aynı işlemde yapılan tüm değişiklikler aynı taahhüt LSN'yi paylaşır. Örneğin, kaynak tablodaki bir silme işlemi iki satırı kaldırırsa, değişim tablosu iki satır içerir ve her biri aynı __$start_lsn değerine sahiptir. |
| __$end_lsn | binary(10) | Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir. SQL Server 2012 (11.x)'de bu sütun her zaman NULL'dur. |
| __$seqval | binary(10) | İşlem kaydında temsil edilen işlemin dizisi. Sipariş için kullanılmamalıdır. Bunun yerine __$command_id sütununu kullanın. |
| __$operasyon | int | Değişiklikle ilişkili veri işleme dili (DML) işlemini belirler. Aşağıdakilerden biri olabilir: 1 = sil 2 = ekle 3 = güncelleme (eski değerler) Sütun verisi, güncelleme ifadesi çalıştırılmadan önce satır değerlere sahiptir. 4 = güncelleme (yeni değerler) Column verisi, güncelleme ifadesi yürütüldükten sonra satır değerlerine sahiptir. |
| __$update_mask | varbinary(128) | Değişim tablosunun sütun ordinallerine dayalı bir bit maskesi, değişen sütunları tanımlar. |
| <yakalanan kaynak tablo sütunları> | Değişir | Değişim tablosunda kalan sütunlar, kaynak tablodaki ve capture instance oluşturulduğunda yakalanan sütunlar olarak tanımlanan sütunlardır. Eğer yakalanan sütun listesinde hiç sütun belirtilmediyse, kaynak tablodaki tüm sütunlar bu tabloya dahil edilir. |
| __$command_id | int | İşlem içindeki işlemlerin sırasını takip eder. |
Açıklamalar
Sütun, __$command_id 2012-2016 versiyonlarında kümülatif bir güncellemeyle tanıtıldı. Sürüm ve indirme bilgileri için, FIX: Değişiklik tablosu, Microsoft SQL Server veritabanı için değişiklik veri yakalamayı etkinleştirdikten sonra güncellenen satırlar için yanlış sıralanmış KB 3030352 makalesine bakınız. Daha fazla bilgi için, SQL Server 2012, 2014 ve 2016 için en son CU'ya yükseltildikten sonra CDC işlevselliğinin bozulabileceğine bakınız.
Yakalanan Sütun Veri Türleri
Bu tabloda yer alan yakalanan sütunlar, aşağıdaki istisnalar dışında, ilgili kaynak sütunlarıyla aynı veri tipine ve değere sahiptir:
Zaman damgası sütunları ikili (8) olarak tanımlanır.
Kimlik sütunları ya int ya da bigint olarak tanımlanır.
Ancak, bu sütunlardaki değerler kaynak sütun değerleriyle aynıdır.
Büyük Nesne Veri Türleri
Veri tipi image, text ve ntext sütunlarına __$operation = 1 veya __$operation = 3 olduğunda her zaman NULL değeri verilir. varbinary(max), varchar(max) veya nvarchar(max) veri tipli sütunlara, __$operation = 3 olduğunda NULL değeri atanır, eğer sütun güncelleme sırasında değişmedi. __$ işlem = 1 olduğunda, bu sütunlara silme anında değerleri atanır. Yakalama örneğine dahil edilen hesaplanan sütunların değeri her zaman NULL olur.
Varsayılan olarak, yakalanan bir sütuna tek bir INSERT, UPDATE, WRITETEXT veya UPDATETEXT ifadesinde eklenebilecek maksimum boyut 65.536 bayt veya 64 KB'dır. Bu boyutu daha büyük LOB verisini desteklemek için, Configure the max text repl size Server Configuration Seçeneği seçeneğini kullanarak daha büyük bir maksimum boyut belirtin. Daha fazla bilgi için, Maksimum metin repl boyutunu Yapılandırma Sunucu Yapılandırma Seçeneği'ne bakınız.
Veri Tanım Dili Değişiklikleri
Kaynak tablosundaki DDL değişiklikleri, örneğin sütun ekleme veya çıkarma gibi, cdc.ddl_history tablosunda kaydedilir. Bu değişiklikler değişim tablosuna uygulanmıyor. Yani, değişim tablosunun tanımı sabit kalır. Satır değişim tablosuna eklendiğinde, yakalama süreci, kaynak tabloyla ilişkili yakalanan sütun listesinde görünmeyen sütunları görmezden gelir. Kaynak tabloda artık olmayan bir sütun elde edilen sütun listesinde görünürse, sütuna null bir değer atanır.
Kaynak tablodaki bir sütunun veri türünün değiştirilmesi de cdc.ddl_history tablosunda kaydedilir. Ancak bu değişiklik, değişim tablosunun tanımını değiştirir. Yakalama süreci, kaynak tabloda yapılan DDL değişikliği için günlük kaydıyla karşılaştığında değişim tablosunda yakalanan sütunun veri türü değiştirilir.
Kaynak tabloda yakalanan bir sütunun veri tipini, veri türünün boyutunu azaltacak şekilde değiştirmeniz gerekiyorsa, değişim tablosundaki eşdeğer sütunun başarılı şekilde değiştirilebileceğinden emin olmak için aşağıdaki prosedürü kullanın.
Kaynak tabloda, sütundaki değerleri planlanan veri tipi boyutuna uyacak şekilde güncelleyin. Örneğin, veri türünü int'densmallint'e değiştirirseniz, değerleri smallint aralığına uyan bir boyuta güncellersiniz, -32.768 ile 32.767.
Değişim tablosunda aynı güncelleme işlemini eşdeğer sütuna gerçekleştirin.
Kaynak tablosunu yeni veri tipini belirterek değiştirin. Veri tipi değişikliği değişim tablosuna başarıyla iletilir.
Veri İşleme Dili Değişiklikleri
Değişiklik veri yakalama özellikli kaynak tabloda ekleme, güncelleme ve silme işlemleri yapıldığında, bu DML işlemlerinin kaydı veritabanı işlem günlüğünde görünür. Değişiklik veri yakalama süreci, işlem günlüğünden bu değişikliklerle ilgili bilgileri alır ve değişiklik tablosuna bir veya iki satır ekler ve değişikliği kaydeder. Girişler, kaynak tabloya bağlandıkları sırayla değişiklik tablosuna eklenir. Bununla birlikte, değişiklik tablosu girişlerinin commit işlemi genellikle her giriş için yapılmak yerine bir grup değişiklik üzerinde yapılmalıdır.
Bir ekleme işlemi, değişim tablosuna bir satır eklenmesiyle sonuçlanır; silme işlemi değişiklik tablosuna bir satır eklenir; SQL Server bir güncellemeyi "ertelenmiş güncelleme" olarak uygularsa, yani silme ve ekleme işlemleri çifti olarak, güncelleme işlemi değişim tablosuna iki satır eklenir: birinci satır ele geçirilen verilerin silinmesini, ikinci satır ise güncellenen, yakalanan verilerin eklenmesini yansıtır; SQL Server bir güncellemeyi "ertelenmiş güncelleme" olarak uygulamazsa, güncelleme işlemi değişiklik tablosuna iki satır eklenir: birinci satır güncellemeden önce yakalanan veriyi yansıtır, ikinci satır ise güncellemeden sonra yakalanan verileri yansıtır.
Değişim tablosu girişinde, __$start_lsn sütunu kaynak tablosundaki değişikliğe bağlı olan commit LSN'yi kaydetmek için kullanılır, __$command_id sütunu işlemi içindeki değişikliği sıralamak için kullanılır ve __$ işlem sütunu işlemi kaydetmek için kullanılır. Bu meta veri sütunları birlikte, kaynak değişikliklerinin commit sırasının korunmasını sağlamak için kullanılabilir. Yakalama süreci değişiklik bilgilerini işlem günlüğünden aldığı için, değişiklik tablosu girişlerinin ilgili kaynak tablo değişiklikleriyle eşzamanlı görünmediğini belirtmek önemlidir. Bunun yerine, ilgili değişiklikler, yakalama süreci işlem günlüğünden ilgili değişiklik girişlerini işledikten sonra asenkron olarak ortaya çıkar.
Ekleme ve silme işlemleri için, güncelleme maskesindeki tüm bitler ayarlanır. Güncelleme işlemlerinde, hem eski hem de yeni satırları güncelle maskası, güncelleme sırasında değişen sütunları yansıtacak şekilde değiştirilecektir.
Ayrıca Bkz.
sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)