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.
Mevcut veritabanında belirtilen kaynak tablo için değişiklik veri yakalamayı etkinleştirir. Bir tablo değişiklik veri yakalaması için etkinleştirildiğinde, tabloya uygulanan her veri işleme dili (DML) işleminin kaydı işlem günlüğüne yazılır. Değişiklik veri yakalama süreci, bu bilgiyi günlükten alır ve bir dizi fonksiyon kullanılarak erişilen değişiklik tablolarına yazar.
Değişiklik veri yakalama, SQL Server'ın her sürümünde mevcut değildir. SQL Server'daki sürümler tarafından desteklenen özelliklerin listesi için bkz. SQL Server 2025'in Sürümleri ve desteklenen özellikleri.
Transact-SQL söz dizimi kuralları
Syntax
sys.sp_cdc_enable_table
[ @source_schema = ] N'source_schema'
, [ @source_name = ] N'source_name'
[ , [ @capture_instance = ] N'capture_instance' ]
[ , [ @supports_net_changes = ] supports_net_changes ]
, [ @role_name = ] N'role_name'
[ , [ @index_name = ] N'index_name' ]
[ , [ @captured_column_list = ] N'captured_column_list' ]
[ , [ @filegroup_name = ] N'filegroup_name' ]
[ , [ @allow_partition_switch = ] allow_partition_switch ]
[ , [ @enable_extended_ddl_handling = ] enable_extended_ddl_handling ]
[ ; ]
Arguments
[ @source_schema = ] N'source_schema'
Kaynak tablonun ait olduğu şemanın adı.
@source_schemasysname'dir, varsayılan yoktur ve olamaz NULL.
[ @source_name = ] N'source_name'
Değişiklik veri yakalamayı etkinleştirmek için kaynak tablonun adı.
@source_namesysname'dir, varsayılan yoktur ve bu olamaz NULL.
@source_name mevcut veritabanında bulunmalıdır. Şemadaki cdc tablolar değişiklik veri yakalaması için etkinleştirilemez.
[ @capture_instance = ] N'capture_instance'
Örnekle özel değişim veri yakalama nesnelerini adlandırmak için kullanılan yakalama örneğinin adı.
@capture_instancesistem adı ve olamaz NULL.
Belirtilmezse, ad kaynak şema adından ve biçimindeki <schemaname>_<sourcename>kaynak tablo adından türetilir.
@capture_instance 100 karakteri geçemez ve veritabanında benzersiz olmalıdır. Belirtilmiş ya da türetilmiş olsun, @capture_instance telin sağındaki herhangi bir beyaz boşluktan çıkarılmıştır.
Bir kaynak tabloda en fazla iki yakalama örneği bulunabilir. Daha fazla bilgi için bkz. sys.sp_cdc_help_change_data_capture.
[ @supports_net_changes = ] supports_net_changes
Bu yakalama örneği için net değişiklikler için sorgulama desteğinin etkinleştirilip etkinleştirilmeyeceğini gösterir.
@supports_net_changes, tablonun birincil anahtarı varsa veya tablonun @index_name parametresi kullanılarak tanımlanmış benzersiz bir indeks varsa 1. Aksi takdirde, parametresi varsayılan olarak olarak 0gösterilir.
- Eğer
0, yalnızca tüm değişiklikler için sorgulama için destek fonksiyonları oluşturulur. - Eğer
1, net değişiklikler için sorgulamak için gereken fonksiyonlar da üretilir.
Eğer @supports_net_changes olarak 1ayarlanmışsa, @index_name belirtilmeli veya kaynak tabloda tanımlanmış bir birincil anahtar olmalıdır.
@supports_net_changes olarak ayarlandığında1, değişim tablosunda ek bir kümelenmiş olmayan indeks oluşturulur ve net değişiklikler sorgu fonksiyonu oluşturulur. Bu endeks korunması gerektiğinden, net değişikliklerin etkinleştirilmesi CDC performansı üzerinde olumsuz bir etki yaratabilir.
[ @role_name = ] N'role_name'
Veri değişikliği için erişim kapısını açmak için kullanılan veritabanı rolünün adı.
@role_namesysname'dir ve belirtilmesi gerekir. Açıkça olarak , NULLolarak ayarlandığında, değişiklik verilerine erişimi sınırlamak için bir geçiş rolü kullanılmaz.
Eğer rol şu anda varsa, kullanılıyor. Eğer rol yoksa, belirtilen isimle bir veritabanı rolü oluşturma girişimi yapılır. Rol adı, rol yaratmaya çalışmadan önce dizinin sağındaki beyaz boşluktan kesilir. Eğer arayan veritabanında bir rol oluşturma yetkisi yoksa, saklanan prosedür işlemi başarısız olur.
[ @index_name = ] N'index_name'
Kaynak tabloda satırları benzersiz şekilde tanımlamak için kullanılacak benzersiz bir indeksin adı.
@index_namesysname'dir ve olabilir NULL. Belirtilirse, @index_name kaynak tabloda geçerli bir benzersiz indeks olmalıdır. Eğer @index_name belirtilirse, tanımlanan indeks sütunları, tablo için benzersiz satır tanımlayıcısı olarak tanımlanmış herhangi bir birincil anahtar sütununun önüne geçer.
[ @captured_column_list = ] N'captured_column_list'
Değişim tablosuna dahil edilecek kaynak tablo sütunlarını belirler.
@captured_column_listnvarchar(max) ve olabilir NULL. Eğer NULL, tüm sütunlar değişim tablosuna dahil edilir.
Sütun adları kaynak tabloda geçerli sütunlar olmalıdır. Birincil anahtar indeksinde tanımlanan sütunlar veya @index_name tarafından referans edilen bir indekste tanımlanan sütunlar dahil edilmelidir.
@captured_column_list , sütun isimlerinin virgülle ayrılmış bir listesidir. Listedeki bireysel sütun isimleri, isteğe bağlı olarak çift tırnak işareti ("") veya kare parantez ([]) kullanılarak alıntılanabilir. Bir sütun adı gömülü virgül içeriyorsa, sütun adı tırnak edilmelidir.
@captured_column_list aşağıdaki ayrılmış sütun adlarını içeremez: __$start_lsn, __$end_lsn, __$seqval__$operation, , ve __$update_mask.
[ @filegroup_name = ] N'filegroup_name'
Yakalama örneği için oluşturulan değişim tablosu için kullanılacak dosya grubu.
@filegroup_namesysname'dir ve olabilir NULL. Belirtilirse, mevcut veritabanı için @filegroup_name tanımlanmalıdır. Eğer NULL, varsayılan dosya grubu kullanılır.
Değişiklik veri yakalama değişim tabloları için ayrı bir dosya grubu oluşturulmasını öneririz.
[ @allow_partition_switch = ] allow_partition_switch
SWITCH PARTITION komutunun ALTER TABLE değişim veri yakalama için etkinleştirilmiş bir tabloya karşı çalıştırılıp çalıştırılamadığını gösterir.
@allow_partition_switchbittir ve varsayılan olarak .1
Bölünmemiş tablolar için anahtar ayarı her zaman 1'dir ve gerçek ayar göz ardı edilir. Anahtar açıkça bölünmemiş bir tablo için ayarlanmışsa 0 , anahtar ayarının göz ardı edildiğini belirtmek için 22857 uyarısı verilir. Anahtar açıkça bölümlenmiş bir tablo için ayarlanmışsa 0 , kaynak tablodaki bölüm anahtarlama işlemlerinin yasak olduğunu belirtmek için 22356 uyarısı verilir. Son olarak, anahtar ayarı açıkça ayarlıysa 1 veya varsayılan 1 olarak ayarlanmışsa ve etkin tablo bölümlenmişse, bölüm anahtarlarının engellenmeyeceğini belirtmek için 22855 uyarısı verilir. Herhangi bir bölüm anahtarı olursa, değişim veri yakalama anahtardan kaynaklanan değişiklikleri takip etmez. Bu, değişiklik verisi tüketildiğinde veri tutarsızlıklarına yol açar.
SWITCH PARTITION bir meta veri işlemidir, ancak veri değişikliklerine neden olur. Bu işlemle ilişkili veri değişiklikleri, değişiklik veri yakalama değişiklik tablolarında kaydedilmez. Üç bölümden oluşan bir tablo düşünün ve bu tabloda değişiklikler yapılır. Yakalama süreci, kullanıcı tarafından tabloya karşı yürütülen ekleme, güncelleme ve silme işlemlerini izler. Ancak, bir bölüm başka bir tabloya aktarılırsa (örneğin, toplu silme yapmak için), bu işlemin parçası olarak taşınan satırlar değişim tablosunda silinmiş satır olarak yakalanmaz. Benzer şekilde, önceden doldurulmuş satırlara sahip yeni bir bölüm tabloya eklenirse, bu satırlar değişim tablosunda yansıtılmaz. Bu, değişiklikler bir uygulama tarafından tüketilip bir hedefe uygulandığında veri tutarsızlığına yol açabilir.
SQL Server'da bölüm değiştirmeyi etkinleştirirseniz, yakın gelecekte bölme ve birleştirme işlemlerine de ihtiyacınız olabilir. Replika edilen veya CDC etkinleştirilmiş bir tabloda bölme veya birleştirme işlemi yapmadan önce, ilgili bölümün bekleyen çoğaltılmış komutları olmadığından emin olun. Bölme ve birleştirme işlemleri sırasında bölümde hiçbir DML işleminin yürütülmediğinden de emin olmanız gerekir. Eğer log okuyucu veya CDC yakalama işi işlememiş işlemler varsa ya da DML işlemleri, aynı bölümde bölünme veya birleştirme işlemi yürütülürken çoğaltılmış veya CDC etkinleştirilmiş bir tablonun bölümünde gerçekleştiriliyorsa, log okuyucu ajanı veya CDC yakalama işinde işlem hatasına (hata 608 - Bölüm Kimliği için katalog girişi bulunmadı) yol açabilir. Hatayı düzeltmek için aboneliğin yeniden başlatılmasını veya bu tablo veya veritabanında CDC'nin devre dışı bırakılması gerekebilir.
[ @enable_extended_ddl_handling = ] enable_extended_ddl_handling
Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir.
Dönüş kodu değerleri
0 (başarı) veya 1 (başarısızlık).
Sonuç kümesi
Yok.
Remarks
Değişiklik veri yakalama için bir tabloyu etkinleştirmeden önce, veritabanının etkinleştirilmiş olması gerekir. Veritabanının değişiklik veri yakalama için etkin olup olmadığını belirlemek için, is_cdc_enabled katalog görünümündeki sütunu sorgulayın. Veritabanını etkinleştirmek için sys.sp_cdc_enable_db stored prosedürünü kullanın.
Bir tablo için değişiklik veri yakalaması etkinleştirildiğinde, bir değişiklik tablosu ve bir veya iki sorgu fonksiyonu oluşturulur. Değişim tablosu, yakalama süreciyle işlem günlüğünden çıkarılan kaynak tablo değişiklikleri için bir depo görevi görür. Sorgu fonksiyonları, değişim tablosundan veri çıkarmak için kullanılır. Bu fonksiyonların isimleri @capture_instance parametresinden aşağıdaki şekillerde türetilmiştir:
- Tüm değişiklikler işlevi şunlardır:
cdc.fn_cdc_get_all_changes_<capture_instance> - Net değişiklikleri fonksiyonu:
cdc.fn_cdc_get_net_changes_<capture_instance>
sys.sp_cdc_enable_table Ayrıca, kaynak tablo veritabanında değişim veri yakalama için etkinleştirilen ilk tablo ise ve veritabanı için işlem yayınları yoksa, veritabanı için yakalama ve temizleme işleri oluşturulur.
is_tracked_by_cdc katalog görünümündeki sütunu olarak ayarlıyor1.
SQL Server Agent'ın CDC bir tablo için etkinleştirildiğinde çalışmak zorunda değil. Ancak, yakalama süreci, SQL Server Agent çalışmadıkça işlem günlüğünü işlemez ve değişiklik tablosuna giriş yazmaz.
Permissions
Sabit db_owner veritabanı rolünde üyelik gerektirir.
Examples
A. Sadece gerekli parametreleri belirterek değişiklik veri yakalamayı etkinleştirin
Aşağıdaki örnek, tablo için değişiklik verilerinin kaydedilmesini HumanResources.Employee mümkün kılar. Sadece gerekli parametreler belirtilmiştir.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_cdc_enable_table
@source_schema = N'HumanResources',
@source_name = N'Employee',
@role_name = N'cdc_Admin';
GO
B. Ek isteğe bağlı parametreler belirleyerek değişiklik veri yakalamayı etkinleştirin
Aşağıdaki örnek, tablo için değişiklik verilerinin kaydedilmesini HumanResources.Department mümkün kılar.
@allow_partition_switch hariç tüm parametreler belirtilmiştir.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_cdc_enable_table
@source_schema = N'HumanResources',
@source_name = N'Department',
@role_name = N'cdc_admin',
@capture_instance = N'HR_Department',
@supports_net_changes = 1,
@index_name = N'AK_Department_Name',
@captured_column_list = N'DepartmentID, Name, GroupName',
@filegroup_name = N'PRIMARY';
GO