Skip to main content

Command Palette

Search for a command to run...

SQL Server'da Veritabanı Şeması Karşılaştırma: Ortamlar Arası Farkları Tespit Etmek

Published
2 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

Test ortamı ile production arasında fark var mı? Staging'e atılan değişiklik production'da yok mu? Biri doğrudan production'a bir şeyler yapmış mı? Şema karşılaştırması bu soruların hepsini yanıtlar.

Neden Şema Karşılaştırması Gerekli? Zaman içinde ortamlar kayar. Test'te olan production'da yok. Ya da tam tersi, production'da olan test'te yok. Bu kayma iki kaynaktan gelir: ya değişiklik yönetimi eksik ve bazı değişiklikler sadece bir ortama yapılmış, ya da biri doğrudan production'a müdahale etmiş. Her iki durumda da karşılaştırma farkı ortaya çıkarır.

Basit Şema Karşılaştırma Sorgusu Linked Server varsa iki ortamı doğrudan karşılaştırabilirsiniz. sql-- Production'da olup test'te olmayan tablolar SELECT t.name AS TabloAdi, 'Production''da var, Test''te yok' AS Durum FROM Production_DB.sys.tables t WHERE t.name NOT IN ( SELECT name FROM Test_DB.sys.tables )

UNION ALL

-- Test'te olup production'da olmayan tablolar SELECT t.name, 'Test''te var, Production''da yok' FROM Test_DB.sys.tables t WHERE t.name NOT IN ( SELECT name FROM Production_DB.sys.tables ); sql-- Kolon farklılıklarını tespit et SELECT 'Production' AS Ortam, t.name AS TabloAdi, c.name AS KolonAdi, tp.name AS VeriTipi, c.max_length AS MaxUzunluk, c.is_nullable AS NullIzin FROM Production_DB.sys.tables t JOIN Production_DB.sys.columns c ON t.object_id = c.object_id JOIN Production_DB.sys.types tp ON c.user_type_id = tp.user_type_id

EXCEPT

SELECT 'Production', t.name, c.name, tp.name, c.max_length, c.is_nullable FROM Test_DB.sys.tables t JOIN Test_DB.sys.columns c ON t.object_id = c.object_id JOIN Test_DB.sys.types tp ON c.user_type_id = tp.user_type_id;

Stored Procedure Karşılaştırması sql-- Stored procedure metinlerini karşılaştır SELECT p.name AS ProcedureAdi, CASE WHEN m_prod.definition != m_test.definition THEN 'Farklı' WHEN m_test.definition IS NULL THEN 'Test''te yok' ELSE 'Aynı' END AS Durum FROM Production_DB.sys.procedures p JOIN Production_DB.sys.sql_modules m_prod ON p.object_id = m_prod.object_id LEFT JOIN Test_DB.sys.procedures p_test ON p.name = p_test.name LEFT JOIN Test_DB.sys.sql_modules m_test ON p_test.object_id = m_test.object_id WHERE m_prod.definition != ISNULL(m_test.definition, '') OR m_test.definition IS NULL ORDER BY p.name;

Karşılaştırmayı Otomatikleştirmek Bu sorguları haftalık çalışan bir SQL Agent Job'ına dönüştürün. Fark tespit edildiğinde e-posta bildirimi göndersin. Bu sayede ortamlar arası kayma sürekli izlenir. Fark oluştuğu anda haberdar olunur.

Fark Bulunduğunda Ne Yapılmalı? Her fark hemen sorun değil. Planlı bir deployment yapılmış ve henüz diğer ortama geçmemiş olabilir. Ama farkın kaynağı bilinmiyorsa araştırılmalı. Kayıt dışı bir değişiklik mi? Eksik kalan bir deployment adımı mı? Bu araştırma değişiklik yönetim sürecinin parçası olmalı.

Sonuç Şema karşılaştırması hem ortam kalitesini korur hem de yetkisiz değişiklikleri tespit eder. Düzenli yapıldığında değişiklik yönetiminin en güçlü desteklerinden biri haline gelir. Detaylı bilgi için: sqlchangeguard.com

More from this blog

S

SQL Change Guard

81 posts