İç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
  • VS Code’da SQL Projects ile Veritabanı Refactor
DevOps Geliştirici Araçları Microsoft Azure CI/CD, refactor log, schema taşıma, SQL Projects, VS Code Aşkın KILIÇ 31/07/2026 4 Yorumlar

VS Code’da SQL Projects ile Veritabanı Refactor

VS Code'da SQL Projects ile Veritabanı Refactor
📑 İçindekiler
  1. SQL Projects ve refactor log neden önemli?
  2. Örnek senaryo: AdventureWorks üzerinde üç değişiklik
  3. Yeni şema eklemek ve tabloyu taşımak
  4. Tabloyu yeniden adlandırmak
  5. Değişikliklerin dağıtılması
  6. Pratikte neden anlamlı?
  7. İlgili İçerikler
  8. Kaynaklar ve İleri Okuma

⏱️ 5 dk okuma📅 31 Temmuz 2026

Bir veritabanı olgunlaştıkça tablo adları, şema düzeni ve nesne yerleşimi zamanla anlamını yitirebilir. Böyle durumlarda yeniden adlandırma ve şema değişiklikleri kaçınılmaz olur; ancak bunları farklı ortamlarda veri kaybetmeden uygulamak kolay değildir. Microsoft’un Azure SQL Dev Corner bloğunda Drew Skwiers-Koballa, VS Code üzerindeki SQL Database Projects eklentisinin bu tür refactor işlemlerini nasıl otomatikleştirdiğini anlatıyor. Bu yazıda, kaynağı temel alarak SQL projelerinde tablo taşıma ve yeniden adlandırma operasyonlarının dağıtım planına nasıl yansıtıldığına bakacağız.

SQL Projects ve refactor log neden önemli?

SQL database projects, veritabanı şemasını kaynak kontrolünde tutmak, değişiklikleri izlemek ve ekip içinde birlikte çalışmak için kullanılan bir yapıdır. En güçlü yani, projede tanımlanan hedef durum ile dağıtım yapılan ortam arasındaki farkı dinamik hesaplayıp uygun bir betik üretebilmesidir.

Klasik T-SQL tarafında bir tabloyu veya sütunu yeniden adlandırmak için sp_rename, bir nesneyi başka bir şemaya taşımak için ise ALTER SCHEMA... TRANSFER yeterlidir. Sorun, aynı değişikliğin proje kaynak dosyalarına ve birden fazla ortama tutarlı biçimde yansıtılması gerektiğinde başlar. VS Code için SQL Database Projects eklentisi, refactor işlemlerini kaynak dosyalara uygular ve bir refactor log dosyasında kaydeder. Böylece dağıtımda nesne baştan oluşturulmak yerine sp_rename veya ALTER SCHEMA... TRANSFER kullanılır, mevcut veri yerinde korunur.

Örnek senaryo: AdventureWorks üzerinde üç değişiklik

Kaynak yazıda örnek olarak AdventureWorks veritabanı kullanılıyor ve şu üç değişiklik yapılıyor:

  • [ProductCatalog] adında yeni bir şema eklemek
  • SalesLT.ProductDescription tablosunu bu yeni şemaya taşımak
  • SalesOrderDetail tablosunu SalesOrderLine olarak yeniden adlandırmak

Elinizde henüz bir SQL projesi yoksa SqlPackage CLI ile veya VS Code, SQL Server Management Studio ve Visual Studio gibi IDE’ler ile mevcut bir veritabanından proje üretebilirsiniz. VS Code tarafında Object Explorer içindeki veritabanı bağlam menüsü, projeyi oluşturmak ve güncellemek için hazır seçenekler sunuyor.

Yeni şema eklemek ve tabloyu taşımak

SQL projesinde yeni bir şema tanımlamak, aslında CREATE SCHEMA ifadesini içeren yeni bir .sql dosyası eklemek anlamına geliyor. VS Code’daki Database Projects görünümünde proje bağlam menüsünden Add item… seçildiğinde şablon listesi açılıyor. Buradan Schema şablonu seçilip ada ProductCatalog yazıldığında, ilgili CREATE SCHEMA ifadesi projeye eklenmiş oluyor.

Yeni şema hazır olduğuna göre sıra SalesLT.ProductDescription tablosunu taşımaya geliyor. SalesLT/Tables klasöründeki ProductDescription.sql dosyası açılıyor, tablo adının üzerinde sağ tıklanıp bağlam menüsünden önce Refactor, ardından Move to Schema seçiliyor. Projedeki tüm kullanıcı şemaları hedef olarak listeleniyor ve uygulanacak değişiklikler bir önizleme ekranında sunuluyor.

Bu önizlemede yalnızca tablonun tanımı değil, ona referans veren diğer nesnelerdeki güncellemeler ve refactorlog dosyasındaki eklemeler de birlikte gösteriliyor. Apply ile onayladığınızda değişiklikler projeye işleniyor. Refactor log, bir nesnenin adının veya şemasının değiştirildiğini kaydettiği için her dağıtımda bu hareketin daha önce uygulanıp uygulanmadığı takip edilebiliyor. Kaynak yazıda özellikle vurgulandığı gibi, projeyi kaynak kontrolüne gönderirken ProjectName.refactorlog dosyasını da mutlaka eklemek gerekiyor.

Tabloyu yeniden adlandırmak

SQL projects refactor yeteneğinin iyi yönettiği bir diğer operasyon, tablo ve sütun yeniden adlandırma. Refactor log kullanımı, dağıtım sırasında verinin başka bir tabloya taşınmasını gerektirmeden yeniden adlandırma yapılmasını sağlıyor.

SalesOrderDetail tablosunu SalesOrderLine olarak yeniden adlandırmak için editörde nesne adının üzerinde sağ tıklayıp Rename Symbol menüsü kullanılıyor. Refactor ve rename seçenekleri, SQL projesinde nesne adının geçtiği her yerden erişilebilir; örneğin bir tablonun sütununu, o sütuna referans veren view tanımının içinden de yeniden adlandırabilirsiniz. Rename işleminde değişiklikleri doğrudan uygulayabilir ya da proje genelinde önce önizleyebilirsiniz; her iki yol da ProjectName.refactorlog dosyasını günceller.

Kaynakta gösterilen örnekte, şema taşıma ve yeniden adlandırma sonrasında refactor log içeriği kabaca şöyle oluşuyor:

<?xml version="1.0" encoding="utf-8"?>
<Operations Version="1.0" xmlns="http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/02">
<Operation Name="Move Schema" Key="8f599e45-64ea-4636-a369-139cde876a84" ChangeDateTime="07/27/2026 17:06:25">
<Property Name="ElementName" Value="[SalesLT].[ProductDescription]" />
<Property Name="ElementType" Value="SqlTable" />
<Property Name="NewSchema" Value="ProductCatalog" />
<Property Name="IsNewSchemaExternal" Value="False" />
</Operation>
<Operation Name="Rename Refactor" Key="4f955015-b69e-4c8e-b527-761612505adb" ChangeDateTime="07/27/2026 17:10:38">
<Property Name="ElementName" Value="[SalesLT].[SalesOrderDetail]" />
<Property Name="ElementType" Value="SqlTable" />
<Property Name="ParentElementName" Value="[SalesLT]" />
<Property Name="ParentElementType" Value="SqlSchema" />
<Property Name="NewName" Value="SalesOrderLine" />
</Operation>
</Operations>

Değişikliklerin dağıtılması

Refactor log dosyası, proje derlendiğinde .dacpac dosyasının içine dahil oluyor. Dağıtım ister VS Code üzerinden, ister başka bir IDE’den, ister otomatik bir CI/CD ortamından tetiklensin refactor bilgisi bu paketle birlikte taşınıyor.

VS Code’da Generate Script seçeneğiyle dağıtımda çalıştırılacak T-SQL incelenebiliyor. Refactor log kullanımı, dağıtım tarafında dbo.__RefactorLog adlı bir tabloya ihtiyaç duyuyor; bu tablo yoksa dağıtım sırasında oluşturuluyor. Operation anahtarlarını burada saklayarak, aynı SQL projesinin birden çok kez ve farklı ortamlara dağıtılmasına rağmen refactor işlemlerinin tekrar uygulanmamasını sağlıyor:

IF OBJECT_ID(N'dbo.__RefactorLog') IS NULL
BEGIN
CREATE TABLE [dbo].[__RefactorLog] (OperationKey UNIQUEIDENTIFIER NOT NULL PRIMARY KEY)
EXEC sp_addextendedproperty N'microsoft_database_tools_support', N'refactoring log', N'schema', N'dbo', N'table', N'__RefactorLog'
END

Üretilen dağıtım betiğinde refactor işlemlerinin karşılığı olarak sp_rename ve ALTER SCHEMA... TRANSFER komutlarının kullanıldığını görüyorsunuz. Kaynaktaki kesitte, refactor log anahtarlarına atıfta bulunan PRINT ifadeleri de dikkat çekiyor:

CREATE SCHEMA [ProductCatalog];
GO
PRINT N'The following operation was generated from a refactoring log file 8f599e45-64ea-4636-a369-139cde876a84';
PRINT N'Move object [SalesLT].[ProductDescription] to different schema [ProductCatalog]';
GO
ALTER SCHEMA [ProductCatalog] TRANSFER [SalesLT].[ProductDescription];
GO
PRINT N'The following operation was generated from a refactoring log file 4f955015-b69e-4c8e-b527-761612505adb';
PRINT N'Rename [SalesLT].[SalesOrderDetail] to SalesOrderLine';
GO
EXECUTE sp_rename @objname = N'[SalesLT].[SalesOrderDetail]', @newname = N'SalesOrderLine', @objtype = N'OBJECT';

Aynı komutlar, dağıtım doğrudan Publish ile çalıştırıldığında da kullanılıyor. Refactor log .dacpac içine paketlendiği için mevcut CI/CD pipeline’larında artefakt yayımlama ve arşivleme akışlarını değiştirmeye gerek kalmıyor. Dağıtım tamamlandığında hedef veritabanında SalesOrderDetail tablosu SalesOrderLine olarak yeniden adlandırılmış, ProductDescription tablosu ise ProductCatalog şemasına taşınmış oluyor.

Pratikte neden anlamlı?

Klasik yaklaşımda tablo yeniden adlandırma veya şema taşıma; nesneyi silip yeniden oluşturmayı ve veriyi kopyalamayı gerektirebiliyor. Bu, hem risk hem de kesinti demek. SQL Database Projects’in refactor log mekanizması bu operasyonları veri kaybı olmadan uyguluyor, kaynak kontrolünde tuttuğunuz proje ile üretim ortamı arasındaki bağ da kopmuyor. Özellikle çok ortamlı (dev/test/prod) senaryolarda refactor işleminin her ortama yalnızca bir kez uygulanmasını dbo.__RefactorLog tablosundaki kayıtlar belirliyor.

İlgili İçerikler

  • MSSQL Extension v1.43: Azure SQL’i VS Code’dan Kurmak Artık Mümkün
  • VS Code ile SQL Şema Yönetimi Artık Akıcı: Yayın Penceresi ve Şablonlarla Tanışın
  • VS Code’da SQL Kod Analizi Artık Daha Kolay: Kural Ayarlarını Ellemeye Son

Kaynaklar ve İleri Okuma

  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • devblogs.microsoft.com
  • Refactor your database with SQL projects in VS Code – Drew Skwiers-Koballa, Azure SQL Dev Corner
  • SQL Database Projects genel dokümantasyonu (aka.ms/sqlprojects)
  • VS Code SQL Database Projects eklentisi başlangıç rehberi
  • SQL projects refactor kavramları dokümantasyonu
  • Azure SQL Dev Corner blog
🤖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

Marketing Ops as Code: GitHub'da Nasıl Kurulur?
Marketing Ops as Code: GitHub'da Nasıl Kurulur?14 Eyl 2026
C# Dev Kit 11.0: Daha Hızlı Yükleme ve Az Bellek
C# Dev Kit 11.0: Daha Hızlı Yükleme ve Az Bellek6 Eki 2026
Visual Studio Subscription: VSLive! San Diego Dersleri
Visual Studio Subscription: VSLive! San Diego Dersleri19 Eki 2026
Azure Repos: DevOps’ta Yeni Gelişmeler
Azure Repos: DevOps’ta Yeni Gelişmeler9 Mar 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 CI/CD refactor log schema taşıma SQL Projects VS Code
Önceki yazı

GitHub Models Kapandı: Alternatifler ve Geçiş Yolu

Sonraki yazı

.NET 11 Nedir? Tüm Yenilikler, Çıkış Tarihi ve Destek Süresi

İlginizi Çekebilir

Syncfusion Toolkit for Blazor: MIT Lisanslı Bileşenler
Aşkın KILIÇ 0

Syncfusion Toolkit for Blazor: MIT Lisanslı Bileşenler

29/10/2026
Copilot UX Components: SPFx 1.24 ile Etkileşimli Arayüz
Aşkın KILIÇ 0

Copilot UX Components: SPFx 1.24 ile Etkileşimli Arayüz

29/10/2026
Azure SQL DMV'leri: PostgreSQL'den Gelenler İçin Tanı
Aşkın KILIÇ 0

Azure SQL DMV’leri: PostgreSQL’den Gelenler İçin Tanı

29/10/2026

4 comments

comments user
Tolga F. 31/07/2026 10:48

Refactor log meselesini hiç bu kadar net anlamamıştım, özellikle tablo taşırken nesnenin silinip yeniden oluşturulmaması kısmı kritik bir detay. Biz de bir projede migration scriptleri elle yönetmeye çalışıyorduk, bu eklentiyi kesinlikle deneyeceğim. Bu arada şu yazınız da güzeldi: Copilot Business ve Enterprise’da Model Varsayılan Açılıyor — https://www.askinkilic.com.tr/copilot-business-ve-enterpriseda-model-varsayilan-aciliyor/

comments user
Elif D. 31/07/2026 14:21

Refactor log meselesini bilmiyordum, dağıtımda verilerin kaybolmaması gerçekten kritik bir detay. Biz şu an migration script’lerle manuel hallediciyoruz ama bu yaklaşım çok daha temiz görünüyor. Bu arada şu yazınız da güzeldi: GitHub Actions’a $/ Söz Dizimi: Aynı Repo’daki Aksiyonlara — https://www.askinkilic.com.tr/github-actionsa-soz-dizimi-ayni-repodaki-aksiyonlara/

comments user
Burak S. 31/07/2026 16:23

Tam zamanında gördüm bu yazıyı, geçen ay tablo rename işlemi yaparken deployment’ta ciddi sorun yaşamıştım. Refactor log mekanizmasının arka planda nasıl çalıştığını bilmiyordum, şimdi çok daha mantıklı geldi. Bir de schema taşıma senaryolarını da ele alsanız süper olurdu.

comments user
Özge D. 31/07/2026 20:19

Refactor log olayını bilmiyordum, genelde elle script yazıp geçiştiriyordum. Tablo taşırken veriyi kaybetmeden otomatik halledebilmek gerçekten büyük kolaylık. Bu arada şu yazınız da güzeldi: .NET 11 Nedir? Tüm Yenilikler, Çıkış Tarihi ve Destek Süresi — https://www.askinkilic.com.tr/net-11-nedir-tum-yenilikler-cikis-tarihi/

Yorumlar kapalı.

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • Syncfusion Toolkit for Blazor: MIT Lisanslı Bileşenler
    29/10/2026 Syncfusion Toolkit for Blazor: MIT Lisanslı Bileşenler
  • Copilot UX Components: SPFx 1.24 ile Etkileşimli Arayüz
    29/10/2026 Copilot UX Components: SPFx 1.24 ile Etkileşimli Arayüz
  • Azure SQL DMV'leri: PostgreSQL'den Gelenler İçin Tanı
    29/10/2026 Azure SQL DMV’leri: PostgreSQL’den Gelenler İçin Tanı
  • Visual Studio Subscription ile Sertifika Hazırlığı
    29/10/2026 Visual Studio Subscription ile Sertifika Hazırlığı
  • Microsoft Copilot Harness ile Foundry'de Yönetilen Ajanlar
    28/10/2026 Microsoft Copilot Harness ile Foundry’de Yönetilen Ajanlar
  • 2026-03-10_15-35-23
    10/03/2026 Microsoft 365 E7: Yapay Zeka ve Güvenlik Bir Arada
  • Artımlı Anlık Görüntü: Anında Geri Yükleme
    09/03/2026 Artımlı Anlık Görüntü: Anında Geri Yükleme
  • Bulut Sunucu Altyapısı
    09/03/2026 Microsoft Sovereign Cloud: İzolasyonda Güvenli Bulut
  • GitHub Copilot: Kaldırılan 4 Model ve Geçiş Alternatifleri
    04/10/2026 GitHub Copilot: Kaldırılan 4 Model ve Geçiş Alternatifleri
  • Terminalde AI Ajanlarını Koddan Teste Taşımak: azd ile Gerçekten Yerel Deneyim
    18/03/2026 Terminalde AI Ajanlarını Koddan Teste Taşımak: azd ile Gerçekten Yerel Deneyim
  • 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

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 Functions Azure OpenAI azure sdk Azure SQL CI/CD CodeQL code review copilot Copilot CLI DevOps Entra ID geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Entra ID Microsoft Foundry MSVC otomasyon performans Pull Request RAG verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka 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ı 571 yazı 🏗️ Bulut Altyapı 452 yazı 🤖 Yapay Zeka 359 yazı ☁️ Microsoft Azure 317 yazı 🔧 DevOps 301 yazı 🔒 Güvenlik & Kimlik 254 yazı 🏢 Kurumsal Teknoloji 121 yazı 📊 Veri & Analitik 86 yazı 🐳 Konteyner & Kubernetes 65 yazı 📧 Microsoft 365 23 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← GitHub Models Kapandı: Alterna...
    .NET 11 Nedir? Tüm Yenilikler,... →
    📩

    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