Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Gerçek dünya uygulamalarında, tek bir iş mantığı adımı genellikle birden fazla veritabanı işlemi (INSERT, UPDATE, DELETE) gerektirir. Örneğin, bir banka uygulamasında bir hesaptan diğerine para transferi yapmak hem gönderen hesaptan parayı düşürmeyi (UPDATE işlemi) hem de alıcı hesaba parayı eklemeyi (UPDATE işlemi) içerir. Eğer gönderen hesaptan para düşürüldükten sonra sistem çökerse ve alıcı hesaba eklenemezse, para kaybolmuş olur. Bu tür tutarsızlıkları önlemek için Transactionlar (İşlemler) kullanılır.

Transaction (İşlem) Nedir?

Bir Transaction, veritabanı üzerinde gerçekleştirilen ve tek bir mantıksal iş birimi olarak ele alınan bir dizi işlemdir. Bu işlemler ya hep birlikte tamamlanır (commit edilir) ya da herhangi bir hata durumunda hiçbiri kalıcı hale gelmez ve geri alınır (rollback edilir). Yukarıdaki banka örneğinde, para transferi işlemi, gönderenden düşme ve alıcıya ekleme adımlarını içeren bir transaction içinde gerçekleştirilir. Eğer adımlardan biri başarısız olursa, tüm transaction geri alınır ve her iki hesap da başlangıçtaki durumuna döner.

ACID Prensipleri

İlişkisel veritabanı sistemleri, transactionların güvenilirliğini sağlamak için genellikle ACID adı verilen dört temel prensibi garanti eder:

  1. Atomicity (Bölünmezlik): Bir transaction içindeki tüm işlemler ya tamamen gerçekleşir ya da hiç gerçekleşmez. Yarım kalmış transaction durumu olmaz. Tıpkı bir atom gibi bölünemez bir bütündür.
  2. Consistency (Tutarlılık): Bir transaction başladığında veritabanı tutarlı bir durumdaysa, transaction tamamlandığında (commit edildiğinde) da veritabanı yine tutarlı bir durumda olmalıdır. Transaction, veritabanını bir geçerli durumdan başka bir geçerli duruma taşır. Kısıtlamaların (CONSTRAINT), tetikleyicilerin (TRIGGER) ve diğer kuralların transaction sonunda hala geçerli olması gerekir.
  3. Isolation (İzolasyon): Aynı anda çalışan birden fazla transaction, birbirini etkilemez. Her transaction, sanki veritabanında çalışan tek transaction kendisiymiş gibi davranır. Bu, transactionlar arası veri çakışmalarını (dirty reads, non-repeatable reads, phantom reads gibi) önlemeyi hedefler.
  4. Durability (Kalıcılık): Bir transaction başarıyla tamamlandığında (commit edildiğinde), yaptığı değişiklikler kalıcıdır ve sistem arızaları (güç kesintisi, çökme vb.) durumunda bile kaybolmaz. Değişiklikler disk gibi kalıcı bir depolama birimine yazılır.
Bu ACID prensipleri, veritabanı transactionlarının temelini oluşturur ve sistemin güvenilirliğini garanti eder.

SQL ile Transaction Yönetimi

Transactionları yönetmek için kullanılan temel SQL komutları şunlardır:

  • BEGIN TRANSACTION (veya START TRANSACTION): Yeni bir transaction başlatır. Bu noktadan sonra yapılan veri değiştirme işlemleri (INSERT, UPDATE, DELETE), transaction tamamlanana kadar geçicidir.
  • COMMIT: Transaction içindeki tüm işlemleri onaylar ve kalıcı hale getirir. Değişiklikler veritabanına yazılır ve diğer kullanıcılar tarafından görülebilir hale gelir.
  • ROLLBACK: Transaction içindeki tüm işlemleri iptal eder ve veritabanını transaction başlamadan önceki durumuna geri döndürür. Yapılan değişiklikler silinir.
Örnek (Kavramsal):
Kod:
-- Bir transaction başlatBEGIN TRANSACTION;

-- Birinci hesap bakiyesini düşürUPDATE HesaplarSET Bakiye = Bakiye - 100WHERE HesapNo = 'TR123';

-- İkinci hesap bakiyesini artırUPDATE HesaplarSET Bakiye = Bakiye + 100WHERE HesapNo = 'TR456';

-- Eğer her iki işlem de hatasız tamamlandıysa, transaction'ı onaylaCOMMIT;

-- Eğer işlemlerden biri hata verirse, tüm transaction'ı geri al (genellikle hata yakalama blokları içinde yapılır)-- ROLLBACK;

Uygulamalardan Transaction Yönetimi

Uygulama kodunda (Java, C#, Python vb.) transactionlar, kullanılan veritabanı sürücüsü veya ORM (Bölüm 21) aracılığıyla yönetilir. Genellikle şu adımlar izlenir:

  1. Veritabanı bağlantısı alınır.
  2. Bağlantı üzerinde otomatik commit modu kapatılır (eğer açıksa).
  3. Transaction başlatma komutu gönderilir veya sürücünün ilgili metodu çağrılır.
  4. Transaction içindeki SQL komutları çalıştırılır.
  5. Tüm komutlar başarılı olursa, commit komutu gönderilir veya sürücünün commit metodu çağrılır.
  6. Herhangi bir adımda hata oluşursa, rollback komutu gönderilir veya sürücünün rollback metodu çağrılır.
  7. Bağlantı kapatılır.
Transaction Isolation Seviyeleri

İzolasyon prensibini sağlamak için farklı seviyeler tanımlanmıştır. Bu seviyeler, bir transaction'ın aynı anda çalışan diğer transaction'lardan ne kadar etkileneceğini belirler. Yaygın izolasyon seviyeleri (artan izolasyon/azalan eşzamanlılık sırasıyla): Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  • Read Uncommitted: En düşük seviye. "Kirli okumalara" (dirty reads - henüz commit edilmemiş veriyi okuma) izin verir. En yüksek eşzamanlılık.
  • Read Committed: Sadece commit edilmiş veriyi okur. Kirli okumaları engeller. Çoğu DBMS'in varsayılan seviyesidir.
  • Repeatable Read: Aynı transaction içinde aynı veriyi tekrar okuduğunuzda aynı değeri alacağınızı garanti eder. "Tekrarlanamaz okumaları" (non-repeatable reads - aynı satırın değerinin değişmesi) engeller. "Hayalet okumalara" (phantom reads - sorgu sonuç kümesine yeni satırların eklenmesi) izin verebilir.
  • Serializable: En yüksek izolasyon seviyesi. Transactionlar tamamen izole edilir; sanki tek tek çalışıyorlarmış gibi görünür. Tüm okuma ve yazma çakışmalarını engeller. En düşük eşzamanlılık; kilitleme (Bölüm 18) nedeniyle performans sorunlarına yol açabilir.
Doğru izolasyon seviyesini seçmek, uygulamanızın gerektirdiği veri tutarlılığı ile veritabanının kaldırabileceği eşzamanlılık (concurrency) arasında bir denge kurmayı gerektirir.

Transactionlar ve ACID prensipleri, güvenilir ve tutarlı veritabanı uygulamaları geliştirmenin temelidir. Her veritabanı geliştiricisi ve yöneticisinin bu kavramları iyi anlaması çok önemlidir.

Bu bölümde veritabanı transactionlarının ne olduğunu, ACID prensiplerini ve SQL ile uygulama seviyesinde nasıl yönetildiğini ele aldık.

Veritabanı yönetiminin bir diğer önemli yönü, belirli görevleri zamanlanmış olarak otomatik çalıştırmaktır.

Bir sonraki ve serimizin bu aşamadaki son bölümünde, veritabanı içinde zamanlanmış görevleri yönetmek için kullanılan araçlara, yani Görev Zamanlayıcılarına (Job Schedulers - örneğin SQL Server Agent) göz atabiliriz.


 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri