Rastgele Yazılar : Unix Nedir?
Rastgele Yazılar : (ORA-00313) Redolog grublarından biri (veya birkaçı) Ka...
Rastgele Yazılar : Dinamik SQL - 1
Rastgele Yazılar : SSAS OLAP Küpü Oluşturma
Rastgele Yazılar : Neden ORM- Object Relatioanal Mapping- kullanayım ki?
Rastgele Yazılar : Sql String İşlemleri
Rastgele Yazılar : Add Months() Fonksiyonu
Rastgele Yazılar : Otomatik Bellek Yönetimi - Automatic (Shared) Memory Ma...
Rastgele Yazılar : Tablespace Yönetimi - 4
Rastgele Yazılar : Dataguard' dan Nasıl Test Ortamı Oluşturulur
Transaction’ ı basitçe veritabanı üzerinde yapılan işlemler olarak algılayabiliriz. DML komutlarını içeren yapı da denebilir. Örneğin; yazdığımız her insert, update veya delete cümlesi Oracle için bir Transaction’dır ayrıca Transaction’lar memory (hafıza) üzerinde gerçekleşir ve belli sıklıkta Fiziksele yazılır.
Veri Tabanı İşlemleri (Transactions) Denetim Cümleleri -Commit: Yapılan bir işlemin kalıcı olarak kaydedilmesidir. -Rollback: Yapılan bir işlemin geri alınmasını sağlar. -Savepoint: Bir veri tabanı işlemi içinde işaretli noktalar oluşturmak için kullanılır, birden fazla işaret noktası oluşturulabilir. -Rollback to : Kod kümesi içerisinde belirtilen noktaya geri gitmek için kullanılır. -Set Transaction: Birçok veri tabanı işlem özelliğinin (sadece okuma gibi) değiştirilmesi için kullanılabilir. Makalenin en başında Transaction’ın tanımını yaparken DDL ve DML gibi kavramlar kullandık, peki bu kavramların tanımı nedir? Ne işe yarar? DDL: Tablo oluşturmayı, silmeyi ve üzerinde değişiklik yapmayı sağlayan ifadelerdir. Aşağıdaki komutlar tüm schema’lar (index, table, view, constraint, sequence) için de kullanılır ancak tanımlamalar tablo üzerinden yapılacaktır; Create: Veri tabanı üzerinde tablo oluşturmak için kullanılan komuttur. Drop: Veri tabanı üzerinde oluşturulan tabloyu silmek için kullanılan komuttur. Alter: Veri tabanı üzerinde oluşturulan tabloyu güncellemek için kullanılan komuttur. Truncate: Veri tabanı üzerinde oluşturulan tabloyu geri dönüşü olmaksızın silen komuttur. Rename: Veri tabanı üzerinde oluşturulan tablonun ismini değiştirmek yeniden adlandırmak için kullanılan komuttur. DML: Data Manipulation Language kelimelerinin kısaltmasıdır. Insert, update, delete komutları DML komutlarıdır. Insert: Veri tabanı üzerinde oluşturulan tablolara veri eklemek için kullanılan komuttur. Update: Veri tabanı üzerinde oluşturulan tablolarda bulunan verilerin güncellenmesi için kullanılan komuttur. Delete: Veri tabanı üzerinde oluşturulan tablolarda bulunan verileri silmek için kullanılan komuttur. --Transaction, alttaki sql cümlelerinden biri ile başlar: -Insert -Update -Delete -Merge -Select For Update -Lock table -- COMMIT veya ROLLBACK ile tamamlanır. -- Herhangi bir DDL cümlesi kullanıldığında otomatik olarak commit yapılmış olur ve bu işlem de Transaction mantığını bozar aynı zaman da database tarafında otomatik olarak commit gibi algılanır. Herhangi bir Transaction işleminden sonra, commit veya rollback çalıştırılmadan bir DDL cümlesi çalıştırıldığında, o işlem otomatik olarak commit edilmiş olur. --Herhangi bir çalışma normal bir şekilde kapatıldı ise kullanıcı istemci ayarlarına göre hareket edilir. --Herhangi bir çalışma normal bir şekilde kapatılmadı ise ROLLBACK işlemi gerçekleştirilir.
Eşzamanlılık ve Kilit Kavramaları Eşzamanlılık, birden fazla kullanıcının veriye ulaşması ile herhangi bir sorun çıkmadan işlemlerini gerçekleştirmesi ile alakalı olan bir konudur. Bu sorunların oluşmaması için Kilitler kullanılır fakat kilit kullanımını bilinçsiz arttırılması veri tabanının kullanımını zorlaşır ve kullanıcılar için bir dezavantaj oluşturur ve önerilen en az kilit ile yönetilmesidir. Oracle veri tabanı kullanımı sırasında, veri tabanını daha performanslı kullanmak adına bilinçli bir kilit ataması veya arttırılması yapılmadığı vakit Oracle veri tabanı otomatik olarak en düşük kilit koruma ataması ile düzeni sağlar, bu mantığı da şu şekilde sağlar; - Veri tabanı kullanıcılar herhangi bir okuma işlemi sırasında bir kaynak kullanımı için diğer veri tabanı kullanıcılarının okuma işlemlerini beklemez. - Bir üstte okuyucular için olan durum yazıcı kaynaklarını kullanan veri tabanı kullanıcıları için de geçerlidir. Fakat yazıcılar aynı anda aynı satırları değiştirmek istedikleri vakit beklerler. Commit ve rollback kavramlarını detaylı olarak incelemeye geçmeden önce bu kavramları anlayabilmemiz için bazı önbilgilerimizin olması gerekir. Database Buffer Cache ve Undo Tablespace kavramlarını açıklayarak önbilgilerimizi edineceğiz. Database Buffer Cache: Database kullanıcılarının her seferinde direk fiziksel I/O yapmaması için Fiziksel alandaki verinin bir kopyasını barındıran Buffer alanıdır. En sık kullanılan data bloklar bu alanda tutulur ve belirli aralıklarda Fiziksele yazılır. Böylelikle kullanıcı işlemi DB Buffer üzerinden gerçekleştirmiş olur. Undo Tablespace: Her veri tabanı, işlenen verinin bakımını yapabilmesi ve ihtiyaç duyulduğunda, alakalı bilgiyi geri alabilmesi için bir metoda ihtiyaç duyar, bunu da undo sağlar. Not olarak da bahsedilen bilginin henüz commit edilmemiş aktif Transaction’lar olarak düşünmemiz gerektiğini belirtelim. Database üzerinde iki şekilde Undo Tablespace oluşturulabilir; ilki otomatik undo yönetimi bunu Oracle kendisi oluşturur, diğeri ise kullanıcıların oluşturabileceği Undo Tablespace’leridir. Fiziksel de bulunan bu alan commit edilmediği sürece bilgilerin en son halini tutar. Şimdi de bunu örnekleri şekillendirerek görelim;
Örnek: Transaction gerçekleştiğinde, verinin eski halini Undo Tablespace’e atılarak DB Buffer’da update işlemi yapılır ve commit gerçekleşene kadar arada ki bağlatıyı gösteren pointer mantığında bir köprü kurulur.
Dolayısıyla farklı sessionlardan Database’e bağlı olup 10 numaralı kaydı çeken user’lar köprü aracılığıyla Undo Tablespace’deki veriyi okurlar.
Eğer rollback yapılırsa, Undo Tablespace’deki veri tekrar ilgili data bloğuna geri yüklenir. Fakat commit yapılırsa, Oracle’daki bağlantıyı kaldırır ve tüm user’lar direkt olarak bu datayı okurlar. Commit yapıldığında işlemin kalıcı olması mantığı buradan gelmektedir.
Savepoint: Rollback yapılan işlemlerin geri alınmasını sağlıyordu, savepoint, rollback ile kullanıldığın da çok daha avantaj sağlıyor kullanıcılara, peki savepoint nedir? Savepoint, en son işlemi aklında tutar ve ‘rollback to’ kullanımı ile tanımlandığı noktaya kadar yapılan işlemlerin geri alınmasını sağlar. Örnek: create table deneme34 as select * from employees; commit; select * from deneme34; update deneme34 set employee_id = 100 where first_name like '%Alexander%'; savepoint svpnt; update deneme34 set employee_id = 100 where first_name like '%Lex%'; select * from deneme34 where employee_id = 100;
rollback to svpnt; select * from deneme34;
Örnekte görüldüğü gibi first_name’i Lex olan datanın employee_id si 102 yani rollback, savepoint kullanımı ile sadece hemen üstünde ki update kısmını iptal etti. Transaction kavramını size basit örneklerle anlatmaya çalıştım umarım faydalı olmuştur, bir sonraki Flashback konulu makalem de görüşmek dileği ile… Anıl ERDOĞAN.