Oracle Transactions – 1

Herkese Selam,

Bu yazıda Oracle’ın en temel yapılarından biri olan Transaction yazı dizisine başlayacağız. Transaction kavramını biraz açıkladıktan sonra transaction yönetimi ve Transactionların iç yapısından bahsedeceğiz. Bu konu kapsamında daha önceden canlı olarak izlediğim Hasan Tonguç YILMAZ‘ın yaptığı “Oracle’da Transaction Yönetimi” adlı sunumuda aşağıdaki linkler aracılığı ile izleyebilirsiniz. Umarım farkındalık yaratma anlamında faydalı bir çalışma olur.

Video Part1: http://www.seyretogren.com/video/oracle-transaction-management-1.html

Video Part2: http://www.seyretogren.com/video/oracle-transaction-management-2.html

Video Part3: http://www.seyretogren.com/video/oracle-transaction-management-3.html

Video’da anlatılan sunum linki: http://tonguc.files.wordpress.com/2010/12/oracle-veritabanc4b1nda-transaction-yc3b6netimi-giric59f-hty.ppt

Transaction

Transactionlar database’i file sistemden ayıran önemli özelliklerden biridir. File sistem üzerinde bir döküman yazdığımızı düşünelim ve İşletim Sisteminin bu file’ı yazmamız esnasında bir crash aldığını varsayalım. Kullandığımız file sistem Journaling file sistem(Senkron şekilde aynı dosyayı yedekli işleyen file sistem ) ise işletim sistemi bize yarıda kesilen file’ımızı kaldığımız yerden devam etmemize olanak sağlayacak şekilde recover edebilecektir. Ancak Journaling File Sistemler’deki aynı file’ın senkron bir şekilde bir kopyasının sistem tarafından tutuluyor olması bizi her zaman kurtaramayabilir. Örneğin biz File’ımızı yazıyoruz ve işletim sistemi eş zamanlı olarak arka tarafta file’mızı senkronize etmeye çalışıyor. İşletim sistemi tam senkronizasyon işini yaparken crash alır ise bu sistemde kaldığımız yere geri dönme konusunda bize yardımcı olamayacaktır. Bu durumda değişikliklerimizin bazıları geçerli olacakken senkronize edilmeyenler geçerli olamayacaktır. Bu durumda verinin tutarlılığı sağlanmamış olacaktır. Transactionların ana konusuda, amacıda aslında budur. Veritabanını tutarlı bir durumdan diğer bir tutarlı duruma geçirmektir. Örneğin database’de değişiklikler yapıp commit komutunu çalıştırdığımızda yaptığımız tüm değişikliklerin kalıcı olarak kaydedildiğinden ve veri bütünlüğünin sağlandığından emin oluruz.

Oracle transactionları, yüksek seviyede eş zamanlı veri erişiminin sağlandığı durumlarda bile her zaman veri tutarlılığını korumakta ve sağlamaktadır. Oracle’da transactionlar tüm ACID karakteristiğini göstermektedir.

Atomicity: Transactionlar atomictir, parçalanamazlar. Ya tamamı çalışır yada hiç çalışmaz.

Consistency: Transactionlar database’i tutarlı bir durumdan diğer bir tutarlı duruma taşır.

Isolation: Transaction commit ile sonlanana kadar yapılan değişiklikler diğer sessionlarda görünmez.

Durability: Transaction commit ile sonlanmış ise artık yapılan tüm değişiklikler kalıcı hale gelmiştir.

Transaction Control Statements

Oracle’da transaction’ın başladığını bildirmek için her hangi bir komut vermemize gerek yoktur. Transactionlar datayı modifiye etmeye çalışan ilk komutla beraber implicit bir şekilde başlar. Ancak SET TRANSACTION veya DBMS_TRANSACTION paketini kullanarakta transaction’ın başladığını söyleyebiliriz fakat bu gerekli bir durum değildir. Transaction’ın sonlandığı nokta ise commit veya rollback komutunun explicit veya implicit(DDL Çalıştırmak) şekilde çalıştırılmasıdır. Ancak ROLLBACK TO SAVEPOINT komutu bir istisnadır ve transaction sonlandırmaz. Transaction’ı sonlandrımak için önerilen yönetem doğrudan komut vererek transaction’ı bitirmemizdir. Aksi takdirde kullandığımız ortama bağlı olarak transactionlarımız sağlıklı bir şekilde sonlanmayabilir.

Oracle’da transactionların atomik olduğunu daha öncede söyledik. Bunun anlamı çalıştırdığımız ifade ya kalıcı olarak işlenir ve sonlanır veya hiç çalışmamış gibi davranılır.

Aşağıda transactionları kontrol ettiğimiz cümlelerin neler olduğu ve ayrıntıları verilmiştir.

COMMIT:  Çalışmasını dışardan vereceğimiz komut ile tetiklebilmek için 2 farklı komut çalıştırabiliriz. Bunlar COMMIT ve COMMIT WORK’tür. Commit transaction’ı sonlandırarak tğm yapılan değişikliklerin kalıcı olmasını sağlamaktadır. Bu sayede yapılan tüm değişiklikler tüm sessionlar tarafından görünür olabilecektir.

ROLLBACK: Çalışmasını dışardan vereceğimiz komut ile tetiklebilmek için 2 farklı komut çalıştırabiliriz. Bunlar ROLLBACK ve ;ROLLBACK WORK’tür. Bu komutda transaction’ı sonlandırır ancak yapılan değişiklikleri bir önceki tutarlı duruma geri alır. Database transaction başlamadan hemen önceki durumuna geri döner. ROLLBACK segmentler okunarak data eski haline geri getirilir.

SAVEPOINT: Save point transaction için check point noktaları oluşturmamıza yarar. Bir transaction içinde birden fazla savepoint noktası oluşturabilmekteyiz.

ROLLBACK TO SAVEPOINT: Savepoint komutu ile beraber kullanılmaktadır. Bu komut ile beraber transaction savepoint ile belirtilen noktaya kadar geri sardırılır ve o noktadan sonra yapan değişiklikler geri alınır.

Ör:

INSERT INTO x(cola) VALUES (y);

SAVEPOINT a;

UPDATE x
SET cola = 5;

ROLLBACK WORK TO a;

COMMIT;

burada en son commit çalıştırıldıktan sonra sistem sadece ilk insert cümlesini kalıcı olarak saklıyacaktır.

SET TRANSACTION: Bu komut transaction’ın sahip olduğu isolation seviyesi, read only veya read write özelliklerin set edilmesine olanak sağlayan bir komuttur. Bu komut aurıca manual undo management yapılırken transaction’ı bilgilendirme amaçlıda kullanılabilmektedir.

Bu komutlardan en sık kullanılanları COMMIT ve ROLLBACK’tir. SAVEPOINT ise bazı  özel durumlarda kullanılmaktadır.

Bu yazıda Transactionlara kısa bir giriş yaptık. Bu yazı dizisine ait bir sonraki makalede ATOMICTY kavramını derinlemesine inceleyeceğiz. Umarım giriş ve farkındalık anlamında faydalı bir çalışma olmuştur.

Kaynaklar:

“Expert Oracle Database Architecture 2011″, Tom KYTE

tahiti.oracle.com

tonguc.wordpress.com

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Root, Uncategorized and tagged , , , , , , , , , . Bookmark the permalink.

4 Responses to Oracle Transactions – 1

  1. Pingback: Oracle Transactions – 2 | Emrah METE

  2. Pingback: Oracle Transactions – 3 | Emrah METE

  3. Pingback: CREATE SCHEMA SÖZ DEYİMİ İLE TRANSACTIONAL DDL | Emrah METE

  4. Pingback: TRANSACTIONAL DDL BASIS WITH CREATE SCHEMA PHRASE | Emrah METE

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s