İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • DevOps
  • Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
Bulut Altyapı DevOps Azure SQL, Çift Yazma, Expand-and-Contract, Query Store, Şema Değişikliği Aşkın KILIÇ 06/09/2026 0 Yorumlar

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
📑 İçindekiler
  1. Örnek: Name Alanını İkiye Ayırmak
  2. 1. Aşama: Yeni Sütunları Ekleyin
  3. 2. Aşama: Eski ve Yeni Sütunlara Birlikte Yazın
  4. 3. Aşama: Mevcut Satırları Doldurun
  5. 4. Aşama: Okumaları Yeni Sütunlara Taşıyın
  6. 5. Aşama: Name Sütununa Yazmayı Bırakın
  7. 6. Aşama: Doğrulayın ve Eski Şemayı Kaldırın
  8. Sonuç: Asıl Değer Sıralamada
  9. İlgili İçerikler
  10. Kaynaklar ve İleri Okuma
⏱️ 5 dk okuma📅 6 Eylül 2026

Veritabanı şeması zamanla değişir. Gereksinimler olgunlaşır, ürünler gelişir, işletmeler birleşir, yeni sistemlerle bütünleşir veya farklı pazarlara açılır. Sorun, bu değişikliği veritabanına bağlı uygulamaları ve kullanıcıları kesintiye uğratmadan yapmaktır.

Azure SQL için önerilen yöntem, değişikliği tek seferde yapmak yerine aşamalara ayırmaktır. “Expand-and-contract” adı verilen bu yöntemde önce yeni yapı eklenir, eski ve yeni yapılar bir süre birlikte çalışır, ardından eski yapı kaldırılır.

Örnek: Name Alanını İkiye Ayırmak

Bir User tablosundaki Name alanını FirstName ve LastName olarak ayırmak istediğinizi düşünün. Son hedef basit görünür, ancak üretim ortamına güvenli biçimde ulaşmak için eski ve yeni uygulama sürümlerinin bir süre birlikte çalışabilmesi gerekir.

Bu yüzden değişiklik; yeni sütunların eklenmesi, iki yapıya birlikte yazılması, eski verilerin doldurulması, okumaların taşınması, eski sütuna yazmanın bırakılması ve son olarak eski şemanın kaldırılması şeklinde ilerler.

1. Aşama: Yeni Sütunları Ekleyin

İlk adım, mevcut uygulamanın kullandığı yapıya dokunmadan yeni sütunları eklemektir:

ALTER TABLE dbo.[User]
ADD
FirstName nvarchar(100) NULL,
LastName  nvarchar(100) NULL;

Bu aşamada Name sütunu olduğu gibi kalır. Mevcut uygulama örnekleri bu sütunu okumayı ve yazmayı sürdürür. Yeni sütunlar sonraki aşamaları bekler.

Yeni sütunların NULL kabul etmesi bilinçli bir tercihtir. Mevcut satırlarda henüz bu alanlara ait değer bulunmadığı için ilk anda zorunlu değer istemek, basit bir ekleme işlemini veri taşıma sorununa çevirebilir.

Sıralama burada önemlidir: Önce veritabanı değişikliği dağıtılmalı, tüm üretim veritabanları hem eski hem de yeni şemayı tanıdıktan sonra uygulama kodu güncellenmelidir.

2. Aşama: Eski ve Yeni Sütunlara Birlikte Yazın

Veritabanı iki yapıyı da desteklemeye başladığında uygulama, kullanıcı adını üç sütuna birlikte yazabilir:

user.Name = $"{user.FirstName} {user.LastName}";
user.FirstName = firstName;
user.LastName = lastName;

Her ekleme veya güncelleme işleminde Name, FirstName ve LastName değerleri aynı anda güncel tutulmalıdır. Böylece eski uygulama örnekleri Name alanını okumayı sürdürürken yeni uygulama örnekleri yeni sütunları kullanabilir.

Yeni sütunlardan okumaya geçmeden önce çift yönlü yazma başlatılmalıdır. Mevcut satırlar henüz doldurulmadığı için FirstName ve LastName değerleri NULL olabilir. Çift yazma, bu aşamadan sonra değiştirilen verilerin iki temsilinde de güncel kalmasını sağlar.

Senkronizasyon için tetikleyici kullanılabilir, ancak mümkünse geçiş mantığını uygulamada tutmak daha uygundur. Uygulama değişikliğin anlamını bildiği için mantık görünür kalır ve geçiş tamamlandığında kaldırılması kolaylaşır. Birden fazla uygulama doğrudan tabloya yazıyor ve hepsini aynı anda güncellemek mümkün değilse tetikleyici uygun bir seçenek olabilir.

Yazma işlemleri zaten saklı yordamlar üzerinden yürüyorsa bu yordamları güncellemek de pratik bir yoldur. Yordam yeni alanları kabul edip eski Name alanını doldurmaya devam edebilir. Ancak yalnızca geçişi kolaylaştırmak için yeni bir soyutlama katmanı eklemek, daha sonra dağıtılması ve kaldırılması gereken ek bir yapı yaratır.

3. Aşama: Mevcut Satırları Doldurun

Yeni yazmalar iki temsili de güncel tuttuktan sonra, geçişten önce var olan satırlar doldurulabilir:

UPDATE dbo.[User]
SET
FirstName = LEFT(Name, CHARINDEX(' ', Name + ' ') - 1),
LastName = LTRIM(SUBSTRING(
Name,
CHARINDEX(' ', Name + ' ') + 1,
LEN(Name)
))
WHERE FirstName IS NULL
OR LastName IS NULL;

Bu örnekteki ad ayrıştırma mantığı basittir. Gerçek adlarda ön ekler, son ekler, birleşik soyadları, tek kelimelik adlar ve farklı adlandırma biçimleri bulunabilir. Bu nedenle dönüşüm mantığı ayrıca doğrulanmalı, her durumda T-SQL ile uygulanmasının uygun olmayabileceği göz önünde bulundurulmalıdır.

Üretimde bir başka konu da tek seferde ne kadar verinin güncelleneceğidir. Büyük bir UPDATE işlemi kilitleri uzun süre tutabilir, işlem günlüğünü büyütebilir ve sistemi gereksiz yere zorlayabilir. Büyük tablolar için işlem parçalar halinde yürütülebilir:

WHILE 1 = 1
BEGIN
UPDATE TOP (1000) dbo.[User]
SET
FirstName = LEFT(Name, CHARINDEX(' ', Name + ' ') - 1),
LastName = LTRIM(SUBSTRING(
Name,
CHARINDEX(' ', Name + ' ') + 1,
LEN(Name)
))
WHERE FirstName IS NULL
OR LastName IS NULL;
IF @@ROWCOUNT = 0
BREAK;
END

Çift yazmanın önce başlatılması, geçmiş satırlar doldurulurken yeni eklenen veya güncellenen satırların iki temsilde de korunmasını sağlar. Bu işlem için uygulamayı durdurmak gerekmez.

4. Aşama: Okumaları Yeni Sütunlara Taşıyın

Tüm satırlardaki yeni alanlar doldurulup yeni yazmalar bu alanları güncel tuttuğunda, uygulama okumaları yeni şemaya taşınabilir:

SELECT
Id,
FirstName,
LastName,
Email
FROM dbo.[User];

Bu adım bir temizlik işi gibi görülmemeli, ayrı bir dağıtım aşaması olarak ele alınmalıdır. Eski uygulama örnekleri veya başka tüketiciler hâlâ Name sütununa bağlı olabilir. Bu nedenle okumalar kademeli olarak taşınmalı ve geçiş sırasında ortaya çıkan sorunlar izlenmelidir.

Aşamalı dağıtım, canary dağıtımı veya özellik bayrakları destekleniyorsa bu aşamada kullanılabilir. Yeni ve eski uygulama biçimleri aynı anda veritabanı tarafından desteklendiği için tüm tüketicileri tek seferde değiştirmek gerekmez.

Name sütununa ait okuma izinlerini hemen kaldırmak, bağımlılıkları keşfetmek için riskli bir yoldur. Raporlar, işler, betikler veya eski uygulama örnekleri hâlâ bu alanı kullanıyor olabilir. Daha güvenli yol, kullanımı gözlemlemek, bilinen tüketicileri güncellemek ve bağımlılıkların sona erdiğinden emin olana kadar eski sütunu okunabilir bırakmaktır.

Query Store, eski sütuna referans veren yakın tarihli sorguları bulmak için başlangıç noktası olabilir. Uygulama günlükleri, veritabanı günlükleri, bağımlılık bilgileri ve geçici Extended Events kullanımı da yardımcı olur. Tek bir yöntem tüm tüketicileri göstermeyebileceği için ortamda uygun araçlar birlikte değerlendirilmelidir.

Uygulamanın yanı sıra raporlar, ETL işleri, dışa aktarımlar, betikler, zamanlanmış işler, not defterleri ve alt sistemler de kontrol edilmelidir.

5. Aşama: Name Sütununa Yazmayı Bırakın

Uygulama okumaları yeni sütunlara taşınıp diğer tüketicilerin geçişi için yeterli süre beklendikten sonra çift yazma mantığı kaldırılabilir:

user.FirstName = firstName;
user.LastName = lastName;

Bu noktada Name sütununun eski haliyle kalması beklenir. Ancak sütun henüz silinmemelidir. Bir süre daha yerinde bırakılması, uygulama, rapor, iş veya alt sistemlerin eski değer güncellenmeyi bıraktığında beklenmedik biçimde etkilenip etkilenmediğini görmeyi sağlar.

Buradaki ayrım önemlidir: Name silinmemiş, kullanımdan kaldırılmıştır. Yeni şemanın doğruluğu korunurken eski sütun bir uyumluluk arabelleği olarak tutulur.

6. Aşama: Doğrulayın ve Eski Şemayı Kaldırın

Son adımdan önce yeni durum doğrulanmalıdır. Beklenen satırlarda yeni alanların dolu olduğu kontrol edilmeli, beklenmeyen NULL değerleri incelenmeli, raporların ve alt sistemlerin yeni yapıya geçtiği doğrulanmalıdır. Yeni sütunlara ait son kısıtlar veya indeksler de bu aşamada eklenebilir.

Doğrulama tamamlandığında eski sütun kaldırılabilir:

ALTER TABLE dbo.[User]
DROP COLUMN Name;

Bu işlem, expand-and-contract yaklaşımının “contract” bölümüdür. Şema önce genişletilir, eski ve yeni yapılar birlikte çalıştırılır, yazmalar ve okumalar taşınır, veriler doldurulur, geçiş doğrulanır ve ancak bundan sonra eski yapı kaldırılır.

Geçiş doğru sırayla yapıldıysa sütunu kaldırma adımı sürpriz yaratmaz. Çünkü bu noktada hiçbir tüketicinin eski sütuna bağlı kalmaması gerekir.

Sonuç: Asıl Değer Sıralamada

Örnek yalnızca bir ad sütununun ayrıştırılmasını ele alıyor, ancak yöntem daha geniş şema değişikliklerinde de kullanılabilir. Önce yeni yapı eklenir, eski ve yeni temsiller birlikte çalıştırılır, yazmalar taşınır, mevcut veri doldurulur, okumalar güncellenir, eski yazmalar durdurulur ve son olarak eski yapı kaldırılır. Kesintisiz geçiş bu sıraya dayanır.

Tek tek SQL ifadeleri kolay olabilir. Zor olan, bunları doğru sırayla ve her aşamadaki uyumluluk gereksinimlerini gözeterek uygulamaktır.

İlgili İçerikler

  • PowerShell, OpenSSH ve DSC İçin 2026 Yol Haritası
  • Cosmos DB Rolleri: Uygulamam İçin Hangisi Doğru Seçim?
  • Azure DevOps’tan GitHub’a Kesintisiz Geçiş: ELM ile Yeni Dönem

Kaynaklar ve İleri Okuma

  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • Azure SQL’de şema değişikliğinin altı aşamalı geçiş yaklaşımı
🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

Agent Harness ile Claw'u Üretime Hazırlamak
Agent Harness ile Claw'u Üretime Hazırlamak28 Ağu 2026
Kubernetes'te AI Agent Sandbox: Pratik Rehber
Kubernetes'te AI Agent Sandbox: Pratik Rehber21 Nis 2026
.NET ve PostgreSQL ile Azure’da Cache’i Ciddiye Almak
.NET ve PostgreSQL ile Azure’da Cache’i Ciddiye Almak4 May 2026
VSIX İçin SDK-Style Proje Desteği: Build Süresi %75 Azalıyor
VSIX İçin SDK-Style Proje Desteği: Build Süresi %75 Azalıyor3 May 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket Azure SQL Çift Yazma Expand-and-Contract Query Store Şema Değişikliği
Önceki yazı

Fairwind Programı: Hükümetlere Sınırlı Siber Savunma

İlginizi Çekebilir

GitHub HydraFusion: Göreve Göre Model Orkestrasyonu
Aşkın KILIÇ 0

GitHub HydraFusion: Göreve Göre Model Orkestrasyonu

05/09/2026
AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri
Aşkın KILIÇ 0

AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri

05/09/2026
GitHub Copilot weekly releases — August 31
Aşkın KILIÇ 0

GitHub Copilot weekly releases — August 31

04/09/2026

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
    06/09/2026 Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
  • Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
    06/09/2026 Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
  • GitHub HydraFusion: Göreve Göre Model Orkestrasyonu
    05/09/2026 GitHub HydraFusion: Göreve Göre Model Orkestrasyonu
  • Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi
    05/09/2026 Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi
  • SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma
    05/09/2026 SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

SİZİN İÇİN DERLEDİK

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol
Bulut Altyapı DevOps

Kesintisiz Şema Değişikliği İçin 6 Aşamalı Yol

06/09/2026 Aşkın KILIÇ
Fairwind Programı: Hükümetlere Sınırlı Siber Savunma
Güvenlik & Kimlik

Fairwind Programı: Hükümetlere Sınırlı Siber Savunma

06/09/2026 Aşkın KILIÇ
GitHub HydraFusion: Göreve Göre Model Orkestrasyonu
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub HydraFusion: Göreve Göre Model Orkestrasyonu

05/09/2026 Aşkın KILIÇ
Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi
Güvenlik & Kimlik Konteyner & Kubernetes

Kubernetes v1.37’de Rootless Mod Beta Aşamasına Geldi

05/09/2026 Aşkın KILIÇ
SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma
Geliştirici Araçları Veri & Analitik

SQL Decomposition: T-SQL’de Karmaşıklığı Azaltma

05/09/2026 Aşkın KILIÇ
AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri
Bulut Altyapı Yapay Zeka

AMIE ile Gerçek Zamanlı Klinik Video Görüşmeleri

05/09/2026 Aşkın KILIÇ
GitHub Copilot weekly releases — August 31
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub Copilot weekly releases — August 31

04/09/2026 Aşkın KILIÇ
GPT-6 Astra GitHub Copilot’ta Kullanıma Sunuldu
DevOps Microsoft Azure

GPT-6 Astra GitHub Copilot’ta Kullanıma Sunuldu

04/09/2026 Aşkın KILIÇ
Microsoft Agent Framework’e Azure Cosmos DB belleği
DevOps Geliştirici Araçları Microsoft Azure

Microsoft Agent Framework’e Azure Cosmos DB belleği

04/09/2026 Aşkın KILIÇ
GitHub Copilot’ta Dört Model İçin Kaldırma Tarihi Açıklandı
Geliştirici Araçları Kurumsal Teknoloji

GitHub Copilot’ta Dört Model İçin Kaldırma Tarihi Açıklandı

04/09/2026 Aşkın KILIÇ
Google Search ile Ev Dekorasyonunu Geliştirmenin 5 Yolu
Bulut Altyapı Geliştirici Araçları

Google Search ile Ev Dekorasyonunu Geliştirmenin 5 Yolu

04/09/2026 Aşkın KILIÇ
GitHub Actions için üç yeni görünürlük ve kontrol özelliği
Geliştirici Araçları

GitHub Actions için üç yeni görünürlük ve kontrol özelliği

04/09/2026 Aşkın KILIÇ

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları ASP.NET Core Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps azure sdk Azure SQL bulut bilişim C++ CI/CD CodeQL code review copilot Copilot CLI DevOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Foundry otomasyon performans Pull Request RAG SEO uyumlu verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka yapay zeka ajanları Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 432 yazı 🏗️ Bulut Altyapı 345 yazı 🤖 Yapay Zeka 289 yazı 🔧 DevOps 242 yazı ☁️ Microsoft Azure 231 yazı 🔒 Güvenlik & Kimlik 199 yazı 🏢 Kurumsal Teknoloji 83 yazı 📊 Veri & Analitik 62 yazı 🐳 Konteyner & Kubernetes 53 yazı 📧 Microsoft 365 22 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← Fairwind Programı: Hükümetlere...
    →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS