SQL Server'da Değişiklik Yönetimi: Baştan Sona Eksiksiz Rehber
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
Bir veritabanı yöneticisi olarak kariyerinizde mutlaka şu anı yaşamışsınızdır: sabah işe geldiniz, bir şeyler yanlış. Bir sorgu beklenmedik sonuçlar döndürüyor, bir servis hata veriyor ya da bir tablo bambaşka bir görünüm almış. Ekibe soruyorsunuz. Herkes birbirine bakıyor. "Ben dokunmadım" deniyor.
O an, değişiklik yönetiminin neden var olduğunu en net biçimde anlıyorsunuz.
Bu rehber, SQL Server ortamlarında değişiklik yönetimini sıfırdan kurmak isteyenler için yazıldı. Kavramsal çerçeveden teknik araçlara, süreç tasarımından denetim gereksinimlerine kadar her şeyi ele alıyoruz.
Değişiklik Yönetimi Nedir ve Neden Gereklidir?
Değişiklik yönetimi, bir IT sisteminde yapılacak her türlü değişikliğin kontrollü, onaylı ve izlenebilir biçimde gerçekleştirilmesini sağlayan süreçler bütünüdür.
Veritabanı özelinde konuşursak: bir tablo oluşturulması, bir stored procedure'ün güncellenmesi, bir index'in kaldırılması, bir kullanıcıya yetki verilmesi — bunların tamamı birer değişiklik. Ve bu değişikliklerin her biri, kontrol edilmediğinde risk taşır.
Değişiklik yönetiminin olmadığı ortamlarda şu soruların yanıtı yoktur:
Bu değişikliği kim yaptı?
Ne zaman yapıldı?
Neden yapıldı, kim onayladı?
Değişiklikten önce durum nasıldı?
Bir sorun çıkarsa nasıl geri alınır?
Bu sorular yanıtsız kaldığında operasyonel risk artar, denetim geçmek güçleşir ve ekip içi güven sarsılır.
Değişiklik Türleri: Ne İzlenmeli?
SQL Server'da izlenmesi gereken değişiklikler üç ana kategoriye ayrılır.
DDL Değişiklikleri
Veri Tanımlama Dili işlemleri. Veritabanının yapısını etkiler.
CREATE: Yeni nesne oluşturma (tablo, view, stored procedure, index...)
ALTER: Mevcut nesneyi değiştirme
DROP: Nesne silme
TRUNCATE: Tablo içeriğini toplu silme
DDL değişiklikleri genellikle en kritik olanlar. Bir tabloya kolon eklenmesi zararsız görünebilir ama bağımlı uygulamaları, raporları ya da diğer nesneleri etkileyebilir.
DML Değişiklikleri
Veri İşleme Dili işlemleri. Tablolardaki veriyi etkiler.
INSERT: Yeni kayıt ekleme
UPDATE: Mevcut kaydı güncelleme
DELETE: Kayıt silme
DML değişikliklerinin tamamını loglamak her ortam için pratik değil. Ancak kritik tablolarda — müşteri bilgileri, finansal kayıtlar, yetki tabloları — DML izleme önemli.
DCL Değişiklikleri
Veri Kontrol Dili işlemleri. Yetkileri etkiler.
GRANT: Yetki verme
REVOKE: Yetki alma
DENY: Yetki engelleme
Yetki değişiklikleri güvenlik açısından kritik. Bir kullanıcıya yanlışlıkla ya da kasıtlı olarak fazla yetki verilmesi ciddi riskler doğurabilir.
SQL Server'ın Yerleşik İzleme Mekanizmaları
SQL Server değişiklikleri izlemek için birkaç farklı mekanizma sunar. Her birinin güçlü ve zayıf yönleri var.
DDL Trigger
En hızlı kurulabilen yöntem. Veritabanı ya da sunucu düzeyinde DDL olaylarını yakalar ve tanımladığınız işlemleri çalıştırır.
sql
CREATE TRIGGER trg_DDL_Log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
BEGIN
INSERT INTO DDL_Log (
EventType,
ObjectName,
ObjectType,
LoginName,
HostName,
ApplicationName,
EventDate,
EventData
)
SELECT
EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]', 'NVARCHAR(100)'),
SYSTEM_USER,
HOST_NAME(),
APP_NAME(),
GETDATE(),
EVENTDATA()
END
Avantaj: Basit, hızlı, ücretsiz.
Dezavantaj: Sysadmin tarafından devre dışı bırakılabilir. Bildirim mekanizması yok. Onay süreci entegre edilemez.
SQL Server Audit
Daha kurumsal bir yaklaşım. Server Audit ve Database Audit Specification tanımlanarak belirli olaylar dosyaya veya Windows Event Log'una yazılır.
sql
-- Server Audit oluştur
CREATE SERVER AUDIT DatabaseAudit
TO FILE (FILEPATH = 'C:\AuditLogs\')
WITH (ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT DatabaseAudit WITH (STATE = ON);
-- Database Audit Specification oluştur
CREATE DATABASE AUDIT SPECIFICATION DatabaseChanges
FOR SERVER AUDIT DatabaseAudit
ADD (DATABASE_OBJECT_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON);
Avantaj: Kapsamlı, manipüle edilmesi daha zor, compliance için daha uygun.
Dezavantaj: Logları analiz etmek emek ister. Bildirim yok. Onay süreci yok.
Change Data Capture (CDC)
Tablo bazında satır değişikliklerini transaction log'dan okuyarak yakalar. DDL değil, DML izleme için kullanılır.
sql
-- CDC'yi veritabanında etkinleştir
EXEC sys.sp_cdc_enable_db;
-- Belirli tablo için CDC'yi etkinleştir
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'KritikTablo',
@role_name = NULL,
@supports_net_changes = 1;
Avantaj: Performans etkisi düşük, eski ve yeni değerleri saklar.
Dezavantaj: Şema değişikliklerini izlemez. Yönetim gerektiren arka plan job'ları.
Extended Events
SQL Server'ın en güçlü izleme altyapısı. Yüzlerce farklı olayı filtreleyerek yakalayabilirsiniz.
Avantaj: Düşük overhead, çok zengin veri.
Dezavantaj: Kurulumu ve analizi karmaşık. Bildirim yok. Onay süreci entegre edilemez.
Yerleşik Araçların Ortak Sorunu
Bu dört mekanizmanın hepsi reaktif çalışır. Değişiklik önce olur, sonra kaydedilir.
Kurumsal değişiklik yönetiminde ihtiyaç duyulan şey farklı:
Değişiklik olmadan önce onay süreci
Değişiklik sırasında otomatik risk analizi
Değişiklik sonrası tam kayıt
Süreç dışı değişiklikte anında bildirim
Bu döngünün tamamını native araçlarla kurmak mümkün ama ciddi geliştirme ve bakım yükü gerektirir.
İdeal Değişiklik Yönetimi Süreci
Kurumsal bir ortamda değişiklik yönetimi süreci şu adımlardan oluşmalıdır.
1. Talep
Her değişiklik bir talep ile başlar. Kim istiyor, hangi veritabanı, hangi nesne, ne değiştirilecek, neden?
Bu adım kritik çünkü "neden" sorusu değişikliğin gerekliliğini sorgulatır. Aceleyle yapılmak istenen, gerekçelendirilemeyen değişiklikler bu aşamada süzülür.
2. Otomatik Analiz
Değişiklik scripti sisteme yüklendiğinde otomatik analiz başlamalıdır:
WHERE şartsız UPDATE veya DELETE var mı?
DROP TABLE içeriyor mu?
Büyük tablolarda index operasyonu mu?
Yetki değişikliği içeriyor mu?
Kritik nesnelere dokunuyor mu?
Bu analizin sonucunda bir risk skoru üretilmeli. Düşük riskli değişiklikler hızlı onaya giderken yüksek riskli değişiklikler daha dikkatli incelenmeli.
3. Sandbox Test
Production ortamına geçmeden önce değişiklik test ortamında çalıştırılmalı. Eğer test ortamı yoksa BEGIN-ROLLBACK bloğu içinde önizleme yapılabilir:
sql
BEGIN TRANSACTION
-- Değişiklik scripti buraya
ALTER TABLE Siparisler ADD TeslimTarihi DATE NULL;
-- Etkilenen satır sayısı kontrol et
SELECT @@ROWCOUNT AS EtkilenenSatir;
-- Production'a geçmeden önce geri al
ROLLBACK TRANSACTION
4. Onay Akışı
Risk seviyesine göre farklı onay seviyeleri tanımlanmalı.
Düşük risk: DBA onayı yeterli. Orta risk: DBA + IT yöneticisi onayı. Yüksek risk: DBA + IT yöneticisi + ilgili birim müdürü onayı.
Her onay adımı kayıt altına alınmalı: kim onayladı, saat kaçta, hangi notla.
5. Deployment
Onay tamamlandıktan sonra deployment yapılır. Bu adımda şunlar kayıt altına alınmalı:
Deployment zamanı
Kim çalıştırdı
Hangi script, hangi versiyon
Deployment süresi
Sonuç: başarılı mı, hata mı?
6. Rollback Planı
Her deployment için rollback script'i önceden hazır olmalı. "Gerekirse bakarız" yeterli değil. Kriz anında sakin kalmak zordur, o an için yazılmış bir rollback planı hayat kurtarır.
7. Doğrulama
Deployment sonrası sistem beklenen şekilde çalışıyor mu? Kritik sorgular test edilmeli, servisler kontrol edilmeli. Bu adım da kayıt altına alınmalı.
Yetkisiz Değişiklik Tespiti
Sürecin en kritik ama en çok atlanan parçası bu.
Yukarıdaki adımların tamamını kusursuz kurmuş olsanız bile birisi SSMS'i açıp doğrudan değişiklik yapabilir. Sysadmin yetkisine sahip biri için hiçbir uygulama katmanı bariyer oluşturamaz. Bu SQL Server'ın mimarisi gereği böyle.
Ama tespit etmek mümkün.
Sistem dışından yapılan değişiklikleri tespit etmek için iki yöntem kullanılabilir:
Periyodik snapshot karşılaştırması: Veritabanı şemasının düzenli anlık görüntüleri alınır ve önceki versiyonla karşılaştırılır. Fark varsa alarm üretilir.
Real-time izleme: DDL Trigger veya Extended Events ile yapılan değişiklikler anında izlenir. Sistem dışından geldiği tespit edilen değişiklikler için bildirim gönderilir.
Her iki yöntemin de kurulumu için geliştirme gerekir. Ama sonuç kritik: biri gece 02:00'de SSMS'ten bir şey yapmış olsa bile sabah siz haberdar olursunuz.
Denetim Gereksinimleri
Türkiye'deki kurumlar için değişiklik yönetimi artık yasal bir gereksinim haline geldi.
KVKK
KVKK, kişisel verilerin işlendiği sistemlerde teknik güvenlik tedbirlerinin alınmasını zorunlu kılıyor. Erişim logları, değişiklik kayıtları ve bu kayıtların düzenli denetimi açıkça bekleniyor.
Bir veri ihlali yaşandığında Kişisel Verileri Koruma Kurulu'na yapılan bildirimde "hangi sistem değişikliği bu ihlale yol açtı" sorusunu yanıtlayabilmek gerekiyor.
BDDK
Bankacılık sektöründe BDDK'nın bilgi sistemleri yönetmeliği, değişiklik yönetimi süreçlerini açıkça düzenliyor. Onay akışları, test süreçleri ve deployment kayıtları belgelenmek zorunda.
ISO 27001
A.12.1.2 maddesi doğrudan değişiklik yönetimini kapsıyor. Bilgi işleme olanaklarını etkileyen değişiklikler kontrol altında olmalı. Denetimde bu kontrolü kanıtlayan belgeler sunulmalı.
COBIT ve ITIL
Her iki çerçeve de değişiklik yönetimini temel bir IT süreç alanı olarak tanımlıyor. COBIT'in BAI06 alanı ve ITIL'in Change Management süreci bu konuyu detaylıca ele alıyor.
Küçük Ekipler İçin Pratik Başlangıç
Büyük kurumsal süreçler küçük ekipler için ağır gelebilir. Ama başlamak için mükemmel olmak zorunda değilsiniz.
Şu üç şeyi yaparak başlayabilirsiniz:
Birinci adım: Her değişiklik için bir kayıt oluşturun. Basit bir tablo yeterli: değişiklik tarihi, kimin yaptığı, ne değiştirildiği, neden. Bu bile çoğu kurumun şu anki durumundan çok daha iyidir.
İkinci adım: DDL Trigger kurun. Yukarıdaki örnek kodu kullanın. En azından değişikliklerin otomatik kaydedilmesini sağlayın.
Üçüncü adım: Rollback rutini oluşturun. Her deployment öncesi "bunu nasıl geri alırım" sorusunu sorun ve cevabı yazın.
Bu üç adım 1-2 hafta içinde hayata geçirilebilir ve başlangıç için yeterli bir temel oluşturur.
Olgun Bir Değişiklik Yönetimi Sürecinin Göstergeleri
Sürecinizin ne kadar olgun olduğunu değerlendirmek için şu sorulara bakın:
Herhangi bir değişikliğin kim tarafından, ne zaman, hangi gerekçeyle yapıldığını 5 dakika içinde bulabiliyor musunuz? Evet ise temel seviyedesiniz.
Deployment öncesi otomatik risk analizi yapılıyor mu? Evet ise orta seviyedesiniz.
Sistem dışından yapılan değişiklikler anında tespit ediliyor ve bildiriliyor mu? Evet ise ileri seviyedesiniz.
Tüm bu süreç KVKK/BDDK/ISO 27001 gereksinimlerini karşılayacak biçimde belgeleniyor ve raporlanıyor mu? Evet ise kurumsal olgunluk seviyesindesiniz.
Araç mı, Manuel Süreç mi?
Bu soruyu "ikisi de gerekli ama farklı amaçlarla" diye yanıtlamak en doğrusu.
Manuel süreç politikayı ve kültürü belirler. Hangi değişiklikler nasıl onaylanacak, kimler yetkili, prosedür dışı davranışın sonuçları ne olacak. Bunlar araçla değil, kurumsal kararla şekillenir.
Araç ise bu politikanın tutarlı biçimde uygulanmasını sağlar. İnsan hatası ve unutkanlığını minimize eder. Onay e-posta yerine sistem üzerinden alınır, deployment manuel değil kayıt altında çalışır, yetkisiz değişiklik manuel arama yerine otomatik tespit edilir.
Birlikte çalıştıklarında hem disiplin hem de verimlilik sağlanır.
Sonuç
SQL Server'da değişiklik yönetimi bir lüks değil. Ekibiniz büyüdükçe, müşteri tabanınız genişledikçe ve regülasyon baskısı arttıkça bu süreç kaçınılmaz hale gelir.
Başlamak için büyük bir bütçeye ya da mükemmel bir plana gerek yok. Önemli olan başlamak. Küçük adımlarla kurulan bir süreç, zamanla kurumun en değerli operasyonel altyapılarından biri haline gelir.
Kimin ne yaptığını her zaman biliyor olmak, bir DBA için en büyük güvence. Bu güvenceyi sistematik olarak inşa etmek ise değişiklik yönetiminin özü.
SQL Server değişiklik yönetimi hakkında daha fazla bilgi için sqlchangeguard.com adresini ziyaret edebilirsiniz.
