Skip to main content

Command Palette

Search for a command to run...

WHERE Şartsız DELETE ve UPDATE: En Pahalı Veritabanı Hatası

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

Veritabanı tarihinin en sık tekrarlanan ve en pahalı hatası muhtemelen budur. Basit bir gözden kaçırma, milyonlarca kaydı bir anda silebilir ya da güncelleyebilir.


Nasıl Oluyor?

Geliştirici test ortamında şu sorguyu yazıyor:

sql

DELETE FROM Siparisler WHERE SiparisID = 12345

Test ediyor, çalışıyor. Production scriptini hazırlarken WHERE koşulunu unutuyor ya da yanlış kesiyor:

sql

DELETE FROM Siparisler

Çalıştırıyor. Tüm sipariş tablosu boşaldı.

Bu kulağa "böyle aptalca bir hata yapar mısın?" gibi gelebilir. Ama bu hata her yıl dünyada sayısız kez tekrarlanıyor. Baskı altında, yorgunken, aceleyle çalışırken dikkat dağılıyor.


Neden Bu Kadar Yıkıcı?

Geri alınamaz olabilir: Transaction log ile belirli bir süreye kadar geri dönmek mümkün. Ama bu süre geçmişse ya da log backup'ı yoksa veri kalıcı olarak kaybedilmiş demektir.

Hızlı gerçekleşir: Milyonlarca kayıtlı bir tablo saniyeler içinde boşalabilir. Fark edildiğinde iş işten geçmiş olabilir.

Etki zincirleme yayılır: Silinen veriye bağımlı raporlar, uygulamalar ve diğer tablolar da etkilenir.


Önleme Yöntemleri

1. SET ROWCOUNT ile test

Production'da toplu DELETE veya UPDATE yapmadan önce etkilenecek satır sayısını kontrol edin:

sql

SELECT COUNT(*) FROM Siparisler WHERE Durum = 'Iptal'
-- Beklenen sayı ile karşılaştır, sonra DELETE'i çalıştır

2. Transaction içinde çalıştır

sql

BEGIN TRANSACTION

DELETE FROM Siparisler WHERE Durum = 'Iptal'

SELECT @@ROWCOUNT AS SilinenSatir
-- Sayı beklenen değilse ROLLBACK yap
-- Beklenen değerse COMMIT yap

-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION

3. Deployment öncesi validasyon

WHERE şartsız DELETE veya UPDATE içeren her script otomatik olarak yüksek risk olarak işaretlenmeli ve ek onay gerektirmeli.


Gerçek Maliyeti

Veri kaybının teknik maliyetinin ötesinde başka maliyetler de var: müşteri güveni, itibar, olası hukuki sorumluluk ve tabii KVKK kapsamında kişisel veri kaybının bildirimi zorunluluğu.

Tek bir WHERE ifadesinin eksikliği tüm bu sonuçları doğurabilir.


Sonuç

WHERE şartsız DELETE ve UPDATE her zaman kırmızı bayrak olmalı. Otomatik validasyon bu hataları deployment öncesinde yakalamanın en güvenilir yolu.

Detaylı bilgi için: sqlchangeguard.com

More from this blog

S

SQL Change Guard

81 posts