Temporal Table MSSQL
Temporal Table, veritabanında yanlışlıkla yapılan update,delete işlemlerini kolaylıkla geri yüklememiz için çıkarılmıştır. Bir bakıma tablo bazlı restore işlemi yapmamıza imkan sağlayacak bu özellik SQL Server 2016 ile geldi .
Temporal table şema yapısının aynısını başka bir tabloda tutar buna History Table denir.
Çoğumuzun başına gelmiştir .Update yapılırken where koşulunu atladığımızda istenmedik sonuçlar doğurabiliyor .Bu durumlarda veritabanının bütün tablolarını dönüyor ve gerekli tabloyu aktarabiliyorduk fakat bu özellik sayesinde veritabanının hepsini dönmek yerine temporal table özelliğini aktif ederek sadece update yapılan rowları geri getirebiliriz.
Temporal table avantajlarından bahsettim şimdi de birkaç limit ve kısıtlamalarına değineceğim;
*Ana tabloda primary key tanımlamalısınız.
*Partition yapısını kullanıyorsanız history table default file group da oluşturulur.
*History table primary key,foreign key ,table veya column constraint içermez.
*İndexed view desteği bulunmamaktadır.
*Truncate table komutu kullanılmamaktadır.(SYSTEM_VERSIONING=OFF komutunu kullanarak truncate yapılabilir.)
*ALTER TABLE ,ALTER COLUMN işlemlerinde (ONLİNE=ON) işleminin etkisi yoktur. ALTER komutlarında online işlemleri yokmuş gibi işlem yapılır.
*Eklenen Tarih kolonlarına İnsert ve Update işlemi yapılamaz.
* Merge replication desteği yoktur.
*Page bazlı sıkıştırılma yapar.
*Temporal Table tanımlarken başlangıç ve bitiş kolonları eklememiz gerekiyor ve bu kolonların veri tipi datetime2 olması gerekiyor.
Yukarıda birkaç limit ve faydalarından bahsettim şimdi nasıl yapılacağına geçelim.
CREATE TABLE TEMP0RAL_TABLE ( id int not null primary key clustered, Name nvarchar(30), addresss nvarchar(200), startdate datetime2 generated always as row start , enddate datetime2 generated always as row end, period for system_time(startdate,enddate) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.TEMP0RAL_TABLE_history));
Yukarıda ki scripti çalıştırdığımız da aşağıda ki gibi tablomuzun oluştuğunu göreceğiz.