Zamana bağlı tabloyla ilgili dikkat edilmesi gerekenler ve sınırlamalar

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiSQL database in Microsoft Fabric

Zamansal tablolarla çalışırken, sistem sürümlemenin doğası nedeniyle aşağıdaki hususlar ve sınırlamalara dikkat edin:

  • Bir zaman tablosunda, kayıtları mevcut tablo ile tarih tablosu arasında ilişkilendirmek için birincil anahtarı tanımlanmalıdır. Geçmiş tablosunda tanımlanmış bir birincil anahtar olamaz.

  • SYSTEM_TIME ve ValidFrom değerlerini kaydetmek için kullanılan ValidTo dönem sütunları datetime2veri türüyle tanımlanmalıdır.

  • Zamana bağlı söz dizimi, veritabanında yerel olarak depolanan tablolarda veya görünümlerde çalışır. Bağlantılı sunucudaki tablolar veya dış tablolar gibi uzak nesnelerle, FOR yan tümcesini veya nokta koşullarını doğrudan sorguda kullanamazsınız.

  • Geçmiş tablosunun adı geçmiş tablosu oluşturulurken belirtilirse, şemayı ve tablo adını belirtmeniz gerekir.

  • Varsayılan olarak, geçmiş tablosu PAGE sıkıştırılmıştır.

  • Mevcut tablo bölümlenmişse, geçmiş tablosu varsayılan dosya grubunda oluşturulur çünkü bölümleme yapılandırması mevcut tablodan tarih tablosuna otomatik olarak kopyalanmaz.

  • Zamana bağlı ve geçmiş tabloları FileTable veya FILESTREAM kullanamaz. FileTable ve FILESTREAM, SQL Server dışında veri işlemeye izin verir, bu nedenle sistem sürümü oluşturma garanti edilemez.

  • Düğüm veya kenar tablosu zamansal tablo olarak oluşturulamaz veya değiştirilemez.

  • Zamana bağlı tablolar (n)varchar(max), varbinary(max), (n)metinve görüntügibi blob veri türlerini desteklerken, önemli depolama maliyetlerine neden olur ve boyutları nedeniyle performans etkileri olur. Sisteminizi tasarlarken, bu veri türlerini kullanırken dikkatli olun.

  • Geçmiş tablosu geçerli tabloyla aynı veritabanında oluşturulmalıdır. Bağlı sunucular üzerinde zamansal sorgulama desteklenmez.

  • Geçmiş tablosunda kısıtlamalar (birincil anahtar, yabancı anahtar, tablo veya sütun kısıtlamaları) olamaz.

  • Dizine alınan görünümler, zamansal sorguların (FOR SYSTEM_TIME yan tümcesi kullanan sorgular) üzerinde desteklenmez.

  • Çevrimiçi seçeneğin (WITH (ONLINE = ON) sürüm yönetimi yapılan bir geçici tabloda ALTER TABLE ALTER COLUMN üzerinde hiçbir etkisi yoktur. ALTER sütun, ONLINE seçeneği için hangi değerin belirtildiğinden bağımsız olarak çevrimiçi bir işlem olarak gerçekleştirilmez.

  • INSERT ve UPDATE ifadeleri SYSTEM_TIME dönem sütunlarına başvuramaz. Bu sütunlara doğrudan değer ekleme girişimleri engellenir.

  • TRUNCATE TABLE desteklenmezken SYSTEM_VERSIONINGONdesteklenir.

  • Geçmiş tablosundaki verilerin doğrudan değiştirilmesine izin verilmez.

  • Veri işleme dili (DML) mantığının geçersiz kılınmasını önlemek için, INSTEAD OF tetikleyicilerine ne geçerli tabloda ne de geçmiş tablosunda izin verilir. AFTER tetikleyicilerine yalnızca geçerli tabloda izin verilir. Bu tetikleyiciler, DML mantığının geçersiz kılınmasını önlemek için geçmiş tablosunda engellenir.

  • Çoğaltma teknolojilerinin kullanımı sınırlıdır:

    • Erişilebilirlik grupları: Tam destekli

    • Değişiklik veri yakalama ve değişiklik takibi: Yalnızca mevcut tabloda destekleniyor

    • Anlık görüntü ve işlem çoğaltması: Yalnızca zamansal olarak etkinleştirilmemiş tek bir yayımcı için desteklenir ve zamansal etkinleştirilmiş bir abone ile. Yerel sistem saati bağımlılığı nedeniyle birden çok abonenin kullanımı desteklenmez ve bu da tutarsız zamana bağlı verilere yol açabilir. Bu durumda yayımcı, çevrimiçi işlem işleme (OLTP) iş yükü için kullanılırken, abone ise raporlama yükünü ( AS OF sorgulamaları dahil) devralmak için kullanılır. Dağıtım ajanı başladığında, dağıtım ajanı durana kadar açık tutulan bir işlem açar. ValidFrom ve ValidTo dağıtım ajanının başlattığı ilk işlemin başlangıç zamanına kadar doldurulur. Uygulamanız veya kuruluşunuz için ValidFrom ve ValidTo'in geçerli sistem zamanına yakın bir süreyle doldurulması önemliyse, dağıtım aracısını sürekli çalıştırmak yerine bir zamanlamaya göre çalıştırmak tercih edilebilir. Daha fazla bilgi için bkz. Zamansal tablo kullanım senaryoları.

    • Birleştirme replikasyonu: Zamansal tablolar için desteklenmiyor

  • Normal sorgular yalnızca geçerli tablodaki verileri etkiler. Geçmiş tablosundaki verileri sorgulamak için zamana bağlı sorgular kullanmanız gerekir. Daha fazla bilgi için bkz. Sistem sürümüne sahip bir zamana bağlı tablodaki verileri sorgulama.

  • Optimal bir indeksleme stratejisi, mevcut tabloda kümelenmiş bir columnstore index veya B-tree rowstore index ve tarih tablosunda kümelenmiş columnstore index içerir; böylece optimal depolama boyutu ve performansı elde edilir. Kendi geçmiş tablonuzu oluşturursanız veya kullanıyorsanız, dönem sonu sütunundan başlayan dönem sütunlarından oluşan bu tür bir indeks oluşturun. Bu indeks, zamansal sorgulama ve veri tutarlılığı kontrolüne dahil olan sorguları hızlandırır. Varsayılan geçmiş tablosu, dönem sütunlarına (son, başlangıç) dayalı olarak kümelenmiş bir sıra deposu indeksi oluşturur. En azından, kümelenmemiş bir sıra deposu indeksi kullanın.

  • Geçmiş tablosu oluşturulduğunda, aşağıdaki nesneler/özellikler geçerli tablodan geçmiş tablosuna çoğaltılmaz:

    • Dönem tanımı
    • Kimlik tanımı
    • Indexes
    • Statistics
    • Kısıtlamaları kontrol etme
    • Triggers
    • Bölümleme yapılandırması
    • Permissions
    • Satır düzeyi güvenlik önkoşulları
  • Bir tarih tablosunu tarih tabloları zincirinde mevcut tablo olarak yapılandıramazsınız.

Note

Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, sütun deposu dizinleri veya bellek için iyileştirilmiş tablolardaki dizinler için geçerli değildir. Daha fazla bilgi için SQL Server ve Azure SQL dizin mimarisi ve tasarım kılavuzuna bakın.