Aracılığıyla paylaş


Azure SQL Veritabanı ile veri yakalamayı (CDC) değiştirme

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu makalede, tablolar ve satırlar değiştirildiğinde veritabanında etkinlik kaydetmek için Azure SQL Veritabanı değişiklik veri yakalamanın (CDC) nasıl uygulandığını öğrenin. SQL Server ve Azure SQL Yönetilen Örneği'nde nasıl uygulandığı da dahil olmak üzere CDC özelliği hakkında ayrıntılı bilgi için bkz. Değişiklik veri yakalama (CDC) nedir?

Genel bakış

Azure SQL Veritabanı'de, kaynak tabloların değişiklik verilerini yakalayan ve temizleyen SQL Server Aracısı işlerinin yerini bir değişiklik veri yakalama zamanlayıcı alır. Zamanlayıcı, yakalama ve temizleme işlemlerini veritabanı kapsamında otomatik olarak çalıştırarak dış bağımlılıklar olmadan güvenilirlik ve performans sağlar. Kullanıcılar gerektiğinde yakalama ve temizleme işlemlerini el ile başlatma seçeneğini korur.

Bu teknoloji tarafından kullanılan veri tüketicisine iyi bir örnek, ayıklama, dönüştürme ve yükleme (ETL) uygulamasıdır. ETL uygulaması, değişiklik verilerini SQL Server kaynak tablolarından bir veri ambarı veya veri reyonuna artımlı olarak yükler. Veri ambarı içindeki kaynak tabloların gösteriminin kaynak tablolardaki değişiklikleri yansıtması gerekse de, kaynağın bir çoğaltmasını yenileyen uçtan uca bir teknoloji uygun değildir. Bunun yerine, tüketicilerin verileri benzer olmayan hedef gösterimlerine uygulayabilmesi için yapılandırılmış güvenilir bir değişiklik veri akışına ihtiyacınız vardır. SQL Server değişiklik verileri yakalama bu teknolojiyi sağlar.

Azure SQL Veritabanı değişiklik verileri yakalama hakkında daha fazla bilgi edinmek için şu Kullanıma Sunulan Veri bölümüne bakın:

Veri akışı

Aşağıdaki çizimde, Azure SQL Veritabanı ile değişiklik verisi yakalamaya yönelik asıl veri akışı gösterilmektedir:

Değişiklik veri yakalama için veri akışını gösteren akış grafiğinin diyagramı.

Önkoşullar

İzinler

Azure SQL Veritabanı için değişiklik verisi yakalamayı etkinleştirmek amacıyla db_owner rolü gereklidir.

Azure SQL Veritabanı işlem gereksinimleri

CDC'yi, sanal çekirdek tabanlı satın alma modelinde tek veritabanları ve elastik havuzlar için herhangi bir hizmet katmanında Azure SQL Veritabanı'nda etkinleştirebilirsiniz.

DTU satın alma modelindeki veritabanları için CDC, S3 katmanındaki veya üzeri veritabanları için desteklenir. Alt çekirdek katmanları (Temel, S0, S1, S2) CDC için desteklenmez.

Azure SQL Veritabanı için CDC'yi etkinleştirme

Tek tek tablolar için yakalama örneği oluşturabilmeniz için önce Azure SQL Veritabanı için CDC'yi etkinleştirmeniz gerekir.

CDC'yi etkinleştirmek için SQL Server Management Studio (SSMS) aracılığıyla Azure SQL Veritabanınıza bağlanın. Yeni bir sorgu penceresi açın ve aşağıdaki T-SQL'i çalıştırarak CDC'yi etkinleştirin:

EXEC sys.sp_cdc_enable_db;
GO

Not

Bir veritabanının zaten etkin olup olmadığını belirlemek için, katalog görünümünde sütunu sorgular is_cdc_enabledsys.databases .

Veritabanı için değişiklik veri yakalama etkinleştirildiğinde, cdc schema, meta veri tabloları, cdc user ve diğer sistem nesneleri veritabanı için oluşturulur. cdc schema, değişiklik verilerini yakalama meta veri tablolarını içerir ve kaynak tablolar için cdc etkinleştirildikten sonra, tek tek değişiklik tabloları değişiklik verileri için bir depo görevi görür. ayrıca cdc schema değişiklik verilerini sorgulamak için kullanılan ilişkili sistem işlevlerini içerir.

Önemli

Değişiklik veri yakalama, cdc schema ve cdc user'nin özel kullanımını gerektirir. Bir veritabanında şu anda bir şema veya adlı cdc bir veritabanı kullanıcısı varsa, şema ve/veya kullanıcı bırakılana veya yeniden adlandırılana kadar veritabanı için cdc'yi etkinleştiremezsiniz.

Tablo için CDC'yi etkinleştir

Azure SQL Veritabanı için CDC'yi etkinleştirdikten sonra, veri değişikliklerini izlemek için bir veya daha fazla tablo seçerek CDC'yi tablo düzeyinde etkinleştirebilirsiniz. Saklı yordam sys.sp_cdc_enable_table kullanarak tek tek kaynak tablolar için bir yakalama örneği oluşturun.

Tablonun CDC'sini etkinleştirmek için aşağıdaki T-SQL'i çalıştırın:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

İpucu

Önceki örnekte, parametreyi olarak ayarlayarak açıkça bir NULL kullanılmaz, ancak değişiklik verilerine erişimi sınırlamak için bir denetleyici rol kullanabilirsiniz.

Yakalanacak kaynak tablodaki sütunlar

Varsayılan olarak, kaynak tablodaki tüm sütunlar yakalanan sütunlar olarak tanımlanır. Gizlilik veya performans nedeniyle gibi sütunların yalnızca bir alt kümesinin izlenmesi gerekiyorsa, sütunların alt kümesini belirtmek için @captured_column_list parametresini kullanın.

Bir tablodaki belirli bir sütun listesi için CDC'yi etkinleştirmek için aşağıdaki T-SQL'i çalıştırın:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

İpucu

Önceki örnekte @role_name açıkça kullanılmadığına ve parametreyi NULL olarak ayarlayarak değişiklik verilerine erişimi sınırlamak için bir kontrol rolü kullanabileceğinize dikkat edin.

Değişiklik tablosuna erişimi denetleme rolü

Adlandırılmış rolün amacı, değişiklik verilerine erişimi denetlemektir. Belirtilen rol mevcut bir sabit sunucu rolü veya veritabanı rolü olabilir. Belirtilen rol henüz yoksa, bu adın veritabanı rolü otomatik olarak oluşturulur. Kullanıcıların kaynak tablonun yakalanan tüm sütunlarında SELECT izni olmalıdır. Ayrıca, bir rol belirtildiğinde, sysadmin veya db_owner rolünün üyesi olmayan kullanıcıların da belirtilen rolün üyesi olması gerekir.

Gating rolü tanımlayan tablo için CDC'yi etkinleştirmek üzere aşağıdaki T-SQL'i çalıştırın:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Bir gating rolü kullanmak istemiyorsanız, @role_name parametresini açıkça NULL olarak ayarlayın.

Net değişiklikleri sorgulamak için bir işlev

Yakalama örneği, tanımlı bir aralık içinde gerçekleşen tüm değişiklik tablosu girdilerini döndürmek için her zaman tablo değerli bir işlev içerir. Bu işlev, yakalama örneği adı öğesine cdc.fn_cdc_get_all_changes_eklenerek adlandırılır. Daha fazla bilgi için bkz. cdc.fn_cdc_get_all_changes.

@supports_net_changes parametresi 1 olarak ayarlanırsa yakalama örneği için bir net changes işlevi de oluşturulur. Bu işlev, çağrıda belirtilen aralıkta değiştirilen her ayrı satır için yalnızca bir değişiklik döndürür. Daha fazla bilgi için cdc.fn_cdc_get_net_changes adresine bakın.

Net değişiklik sorgularını desteklemek için, kaynak tablonun satırları benzersiz olarak tanımlamak için birincil anahtarı veya benzersiz dizini olmalıdır. Benzersiz bir dizin kullanılırsa, dizinin adı @index_name parametresi kullanılarak belirtilmelidir. Birincil anahtarda veya benzersiz dizinde tanımlanan sütunlar, yakalanacak kaynak sütunlar listesine eklenmelidir.

Net değişiklikleri destekleyen bir tablo için CDC'yi etkinleştirmek için aşağıdaki T-SQL'i çalıştırın:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Değişiklik verisi yakalama, var olan bir birincil anahtara sahip bir tabloda etkinleştirilirse ve alternatif benzersiz bir dizini tanımlamak için @index_name parametresi kullanılmazsa, değişiklik verileri yakalama özelliği birincil anahtarı kullanır. Birincil anahtarda sonraki yapılacak değişiklikler için, önce tabloya ait değişiklik verilerini yakalama özelliği devre dışı bırakılmadan izin verilmez. Değişiklik veri yakalama yapılandırıldığında net değişiklik sorguları için destek istenip istenmediğine bakılmaksızın bu durum geçerlidir.

Değişiklik verisi yakalama için etkinleştirdiğiniz sırada bir tabloda birincil anahtar yoksa, sonradan eklenen birincil anahtar değişiklik verisi yakalama tarafından görmezden gelinir. Değişiklik verisi yakalama, tablo etkinleştirildikten sonra oluşturulan birincil anahtarı kullanmadığından, anahtar ve anahtar sütunları kısıtlama olmadan kaldırılabilir.

sys.sp_cdc_enable_table stored procedure argümanları ile ilgili daha fazla bilgi için bkz. sys.sp_cdc_enable_table.

İpucu

Kaynak tablonun değişiklik verisi yakalama için zaten etkinleştirilip etkinleştirilmediğini belirlemek için katalog görünümündeki sütunu is_tracked_by_cdc inceleyinsys.tables.

Azure SQL Veritabanı için CDC'yi devre dışı bırakma

Azure SQL Veritabanı için CDC'yi devre dışı bırakmak, cdc user, cdc schema ve dış zamanlayıcı yakalama ve temizleme süreçleri dahil olmak üzere ilişkili tüm değişiklik verisi yakalama meta verilerini kaldırır. Ancak, değişiklik verisi yakalamayla oluşturulan tüm gating rolleri otomatik olarak kaldırılmaz ve açıkça silinmelidir.

Not

Bir veritabanında CDC'nin etkinleştirilip etkinleştirilmediğini belirlemek için katalog görünümünde sütunu sorgular is_cdc_enabledsys.databases .

CDC'yi veritabanı düzeyinde devre dışı bırakmadan önce tek tek tablolar için CDC'yi devre dışı bırakmanız gerekmez.

CDC'yi veritabanı düzeyinde devre dışı bırakmak için aşağıdaki T-SQL'i çalıştırın:

EXEC sys.sp_cdc_disable_db;
GO

İpucu

CDC'yi veritabanı düzeyinde devre dışı bırakdıktan sonra, CDC özelliğini bir kez daha kullanmak istiyorsanız tek tek tablolar için CDC'yi yeniden etkinleştirmeniz gerekir.

CDC'yi yönetme

Azure SQL Veritabanı'de CDC, veritabanı tablolarınızdaki değişiklikleri izlemek ve yönetmek için önemli bir özelliktir. Geleneksel SQL Server ortamlarından farklı olarak, Azure SQL Veritabanı, SQL Server Agent işlerine dayanmaktan ziyade, CDC görevlerini gerçekleştirmek için bir değişiklik veri yakalama zamanlayıcısı kullanır. Bu zamanlayıcı, veritabanınızdaki CDC tabloları için düzenli yakalama ve temizleme işlemlerini otomatik olarak başlatır ve dış bağımlılıklar olmadan güvenilirlik ve performans sağlar.

Otomatik CDC yakalama ve temizleme

Azure SQL Veritabanı'daki CDC yakalama işi sorunsuz çalışır ve değişiklikleri verimli bir şekilde izlemek için her 20 saniyede bir çalışır. Temizlik işlemi düzenli olarak her saatte bir çalıştırılır ve CDC tablolarınızın optimize kalmasını sağlar. Kullanıcılar CDC yönetiminin el ile müdahale edilmeden otomatik olarak gerçekleştiğine emin olabilir.

Önemli

Eğer sunucusuz bir veritabanında CDC etkinleştirilmişse ve sistem duraklatılmış durumdaysa, CDC çalışmaz. CDC taraması otomatik duraklatma özelliğini etkilemez.

El ile CDC denetimi

CDC otomatik olarak çalıştırılırken, kullanıcılar el ile CDC işlemlerini isteğe bağlı olarak gerçekleştirme esnekliğini korur. sp_cdc_scan ve sp_cdc_cleanup_change_tables yordamları, yakalama ve temizleme görevlerini gerektiği gibi tetiklemenize olanak sağlar.

CDC'yi izleme

Azure SQL Veritabanı, CDC etkinliklerini izlemek için değerli araçlar sağlar. İki dinamik yönetim görünümü, sys.dm_cdc_log_scan_sessions ve sys.dm_cdc_errors, CDC süreçleri hakkında içgörüler sunarak, veri değişikliklerinize tam görünürlük sağlar.

CDC Özelleştirmesi

Azure SQL Veritabanı CDC yönetimini kolaylaştırsa da bazı sınırlamalar vardır:

  • CDC yakalama ve temizleme işlerinin sıklığı özelleştirilemiyor.
  • pollinginterval ve continuous değerleri, Azure SQL Veritabanı'nda yakalama ve temizleme işleri için geçerli değildir.
  • Yakalama işi girdisinin tablodan cdc.cdc_jobs kaldırılması arka plan yakalama işini durdurmaz.
  • Temizleme işi girdisi bırakılıyorsa temizleme işi durdurulur.
  • cdc.cdc_jobs tablosu, cdc şemasında yer alır, msdb'de değil.

Bu sınırlamalara rağmen, aşağıdaki seçenekleri özelleştirmeye devam edebilirsiniz:

  • cdc.cdc_jobs Geçerli yapılandırma ayrıntıları için tabloyu sorgula.
  • maxtrans ve maxscans seçeneklerini, sp_cdc_change_job saklı yordamını kullanarak ayarlayın.
  • sp_cdc_drop_job ve sp_cdc_add_job gerektiğinde kullanarak işleri yönetin.

Performansla ilgili dikkat edilmesi gerekenler ve öneriler

Azure SQL Veritabanı için değişiklik verilerini yakalamanın etkinleştirilmesi, SQL Server veya Azure SQL Yönetilen Örneği için CDC'yi etkinleştirmeye benzer bir performans etkisine sahiptir. Ancak CDC'yi etkinleştirirken performans etkisini etkileyen çeşitli faktörler vardır:

  • Azure SQL Veritabanı CDC özellikli tabloların sayısı.

  • İzlenen tablolardaki değişikliklerin sıklığı veya işlem hacmi. Aktif işlemler, işlem tamamlanana ve CDC taraması güncellenene kadar veya işlem durdurulana kadar günlük kesilmesini engeller. Bu, işlem günlüğünün normalden daha fazla dolmasıyla sonuçlanabilir ve işlem günlüğünün dolmaması için izlenmesi gerekir.

  • CDC yapıtları (ct tabloları, cdc_jobs vb.) aynı veritabanında depolandığından kaynak veritabanında boş alan olduğundan emin olun.

  • İster tek bir veritabanınız olsun ister elastik havuzun parçası olsun.

  • Elastik havuzdaki veritabanları aralarında kaynak paylaşır (disk alanı gibi), bu nedenle birden çok veritabanında CDC'yi etkinleştirmek, elastik havuz disk boyutunun en büyük boyutuna ulaşma riskiyle karşı karşıyadır. CPU, bellek ve günlük aktarım hızı gibi kaynakları izleyin. Daha fazla bilgi için bkz . Yoğun elastik havuzlarda kaynak yönetimi.

  • Elastik havuzlardaki veritabanlarıyla ilgilenirken, CDC özellikli tabloların sayısını ve bu tabloların ait olduğu veritabanlarının sayısını göz önünde bulundurmak çok önemlidir. İş yükünüzü değerlendirmenizi ve elastik havuzu ölçeklendirme gibi gerekli önlemleri almanızı öneririz. Daha fazla bilgi için bkz. Azure SQL Veritabanı'da elastik havuz kaynaklarını ölçeklendirme.

Önemli

Bu noktalar genel yönergelerdir. Belirli bir iş yükü için performansı iyileştirmeye yönelik hassas yönergeler için Microsoft desteğine ulaşın.

CDC'yi Azure SQL Veritabanı kullanırken aşağıdaki en iyi yöntemleri göz önünde bulundurun:

  • İş yükünüz için uygun SLO'ları belirlemenize yardımcı olmak için üretimdeki veritabanlarında CDC'yi etkinleştirmeden önce iş yükünüzü kapsamlı bir şekilde test edin. Azure SQL Veritabanı işlem boyutları hakkında daha fazla bilgi için bkz. Hizmet katmanları.

  • Azure SQL Veritabanınızda CDC etkinleştirildikten sonra önceki performans düzeyini korumak için sanal çekirdek sayısını ölçeklendirmeyi veya Hiper Ölçek gibi daha yüksek bir veritabanı katmanına geçmeyi göz önünde bulundurun. Daha fazla bilgi için bkz. VCore satın alma modeli - Azure SQL Veritabanı ve Hiperv-Ölçek hizmet seviyesi.

  • Alan kullanımını yakından izleyin. Daha fazla bilgi için bkz. Azure SQL Veritabanı veritabanları için dosya alanını yönetme.

  • Günlük oluşturma hızını izleyin; daha fazla bilgi için bkz: Kullanıcı iş yükleri ve iç işlemler tarafından kaynak tüketimi.

  • CDC tarama ve temizleme işlemleri, normal veritabanı iş yükünüzün (kaynakları da tüketen) bir parçasıdır. İşlem hacmine bağlı olarak, tarama ve temizleme işlemlerinin iş yüküne ayak uyduramaması nedeniyle performansta önemli ölçüde düşüş olabilir çünkü satırların tamamı değişiklik tablolarına eklenir ve güncelleme işlemleri için ön görüntü de dahil edilir. İş yükünüzü değerlendirmenizi ve önceki önerilere göre gerekli önlemleri almanızı öneririz. Daha fazla bilgi için bu makaledeki CDC yönetimi bölümüne bakın.

Önemli

Zamanlayıcı, yakalama ve temizlemeyi SQL Veritabanı içinde otomatik olarak çalıştırır. CDC yakalama işi 20 saniyede bir, temizleme işi ise saatte bir çalışır.

  • Gecikme süresinin artmasını önlemek için CDC özellikli veritabanlarının sayısının elastik havuza ayrılan sanal çekirdek sayısını aşmadığından emin olun. Daha fazla bilgi edinmek için bkz . Yoğun elastik havuzlarda kaynak yönetimi.

  • Temizleme işleminin değişiklik tablosundaki değişikliklere ayak uydurabilmesini sağlamak için iş yükünüz ve performans düzeyinize bağlı olarak CDC saklama süresini varsayılan üç günden daha küçük bir sayıya değiştirmeyi göz önünde bulundurun. Veritabanı boyutunu izlerken daha düşük bir saklama süresi sağlamak iyi bir uygulamadır.

  • Değişiklik tablolarında değişiklikler doldurulduğunda hizmet düzeyi sözleşmesi (SLA) sağlanmadı. Altsaniyelik gecikme süresi de desteklenmez.

Bilinen sorunlar ve sınırlamalar

Eklenen sütunlarda varsayılan kısıtlamalar

Bir tabloda CDC etkinleştirildiğinde ve varsayılan kısıtlamaya sahip null atanamayan bir sütun eklendiğinde, var olan satır verileri varsayılan kısıtlamanın değerine sahip olur. Ancak CDC, varsayılan değer yerine NULL satırlar için kullanacaktır. Bu yalnızca DDL uygulanmadan önce mevcut veriler için geçerlidir. Geçici bir çözüm olarak, mevcut satırlara değişmeyen UPDATE deyimler uygulayın veya tablonun kümelenmiş dizininde bir ALTER INDEX ... REBUILD gerçekleştirin. Kümelenmiş dizin yoksa ALTER TABLE ... REBUILD öğesini yığında kullanın.

Agresif günlük kısaltma

Azure SQL Veritabanı'nda değişiklik veri yakalamayı (CDC) etkinleştirdiğinizde Hızlandırılmış Veritabanı Kurtarma'nın (ADR) agresif günlük kesme özelliği devre dışı bırakılır. Bunun nedeni, CDC taramasının veritabanı işlem günlüğüne erişmesidir. Aktif işlemler, işlem onaylanana ve CDC taraması tamamlanana ya da işlem durdurulana kadar işlem günlüğü kısaltılmasını engeller.

Azure SQL Veritabanı hizmet katmanı

CDC, sanal çekirdek tabanlı satın alma modelindeki herhangi bir hizmet katmanındaki veritabanları ve elastik havuzlar için destekleniyor olsa da, DTU satın alma modelinde S3'tendüşük veritabanları (Temel, S0, S1, S2 gibi) desteklenmez.

Azure SQL Veritabanı günlük sınırları

Hızlandırılmış Veritabanı Kurtarma ve CDC uyumludur. Ancak, CDC etkinleştirildiğinde ADR'nin agresif günlük kesme özelliği devre dışı bırakılır. Bunun nedeni, CDC taramasının veritabanı işlem günlüğüne aktif olarak erişmesi ve bu günlükle etkileşim kurmasıdır, bu da ADR'nin agresif günlük kesme davranışını önler.

CDC'yi etkinleştirdiğinizde daha yüksek işlem günlüğü kullanımı gözlemleyebilirsiniz. Tüm iş yüklerinizin gereksinimleri için yeterli işlem günlüğü alanının kullanılabilir olduğundan emin olmak için ölçeği daha yüksek bir hizmet katmanına veya işlem boyutuna artırmanız gerekebilir.

İpucu

daha yüksek işlem günlüğü aktarım hızı ve daha hızlı işlem işleme süreleri nedeniyle iş yükünüz daha yüksek genel performans gerektiriyorsa Hiper Ölçek hizmet katmanını kullanın.

Çevrimiçi işlemler

Çevrimiçi dizin işlemleri desteklenmiyor

Veritabanında değişiklik veri yakalama etkinleştirildiğinde çevrimiçi dizin işlemleri desteklenmez. Hata kodu 18773, "%.*ls" sütunu için komut oluşturma sırasında metin bilgisi kayıtları bulunamadı, ID %d.

Yakalama ve temizleme özelleştirmesi

Azure SQL Veritabanı'lerde CDC için yakalama ve temizleme işlemlerinin sıklığını yapılandırmak mümkün değildir. Zamanlayıcı yakalama ve temizlemeyi otomatik olarak çalıştırır.

Azure SQL Veritabanı'nda yük devretme

Yerel veya GeoDR yük devretme senaryolarında, veritabanınızda CDC etkinse, veri değişikliklerini yakalama ve temizleme işlemi, yük devretme gerçekleştikten sonra yeni ana veritabanında otomatik olarak yapılır.

Microsoft Entra Kimlik

Not

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Azure SQL Veritabanı'nda bir Microsoft Entra kullanıcısı olarak bir veritabanı oluşturur ve üzerinde CDC'yi etkinleştirirseniz, bir SQL kullanıcısı (örneğin, sysadmin rolündeki biri) CDC ögelerini devre dışı bırakamaz veya üzerinde değişiklik yapamaz. Ancak, başka bir Microsoft Entra kullanıcısı aynı veritabanında CDC'yi etkinleştirebilir/devre dışı bırakabilir.

Benzer şekilde, sql kullanıcısı olarak bir veritabanı oluşturursanız, Microsoft Entra kullanıcısı olarak değişiklik verilerini yakalamayı etkinleştirme/devre dışı bırakma özelliği çalışmaz.

Azure SQL Veritabanı'de Microsoft Entra kullanıcısı olarak bir veritabanı oluşturursanız CDC'yi etkinleştirme işlemi başarısız olur, CDC'yi etkinleştirmeyin ve veritabanını geri yükledikten sonra CDC'yi etkinleştirmeyi deneyin.

Bu sorunu çözmek için Microsoft Entra yönetici hesabınızla veritabanınıza bağlanın ve aşağıdaki T-SQL'i çalıştırın:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Belirli bir zaman noktasına geri yükleme (PITR)

Azure SQL Veritabanı'nda SQL kullanıcısı olarak CDC'yi etkinleştirdiyseniz, veritabanının bir alt çekirdek SLO'suna geri yüklenmediği sürece, belirli bir noktaya geri yükleme (PITR) işlemi sırasında CDC korunur. Bir alt çekirdek SLO'ya geri yüklendiğinde CDC ile ilgili dosyalar mevcut olmaz.

Veritabanınızda CDC'yi bir Microsoft Entra kullanıcısı olarak etkinleştirirseniz, belirli bir noktaya geri yükleme (PITR) bir alt seviye SLO'da mümkün değildir. Veritabanını kaynakla aynı veya daha yüksek SLO'ya geri yükleyin ve gerekirse CDC'yi devre dışı bırakın.

Sorun giderme

Bu bölümde, Azure SQL Veritabanı'da CDC ile ilişkili yönergeler ve sorun giderme adımları sağlanır. CDC ile ilgili hatalar, yakalama işleminin düzgün çalışmasını engelleyebilir ve veritabanı işlem günlüğünün genişletilmesine yol açabilir.

Bu hataları incelemek için dinamik yönetim görünümünü sys.dm_cdc_errors sorgulayabilirsiniz. sys.dm_cdc_errors Dinamik yönetim görünümü herhangi bir hata döndürürse, azaltma adımlarını anlamak için aşağıdaki bölüme bakın.

Not

Belirli bir hata kodu hakkında daha fazla bilgi için bkz . Veritabanı Altyapısı olayları ve hataları.

Bu bölümde yer alan farklı sorun giderme kategorileri şunlardır:

Kategori Açıklama
Meta veriler değiştirildi İzlenen tablo değiştirildiğinde veya kaldırıldığında CDC ile ilgili sorunları hafifletme yöntemlerine ilişkin bilgiler içerir.
Veritabanı alanı yönetimi Veritabanı alanı tükendiğinde sorunların nasıl azaltıldığına ilişkin bilgiler içerir.
CDC sınırlaması CDC sınırlamalarının neden olduğu sorunları azaltma hakkında bilgi içerir.

Meta veriler değiştirildi

Hata 200/208 - Geçersiz nesne adı

  • Neden: CDC meta verileri bırakıldığında hata oluşabilir. CDC'nin düzgün çalışması için, tabloları değiştirme, CDC sistemi saklı yordamları, varsayılan CDC schema izinler (cdc user) gibi sys.database_principalsCDC meta verilerini el ile değiştirmemeniz veya yeniden adlandırmamanız cdc usergerekir.

  • Öneri: Bu sorunu gidermek için veritabanınız için CDC'yi devre dışı bırakmanız ve yeniden etkinleştirmeniz gerekir. Veritabanı için değişiklik veri yakalamayı etkinleştirirken, veritabanı için cdc şemasını, cdc kullanıcısını, meta veri tablolarını ve diğer sistem nesnelerini oluşturur. Veritabanı için CDC etkinleştirildikten sonra tek tek tablolar için CDC'yi el ile yeniden etkinleştirmeniz gerekir.

Not

sys.objects sistem katalog görünümünde bulunan nesneler is_ms_shipped=1 ve schema_name=cdc değiştirilmemeli veya silinmemelidir.

Hata 1202 - Veritabanı sorumlusu yok veya kullanıcı üye değil

  • Neden: CDC kullanıcısı bırakıldığında hata oluşabilir. CDC'nin düzgün çalışması için, gibi CDC schemacdc meta verilerini el ile değiştirmemeniz, tabloları, CDC sistemi saklı yordamlarını, varsayılan cdc user izinleri (sys.database_principals) değiştirmemeniz veya yeniden adlandırmamanız cdc usergerekir.

  • Öneri: cdc kullanıcısının veritabanınızda mevcut olduğundan ve db_owner rolünün atandığından emin olun. Kullanıcı oluşturmak için cdc, cdc kullanıcısı oluşturma ve rol atama örneğine bakın.

Hata 15517 - Sorumlu mevcut olmadığından veritabanı sorumlusu olarak yürütülemiyor

  • Neden: Bu tür bir sorumlu kimliğine bürünülemez veya izniniz yok. CDC meta verileri bırakıldığında veya artık db_owner rolünün bir parçası olmadığında hata oluşabilir. CDC'nin düzgün çalışması için, gibi CDC schemaherhangi bir CDC meta verisini el ile değiştirmemeniz, tabloları, CDC sistemi saklı yordamlarını, varsayılan cdc user izinleri (sys.database_principals) değiştirmemeniz veya yeniden adlandırmamanız cdc usergerekir.

  • Öneri: cdc kullanıcısının veritabanınızda mevcut olduğundan ve db_owner rolünün atandığından emin olun. Kullanıcı oluşturmak için cdc, cdc kullanıcısı oluşturma ve rol atama örneğine bakın.

Hata 18807 - Çoğaltma sistemi tablosu için nesne kimliği bulunamıyor

  • Neden: Bu hata, SQL Server veritabanı altyapısı '%s' çoğaltma sistemi tablosunu bulamıyor veya bu tabloya erişemiyorsa oluşuyor. Tablo eksik veya ulaşılamıyor olabilir. CDC'nin düzgün çalışması için, CDC schema, tabloları değiştirme, CDC sistem saklı yordamları, varsayılan cdc user izinleri (sys.database_principals) gibi CDC meta verilerini el ile değiştirmeyin veya cdc useryeniden adlandırmayın.

  • Öneri: Sistem tablosunun mevcut olduğunu ve tabloyu doğrudan sorgulayarak erişilebilir olduğunu doğrulayın. sys.objects sistem kataloğunu sorgulayın, is_ms_shipped=1 ve schema_name=cdc ile koşul ifadesini ayarlayarak CDC ile ilgili tüm nesneleri listeleyin. Sorgu herhangi bir nesne döndürmezse, veritabanınız için CDC'yi devre dışı bırakmanız ve yeniden etkinleştirmeniz gerekir. Veritabanı için değişiklik verilerini yakalamayı etkinleştirmek, veritabanı için , cdc schema, meta veri tablolarını ve diğer sistem nesnelerini oluştururcdc user. Veritabanı için CDC etkinleştirildikten sonra tek tek tablolar için CDC'yi el ile yeniden etkinleştirmeniz gerekir.

Hata 21050 - Yalnızca sysadmin veya db_owner sabit sunucu rolünün üyeleri bu işlemi gerçekleştirebilir

  • Neden: Kullanıcı cdc veritabanı rolünden db_owner veya sunucu rolünden sysadmin kaldırılmıştır.

  • Öneri: Kullanıcıya rolün cdc atandığından emin olundb_owner. Kullanıcı oluşturmak için cdc, cdc kullanıcısı oluşturma ve rol atama örneğine bakın.

Veritabanı Alanı Yönetimi

Hata 1105 - Dosya grubu dolu olduğundan veritabanında nesne için alan ayrılamadı

  • Neden: Bu hata, veritabanının birincil dosya grubunun alanı dolduğunda ve SQL Veritabanı bu dosya grubu içindeki bir nesne (tablo veya dizin gibi) için daha fazla alan ayıramadığında oluşur.

  • Öneri: Bu sorunu çözmek için veritabanınızdaki gereksiz verileri silip yer açın. Dosya grubundaki güvenli bir şekilde kaldırılabilir kullanılmayan tabloları, dizinleri veya diğer nesneleri tanımlayın. Alan kullanımını yakından izleme, daha fazla bilgi için bkz. Azure SQL Veritabanı veritabanları için dosya alanını yönetme.

    Gereksiz verileri/nesneleri bırakmanın bir seçenek olmaması durumunda daha yüksek bir veritabanı katmanına ölçeklendirmeyi göz önünde bulundurun.

Önemli

Azure SQL Veritabanı (tek veritabanı) işlem boyutları (SLO) hakkında ayrıntılı bilgi için bkz. Sanal çekirdek satın alma modelini kullanan tek veritabanları için kaynak sınırları ve DTU satın alma modelini kullanan tek veritabanları için kaynak sınırları - Azure SQL Veritabanı.

Hata 1132 - Elastik havuz depolama sınırına ulaştı

  • Neden: Elastik havuzunuzdaki depolama kullanımı ayrılan sınırı aştığında bu hata oluşur.

  • Öneri: Bu sorunu çözmek için, yalnızca elastik havuzun parçası olan veritabanlarında gerekli verileri tutmak için veri arşivleme ve temizleme stratejileri uygulayın. Alan kullanımını yakından izleyin. Daha fazla bilgi için bkz. Azure SQL Veritabanı veritabanları için dosya alanını yönetme.

    Verilerin arşivlenmesi veya gereksiz verilerin/nesnelerin bırakılması bir seçenek değilse, daha yüksek bir veritabanı katmanına ölçeklendirmeyi göz önünde bulundurun.

Önemli

Azure SQL Veritabanı (tek veritabanı) işlem boyutları (SLO) hakkında ayrıntılı bilgi için bkz. Sanal çekirdek satın alma modelini kullanan elastik havuzlar için kaynak sınırları ve DTU satın alma modelini kullanan elastik havuzlar için kaynak sınırları.

CDC sınırlamaları

Hata 2628 - dize veya ikili veriler tabloda kesilebilir

  • Neden: DDL deyimlerini kullanarak CDC özellikli tablonun sütunlarının boyutunu değiştirmek, sonraki CDC yakalama işleminde sorunlara neden olabilir. sys.dm_cdc_errors Dinamik Yönetim Görünümü (DMV), 2628 ve 8115 hataları gibi bildirilen sorunlar için herhangi bir CDC'yi denetlemek için kullanışlıdır.

  • Öneri: Sütun boyutunda herhangi bir değişiklik yapmadan önce, değişikliğin CDC değişiklik tablolarındaki mevcut verilerle uyumlu olup olmadığını değerlendirmeniz gerekir. Bu sorunu gidermek için veritabanınız için CDC'yi devre dışı bırakmanız ve yeniden etkinleştirmeniz gerekir. Bir veritabanı veya tablo için CDC'yi etkinleştirme hakkında daha fazla bilgi için bu makaledeki Azure SQL Veritabanı için CDC'yi etkinleştirme ve Tablo için CDC'yi etkinleştirme bölümlerine bakın.

Hata 22830 - Kimliğe bürünme bağlamındaki yerleşik 'SUSER_SNAME' işlevi SQL Server'ın bu sürümünde desteklenmiyor

  • Neden: Bu hata, SUSER_SNAME() ve create_table çağrısını içeren bir kullanıcı tetikleyicisi veritabanındayken CDC etkinleştirilirken oluşur. Tetikleyicileri aşağıdaki Transact-SQL betiğiyle listeleyebilirsiniz. Bu komut, nesne tetikleyicisinin ayrıntılarını ve buna karşılık gelen object_idöğesini verir:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Tetikleyici tanımlarını aldıktan sonra, aşağıdaki betikle yapılan SYSTEM_USER çağrıları arayabilirsiniz:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Öneri: Bu sorunu çözmek için, önceki betikten alınan her kullanıcı tetikleyicisi için bu adımları izleyin.

    • Tetikleyiciyi devre dışı bırakma
    • CDC'yi etkinleştirme
    • Tetikleyiciyi yeniden etkinleştirme

Daha fazla bilgi için bkz. TRIGGER DEVRE DIŞI BIRAK.

Hata 913 - Sistem CLR veri türüne sahip bir tablo için değişiklikler işlenirken CDC yakalama işi başarısız oluyor

  • Neden: Bu hata, bir tabloda CDC etkinleştirilirken ve sistem CLR veri türüne sahip DML değişiklikleri yapılırken, CDC yakalama işi diğer tablolarla ilgili değişiklikleri işlerken aynı tabloda DDL değişiklikleri yapıldığında oluşur.

  • Öneri: Önerilen adımlar, DML'yi tabloya sessizce eklemek, değişiklikleri işlemek için bir yakalama işi çalıştırmak, tablo için DDL çalıştırmak, DDL değişikliklerini işlemek için bir yakalama işi çalıştırmak ve ardından DML işlemeyi yeniden etkinleştirmektir. Daha fazla bilgi için bkz. CDC yakalama işi, sistem CLR veri türüne (geometri, coğrafya veya hierarchyid) sahip bir tablo için değişiklikleri işlerken başarısız oluyor.

Kullanıcı oluşturma ve rol atama

cdc user kaldırıldıysa, kullanıcıyı el ile geri ekleyebilirsiniz.

Aşağıdaki T-SQL betiğini kullanarak bir kullanıcı (cdc) oluşturun ve uygun rolü (db_owner) atayın.

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Rol üyeliğini denetleme ve ekleme

cdc kullanıcısının sysadmin veya db_owner rolüne ait olup olmadığını doğrulamak için aşağıdaki T-SQL sorgusunu çalıştırın.

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

cdc Kullanıcı her iki role de ait değilse, db_owner kullanıcıya cdc rolünü eklemek için aşağıdaki T-SQL sorgusunu yürütün.

EXEC sp_addrolemember 'db_owner' , 'cdc';