Skip to main content

Command Palette

Search for a command to run...

Temporal Table (System-Versioned) ile Otomatik Veri Geçmişi

Published
3 min read
S

I’m a passionate software engineer specializing in SQL change management, database security, and DevOps automation. With over 17 years of experience in the banking sector, I focus on building tools and processes that make database deployments safer, more auditable, and automated.

As the creator of SQL Change Guard, I develop solutions that use risk scoring and AI-powered code analysis to detect dangerous SQL scripts before they reach production. I’m dedicated to helping teams minimize downtime and data loss through smarter change governance.

When I’m not coding, I enjoy sharing insights about secure development practices, WPF desktop applications, and integrating modern CI/CD pipelines.

Feel free to connect or reach out at info@sqlchangeguard.com

"Bu kayıt ne zaman değişti, önceki değeri neydi?" sorusu veritabanı yönetiminin en sık karşılaşılan sorularından biri. Temporal Table bu soruyu doğrudan yanıtlayan yerleşik bir SQL Server özelliği.

Temporal Table Nedir? SQL Server 2016 ile gelen System-Versioned Temporal Table, bir tablodaki her satırın tüm geçmişini otomatik olarak saklar. Bir satır değiştirildiğinde eski değer sistem tarafından tarih damgasıyla ayrı bir history tablosuna yazılır. Manuel trigger yazmaya gerek yok. CDC kurmaya gerek yok. SQL Server her şeyi otomatik yönetiyor.

Nasıl Oluşturulur? sql-- Temporal table oluşturma CREATE TABLE dbo.UrunFiyatlari ( UrunID INT NOT NULL PRIMARY KEY, UrunAdi NVARCHAR(200) NOT NULL, Fiyat DECIMAL(10,2) NOT NULL, KategoriID INT NOT NULL, -- Sistem sütunları GecerlilikBaslangic DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL, GecerlilikBitis DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (GecerlilikBaslangic, GecerlilikBitis) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.UrunFiyatlariGecmis)); Bu kadar. Artık tablodaki her INSERT, UPDATE ve DELETE işlemi otomatik olarak geçmiş tablosuna yazılır.

Geçmişe Sorgu Atmak Temporal Table'ın en güçlü özelliği zaman bazlı sorgulama. sql-- Belirli bir andaki veriyi göster SELECT * FROM dbo.UrunFiyatlari FOR SYSTEM_TIME AS OF '2024-06-15 12:00:00';

-- İki tarih arasındaki tüm değişiklikleri göster SELECT * FROM dbo.UrunFiyatlari FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31' ORDER BY UrunID, GecerlilikBaslangic;

-- Belirli bir ürünün fiyat geçmişi SELECT UrunID, Fiyat, GecerlilikBaslangic AS DegisiklikZamani, GecerlilikBitis AS GecerlilikSonu FROM dbo.UrunFiyatlari FOR SYSTEM_TIME ALL WHERE UrunID = 42 ORDER BY GecerlilikBaslangic;

Mevcut Tabloya Temporal Özelliği Eklemek sql-- Mevcut tabloya sistem sütunları ekle ALTER TABLE dbo.Musteriler ADD GecerlilikBaslangic DATETIME2 GENERATED ALWAYS AS ROW START CONSTRAINT df_Musteriler_Baslangic DEFAULT '2000-01-01 00:00:00.0000000' NOT NULL, GecerlilikBitis DATETIME2 GENERATED ALWAYS AS ROW END CONSTRAINT df_Musteriler_Bitis DEFAULT '9999-12-31 23:59:59.9999999' NOT NULL, PERIOD FOR SYSTEM_TIME (GecerlilikBaslangic, GecerlilikBitis);

-- System versioning'i aktif et ALTER TABLE dbo.Musteriler SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.MusterilerGecmis));

Değişiklik Yönetimiyle İlişkisi Temporal Table değişiklik yönetiminin veri katmanını güçlendirir. Kim hangi tabloyu değiştirdi sorusu DDL Trigger ile yanıtlanır. Hangi satır nasıl değişti sorusu ise Temporal Table ile yanıtlanır. İkisi birlikte kullanıldığında hem yapısal hem verisel değişikliklerin tam geçmişi elde edilir.

Dikkat Edilmesi Gerekenler Depolama alanı: Her değişiklik history tablosuna yazıldığından depolama ihtiyacı artar. Büyük ve sık değişen tablolarda bu ciddi boyutlara ulaşabilir. Geçmiş tablosu için uygun bir retention policy tanımlanmalı. Performans etkisi: Her DML işleminde arka planda history tablosuna yazma yapılır. Genellikle kabul edilebilir düzeyde ama yoğun ortamlarda izlenmeli. Temporal table değişikliği: Temporal table'ı değiştirmek (kolon ekleme, silme) sistem versioning'in geçici olarak kapatılmasını gerektirebilir. Bu işlem de değişiklik yönetim sürecine tabi olmalı.

Sonuç Temporal Table, veri geçmişi tutmanın en az maliyetli ve en güvenilir yöntemi. Değişiklik yönetim altyapısının veri katmanına eklenmesi gereken güçlü bir araç. Detaylı bilgi için: sqlchangeguard.com

More from this blog

S

SQL Change Guard

81 posts