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ği
SQL 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
veValidTo
değerlerini kaydetmek için kullanılanSYSTEM_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 tablodaALTER 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
veUPDATE
ifadeleriSYSTEM_TIME
dönem sütunlarına başvuramaz. Bu sütunlara doğrudan değer ekleme girişimleri engellenir.TRUNCATE TABLE
desteklenmezkenSYSTEM_VERSIONING
ON
desteklenir.Geçmiş tablosundaki verilerin doğrudan değiştirilmesine izin verilmez.
- Geçerli tabloda
ON DELETE CASCADE
veON UPDATE CASCADE
izin verilmez. Başka bir deyişle, zamansal tablo, yabancı anahtar ilişkisi içindeki (sys.foreign_key
'deparent_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şlemlerlesys.foreign_key
tablosundakireferenced_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
veValidTo
, dağıtım aracısı tarafından başlatılan ilk işlemin başlangıç zamanına doldurulur. Uygulamanız veya kuruluşunuz içinValidFrom
veValidTo
'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.
İlgili içerik
- Zamansal tablolar
- Sistem sürümüne sahip zamana bağlı tabloları kullanmaya başlama
- Zamansal tablo sistemi tutarlılık denetimleri
- Zamanlı tablolarla Bölme
- Zaman uyumlu tablo güvenliği
- Sistem sürümündeki zamana bağlı tablolarda geçmiş verileri saklamayı yönetme
- Bellek için iyileştirilmiş tablolar sistem sürümüne sahip zamana bağlı tabloları
- Zamansal tablo meta veri görünümleri ve işlevleri