Aracılığıyla paylaş


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ümleri Microsoft Fabric'te Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiSQL veritabanı

Sistem sürümü oluşturmanın doğası gereği, zamana bağlı tablolarla çalışırken dikkat edilmesi gereken bazı önemli noktalar ve sınırlamalar vardır:

  • Geçerli tabloyla geçmiş tablosu arasındaki kayıtları ilişkilendirmek için, zamana bağlı bir tablonun tanımlanmış bir birincil anahtarı olmalıdır. Geçmiş tablosunda tanımlanmış bir birincil anahtar olamaz.

  • ValidFrom ve ValidTo değerlerini kaydetmek için kullanılan SYSTEM_TIME 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.

  • Geçerli tablo bölümlenmişse, geçmiş tablosu varsayılan dosya grubunda oluşturulur çünkü bölümleme yapılandırması geçerli tablodan tarihçe tablosuna otomatik olarak çoğaltılmaz.

  • 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. Bu nedenle, sisteminizi tasarlarken bu veri türleri kullanılırken dikkatli olunmalıdır.

  • 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.

  • Geçerli tabloda ON DELETE CASCADE ve ON UPDATE CASCADE izin verilmez. Başka bir deyişle, zamansal tablo, yabancı anahtar ilişkisi içindeki (sys.foreign_key'de parent_object_id'a karşılık gelen) tabloya başvuruyorken, CASCADE seçeneklerine izin verilmez. Bu sınırlamayı aşmak için uygulama mantığını ya da tetikleyicilerden sonraki işlemlerle sys.foreign_keytablosundaki referenced_object_id’a karşılık gelen birincil anahtar tablosunda silme işlemi üzerinde tutarlılığı koruyun. Birincil anahtar tablosu zamana bağlıysa ve başvuru tablosu zamansal değilse, böyle bir sınırlama yoktur.
  • DML mantığının geçersiz kılınmasını önlemek için geçerli veya geçmiş tablosunda INSTEAD OF tetikleyicilerine izin verilmez. 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:

    • Kullanılabilirlik grupları: Tam olarak desteklenir

    • Veri yakalamayı ve değişiklik izlemeyi değiştirme: Yalnızca geçerli tabloda desteklenir

    • 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ı OLTP iş yükü için kullanılırken abone raporlama yükünü boşaltmaya (AS OF sorgulama dahil) hizmet eder. Dağıtım aracısı başlatıldığında, dağıtım aracısı durana kadar açık tutulan bir işlemi açar. ValidFrom ve ValidTo, dağıtım aracısı tarafından başlatılan ilk işlemin başlangıç zamanına 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 çoğaltması: Zaman veritabanları 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.

  • En uygun dizin oluşturma stratejisi, geçerli tablodaki kümelenmiş sütun deposu dizinini ve/veya B ağacı satır deposu dizinini ve geçmiş tablosunda, en iyi depolama boyutu ve performansı sağlamak için kümelenmiş sütun deposu dizinini içerir. Kendi geçmiş tablonuzu oluşturur/kullanırsanız, dönem sonu sütunuyla başlayan dönem sütunlarından oluşan bu tür bir dizin oluşturmanızı kesinlikle öneririz. Bu dizin zamansal sorgulamayı hızlandırır ve veri tutarlılığı denetiminin parçası olan sorguları hızlandırır. Varsayılan geçmiş tablosunda, dönem sütunlarına (bitiş, başlangıç) göre sizin için oluşturulmuş bir kümelenmiş satır deposu dizini vardır. En azından, kümelenmemiş bir satır tabanlı dizin önerilir.

  • 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ı
    • Dizinler
    • İstatistik
    • Kısıtlamaları denetleme
    • Tetikleyiciler
    • Bölümleme yapılandırması
    • İzinler
    • Satır düzeyi güvenlik önkoşulları
  • Geçmiş tablosu, geçmiş tabloları zincirinde geçerli tablo olarak yapılandırılamaz.

Not

Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, columnstore dizinleri veya bellek için iyileştirilmiş tablolar üzerindeki diğer 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.