Veritabanı Yönetim Sistemlerinde veri tutarlığı ile ilgili en önemli kavramlardan biri Transaction Isolation kavramıdır. Transaction Isolation’ı anlamak için öncelikle transaction’ın tanımıyla işe başlayalım. Transaction, bir veritabanı üzerinde bir birleriyle ilişkili olarak yapılan işlemlere denir. Örneğin bir İK uygulamasında, yeni bir çalışanın kaydının yapılacağını varsayalım. Bu kayıdın maaş, personel gibi birden fazla tablo üzerinde işlem gerektirdiğini farz edelim. Bu durumda, COMMIT (veya ROLLBACK) işlemine kadar yapılan INSERT işlemleri bir transaction’ı oluşturur.
Transaction Isolation, farklı transactionlarda yapılan sorgularda elde edilecek kayıtlar arasındaki “isolation” seviyesini, yani veri üzerinde yapılan değişikliklerin aynı zamanda gerçekleşen transactionlara nasıl etki edeceğini belirler. ANSI/SQL standartları Transaction Isolastion için 4 seviye belirlemiştir. Bu sevilerin anlaşılabilmesi için öncelikle “veri tutarlılığı” ile ilgili 3 temel kavramın açıklanmasında fayda var:
DIRTY READ: Commit edilmemiş verinin farklı transaction (dolayısı ile farklı sessionlar) tarafından okunabilmesi demektir. Veri tutarlılığı açısından genellikle istenilmeyen bir durumdur.
NONREPEATABLE READ: T1 zamanında çalıştırdığınız sorguda elde ettiğiniz bir kaydın, T2 zamanında farklı olarak okunması anlamına gelir. Bunun sebebi başka kullanıcıların sizin sorguladığınız kayıtlardan bazılarını değiştirmiş veya silip COMMIT etmesi olabilir. İlgili olmalarına rağmen bu terimi, bir Transaction Isolation seviyesi olan “REPEATABLE READ” ile karıştırmamak gerekir.
PHANTOM READ: Eğer aynı sorguyu farklı zamanlarda çalıştırdığınızda dönen kayıt sayısında artış oluyorsa, yani ilk sorguyu çalıştırdığınız zaman gelmeyen kayıtlar sonuca ekleniyorsa, veritabanınız phantom read yapıyor demektir. Bunun sebebi başka kullanıcıların, veritabanına sizin sorgu kriterlerinize uygun veriler/kayıtlar girip COMMIT etmesi, veya daha önce sorgunuz tarafından filtrelenmiş kayıtlarda değişiklikler yapılması olabilir.
Nonrepeateable read ve Phantom Read, yabancı kavramlar gibi görünsede aslında bütün veritabanlarının varsayılan eylemleridir. Bu iki eylem, COMMIT edilmiş kayıtların sessionlar arasında görünmesini sağlarlar ve özel durumlar dışında, veritabanı uygulamalarında istenen bir durumdur.
Şimdi bu 3 kavramı kullanarak “Transaction Isolation” seviyelerini açıklayalım:
READ UNCOMMITTED: Bu seviyede, kullancılar “dirty read” yapabilirler. Yani kullanıcılar COMMIT edilmemiş bile olsa, üzerinde değişiklik yapılmış kayıtların son haline erişebilirler.
READ COMMITTED: Oracle için varsayılan “isolation” seviyesidir. Kullanıcılar, diğer kullanıcıların sadece COMMIT ettikleri değişiklikleri görebilirler. Yani “nonrepeateable read” ve “phantom read” yaparlar ama “dirty read” yapamazlar.
REPEATABLE READ: Bu isolation seviyesinde kullanıcılar sadece “phantom read” yapabilirler. Yani sorgularında dönen kayıtlar, başka kullanıcılar tarafından değiştirilse bile, aynı sorgu için transaction boyunca aynı sonucu alacaklardır. Buna karşın başka kullanıcıların COMMIT etmiş oldukları yeni kayıtları, sorguyu tekrarladıklarında görebileceklerdir.
SERIALIZABLE: Bu seviyede kullanıcılar “dirty read”, “nonrepeatable read” ve “phantom read” yapamazlar. Daha çok Datawarehouselarda kullanılabilecek bir isolation seviyesidir. Kullanıcılar transaction boyunca sorgularında hep aynı sonucu alacaklardır
Oracle bu 4 seviyeden sadece 2sini (READ COMMITTED ve SERIALIZABLE) desteklemektedir. Ayrıca sadece Oracle veritabanında olan “READ ONLY” seviyesi vardır. READ ONLY seviyesinde, kullanıcı SERIALIZABLE seviyesindeki gibi işlem yapar ama veritabanında her hangi bir değişiklik yapamaz. Transaction seviyesini session veya database bazında değiştirebilirsiniz. Bunun için,
ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE
veya
ALTER DATABASE SET ISOLATION_LEVEL=SERIALIZABLE
komutlarını kullanabilirsiniz. Ayrıca SELECT sorgularında FOR UPDATE parametresini kullanarak o an ki transaction’ınız için geçici olarak SERIALIZABLE seviyesi elde edebilirsiniz.
Konu 69 kere Okundu
Kategori Oracle
Beğendiyseniz Paylaşın
- Google Buzz ekleyin
- Delicious
- Digg this
- StumbleUpon
- MySpace
- Technorati

Yusuf Arslan
Oracle Open Source
1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57bWebsite: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir
En Son Yusuf Arslan
Yorum yaz
Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.