sys.sp_cdc_enable_table (Transact-sql)

Sağlar, geçerli veritabanında belirtilen kaynak tablo için veri yakalama Değiştir. Tablo Değiştir veri yakalama için etkin olduğunda, tabloya uygulanan her veri düzenleme dili (dml) işlem kaydını hareket günlüğüne yazılır. Değiştir veri yakalama işlemini günlükten bu bilgileri alır ve bir işlevler kümesi kullanılarak erişilen tablolarda değiştirmek için yazar.

Değişiklik veri yakalama her sürümünde kullanılabilir değil Microsoft SQL Server. Sürümü tarafından desteklenen özellikleri listesi için SQL Serverbakın SQL Server 2012 Sürümleri Tarafından Desteklenen Özellikler.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

sys.sp_cdc_enable_table 
  [ @source_schema = ] 'source_schema', 
  [ @source_name = ] 'source_name' ,
  [ @role_name = ] 'role_name'
  [,[ @capture_instance = ] 'capture_instance' ]
  [,[ @supports_net_changes = ] supports_net_changes ]
  [,[ @index_name = ] 'index_name' ]
  [,[ @captured_column_list = ] 'captured_column_list' ]
  [,[ @filegroup_name = ] 'filegroup_name' ]
  [,[ @partition_switch = ] 'partition_switch' ]

Bağımsız değişkenler

  • @ source_schema ='source_schema'
    Hangi kaynak tablonun ait olduğu şema addır. source_schemaise sysname, hiçbir varsayılan ile ve boş olamaz.

  • source_name @ ='source_name'
    Etkinleştirmek istediğiniz kaynak tablo adını Değiştir veri yakalama olduğunu. source_nameise sysname, hiçbir varsayılan ile ve boş olamaz.

    source_namegeçerli veritabanında bulunması gerekir. Tablolar içinde cdc şema değişiklik veri yakalama için etkin.

  • @role_name ='role_name'
    Kapı erişimi verileri değiştirmek için kullanılan veritabanı rolü addır. role_name ise sysnameve belirtilmelidir. Açıkça kümesi boş, hiçbir gating rolü Değiştir veri erişimi sınırlamak için kullanılır.

    Şu anda rolü varsa kullanılır. Rol yoksa, belirtilen adı taşıyan bir veritabanı rolü oluşturma denemesi yapılır. Rol adı, rolü oluşturma girişiminde bulunmadan önce beyaz alan dizenin sağ kırpıyordu. Arayan veritabanı içindeki rolü oluşturma yetkisi saklı yordam işlemi başarısız olur.

  • @ capture_instance ='capture_instance'
    Örnek-özel değişiklik veri yakalama nesneleri adlandırmak için kullanılan yakalama örneğinin adıdır. capture_instanceise sysnameve boş olamaz.

    Adı belirtilmezse, kaynak şema adı artı kaynak tablo adı biçiminde türetilir schemaname_sourcename. capture_instance100 karakterden fazla olamaz ve veritabanı içinde benzersiz olmalıdır. Belirtilen ya da türetilmiş, capture_instancedize sağındaki herhangi bir beyaz alan kırpıyordu.

    Bir kaynak tabloda en çok iki yakalama örnekleri olabilir. Daha fazla bilgi için sys.sp_cdc_help_change_data_capture (Transact-sql).

  • **@ supports_net_changes =**supports_net_changes
    Gösterir olup olmadığını net değişiklikleri için sorgulama bu yakalama örneği için etkin olması için destek. supports_net_changes ise bittablonun birincil anahtarı olan veya tablo benzersiz bir dizin kullanarak saptanmıştır varsa 1 varsayılan @index\_nameparametresi. Aksi takdirde, parametre 0 varsayılan.

0, Yalnızca destek işlevleri tüm değişiklikleri sorgu üretilir.

1, İçin net değişiklik sorgu için gerekli işlevleri de üretilir.

Eğer supports\_net\_changes1 değeri index\_name belirtilmesi gerekir, ya da kaynak tablonun birincil anahtar tanımlanmış olmalıdır.
  • **@ index_name ='**index_name'
    Kaynak tablodaki satırların benzersiz olarak tanımlamak için benzersiz bir dizin adı. index_name ise sysnameve null olabilir. Belirtilmişse, index_namekaynak tablo geçerli benzersiz bir dizin olmalı. Eğer index_namebelirtilirse, belirtilen dizin sütunları önceliklidir üzerinde tanımlı herhangi bir birincil anahtar sütunları tablo benzersiz satır tanımlayıcısı olarak.

  • @ captured_column_list ='captured_column_list'
    Değişim tablosuna dahil edilecek kaynak tablo sütunları tanımlar. captured_column_listise nvarchar(max)ve null olabilir. BOŞ ise, tüm sütunları değiştirme tablosuna dahil edilir.

    Sütun adları, kaynak tablodaki geçerli sütunu olmalıdır. Birincil anahtar dizini içinde tanımlanan sütunları veya tarafından başvuruda bulunulan Dizinde tanımlanan sütunları index_nameeklenmelidir.

    captured_column_listsütun adlarının virgülle ayrılmış bir listesi var. Tek sütun adları listesi içinde isterseniz alıntı ya da çift tırnak işaretleri kullanarak ("") veya köşeli ayraçlar ([]). Bir sütun adı bir katıştırılmış virgül içeriyorsa, sütun adı tırnak içine gerekir.

    captured_column_listAşağıdaki ayrılmış sütun adlarını içeremez: __$ start_lsn, __$ end_lsn, __$ seqval, __$ işlem, ve __$ update_mask.

  • @ filegroup_name ='filegroup_name'
    Değişikliği tablo için yakalama örneği oluşturulan için filegroup olur. filegroup_name ise sysnameve null olabilir. Belirtilmişse, filegroup_namegeçerli veritabanı için tanımlanmış olması gerekir. null varsayılan filegroup kullanılır.

    Değişiklik veri yakalama değiştirmek için tablolar ayrı bir dosya grubu oluşturmanızı öneririz.

  • @ allow_partition_switch='allow_partition_switch'
    alter table anahtar bölümü komut değişiklik veri yakalama için etkinleştirilmiş bir tablo karşı yürütülebilecek olup olmadığını belirtir. allow_partition_switchise bit, 1 varsayılan.

    Nonpartitioned tablo anahtarı ayarı her zaman 1'dir ve gerçek ayar yoksayılır. Geçiş açık olarak ayarlanmışsa geçiş ayarı sayıldı belirtmek için 22857 uyarı, nonpartitioned bir tablo için 0 verilir. Geçiş açıkça 0 uyarı bölümlenmiş bir tablo için ayarlanmışsa, 22356, kaynak tablo Bölüm geçiş işlemleri izin verilmeyen belirtmek için verilir. Son olarak, geçiş ayarı ya da ayarlanmış açıkça 1 ya da 1 varsayılan izin verilen ve etkin tablo bölümlere bölüm anahtarlarını bloke belirtmek için 22855 verilen uyarı. Herhangi bir bölüm anahtarları oluşursa, değişiklik veri yakalama geçiş kaynaklanan değişiklikleri izlemek değil. Değişiklik veri tüketildiği zaman bu veri tutarsızlıkları neden olur.

    Önemli notÖnemli

    ANAHTAR bölümü, bir meta verileri işlem olmakla birlikte, veri değişiklikleri neden olur. Bu işlemle ilişkili değişiklikler değişiklik veri yakalanan değil veri değişiklik tabloları yakalamak. Üç bölüm olan bir tablo düşünün ve bu tabloya yapılan değişiklikler. Yakalama işlemi, kullanıcı ekleme, güncelleştirme ve silme işlemleri tablo karşı yürütülen izleyecek. Ancak, eğer bir bölüm dışında başka açık olduğundan (toplu silme gerçekleştirmek için örneğin), bu işlemin bir parçası olarak silinmiş satırlar değişikliği tablo ele değil olarak taşınan satırları tablosu. Benzer şekilde, tabloya satırlar doldurulmuş yeni bir bölüm eklenirse, bu satırlar değişim tablosunda yansıtılmaz. Değişiklikleri uygulama tarafından tüketilen ve hedefe uygulanan bu veri tutarsızlığına yol açabilir.

Dönüş Kodu Değerleri

0 (başarılı) veya 1 (hata)

Sonuç Kümeleri

Hiçbiri

Açıklamalar

Bir tablo için veri yakalama Değiştir etkinleştirmeden önce veritabanının etkinleştirilmesi gerekir. Veritabanı Değiştir veri yakalama için etkin olup olmadığını belirlemek için query is_cdc_enabled sütununda sys.databases Katalog görünümü. Veritabanı kullanın sys.sp_cdc_enable_db saklı yordamı.

Bir tablo için veri yakalama Değiştir etkinleştirildiğinde, değişikliği tablo ve bir ya da iki sorgu işlevleri üretilir. Değişikliği tablo işlem günlüğünden yakalama işlemi tarafından çıkarılan kaynak tabloda değişiklikler için bir depo görevi görür. Sorgu işlevler değişikliği tablodan veri ayıklamak için kullanılır. Bu işlevlerin adları türetilir capture_instanceparametresi aşağıdaki şekillerde:

  • Tüm değişiklikleri işlevi: cdc.fn_cdc_get_all_changes_<capture_instance>

  • Net değişiklik fonksiyonu: değiştirir<capture_instance>

sys.sp_cdc_enable_table yakalama ve temizleme işlerini veritabanı için kaynak tablo ilk tablo Değiştir veri yakalama için etkin veritabanı ve veritabanı için hiçbir işlem yayınları mevcut ise de oluşturur. Bu ayarlar is_tracked_by_cdc sütununda sys.tables katalog görünüm 1.

[!NOT]

SQL ServerBir tablo için veri yakalama Değiştir etkinleştirildiğinde çalışan ajan yok. Ancak, yakalama işlemini değil işlem günlüğü süreci ve sürece değişiklik tablo girdileri yazma SQL ServerAracısı çalışıyor.

İzinler

Üyelik db_owner veritabanı rolü.

Örnekler

A.Sadece gerekli parametreler belirterek etkinleştirme değişiklik veri yakalama

Aşağıdaki örnek etkinleştirir değiştirmek için veri yakalama HumanResources.Employeetablosu. Yalnızca gerekli parametreleri belirtilir.

USE AdventureWorks2012;
GO
EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'HumanResources'
  , @source_name = N'Employee'
  , @role_name = N'cdc_Admin';
GO

USE AdventureWorks2012;
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 belirterek etkinleştirme değişiklik veri yakalama

Aşağıdaki örnek etkinleştirir değiştirmek için veri yakalama HumanResources.Departmenttablosu. Tüm parametreler dışında @allow\_partition\_switchbelirtilir.

USE AdventureWorks2012;
GO
EXEC 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

USE AdventureWorks2012;
GO
EXEC 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

Ayrıca bkz.

Başvuru

sys.sp_cdc_disable_table (Transact-sql)

sys.sp_cdc_help_change_data_capture (Transact-sql)

CDC.fn_cdc_get_all_changes_<capture_instance> (Transact-sql)

değiştirir<capture_instance> (Transact-sql)

sys.sp_cdc_help_jobs (Transact-sql)