Menu

28 Eylül 2010 Salı

REDO & ROLLBACK

Günler çok çabuk geçerken sunumlar da artıyor ve ben bu yazı dizisinde kitabın 5. chapterına gelmiş bulunuyorum. Bu chapter DBA ile developer arası bir konudur. Bu chapterı iki makaleye böldüm, oldukça uzun ve önemli bir konu olduğunu düşünüyorum. Daha ayrıntılı bir aktarım için bu şekil daha iyi olacak sanırım.
Peki Redo nedir ?
Yapılan tüm transaction işlemlerinin kayıt haline alınmış halidir. Geri gönüş yapılmak istendiğinde redo ve rollbackten faydalanılabilir. Recovery amacı ile kullanılır. Transaction Logs olarak da adlandırılır. Rollback’e aynı zamanda Undo denilmektedir yani redo ve undo tamamen zıt şeylerdir.
İki tip redo log file yapısı vardır: Archived Redo Logs ve Online Redo Logs . Yapıları aynı, üstlendikleri görevler farklıdır.
Güç gittiğinde -> instance failure’a sebep olur. Online Redo Log ile recover edilir.
Disk sorunlarında -> Archived Log ve Online Redo Log’lar kullanılır.
Kaza –> kaza ile silinmemesi gereken bir object silindiyse vb durumlarda kazadan önceki zamana dönmek için kullanılır. Archived Redo Logs ve Online Redo Logs ‘dan yararlanılır.
Online Redo Log : Her oracle veritabanının en az 2 tane online redo logu vardır.
Archived redo Log: Online redo logların kopyasıdır.  Online redolog da yer kalmadığı zaman ARCH process tarafından başka bir locationa yazılır.
Commit ne yapar?
Commit transactionın boyutundan bağımsız, hızlı bir operasyondur.  Büyük transaction daha uzun sürede commit edilir diye bir şey yoktur. Dolayısı ile transactionı küçük parçalara bölmek işlem hızını arttırmaz. Bu yanlış bir düşüncedir.
Peki neden ?
Commit yapılmadan zaten database gerekli değişiklikleri arkaplanda yapmıştır.
-          Rollback segment kayıtları SGA’da oluşturulmuştur.
-          Değişen datablockler SGAda oluşturulmuştur.
-          Buffer redo oluşturlmuştur.
-          Yukarıdaki 3 işlemin büyüklüğüne bağlı olarak diske flush edilmiş olabilir.
-          Kilitler elde edilmiştir.
Commit yapıldıktan sonra
-          Unique system change number (SCN) atanır.
-       Log writer process (LGWR), SGA’s redo log bufferları redo log file’lara yazar.
-       Oracle rowlarda tutulan kilitleri serbest bırakır.
-       Transactionı bitirir. v$Transaction daki verimiz kaybolur.
SCN Ne İşe Yarar ?
-          Transactionları sıralar.
-          Hata sonrası sistem kurtarmayı sağlar
-          Tutarlı okumayı sağlar (read consistency)
-          Checkpointing
Bir insert, update vb.. yapıldığında sadece değişen kısmını alır.
Her commit sırasında I/O işlemi yapılır. 3sn de bir commit edilmese bile redo log file’lara yazılır. Asıl uzun süren bu I/O işlemidir. Redolog bufferın sizeına da bakılmalı, eğer dolmuşsa 3 snden az bir süre içinde de yazılabilir.  I/O işlemi olduğundan configurasyona göre değişir.
Batch işlem yapılıyorsa blok olarak data alınmalı, insert edilmeli,daha sonra commit edilmeli. Database crash olması ihtimaline karşı nerde kalındığını bilmek için bir kolonda işlendi işlenmedi bilgisi tutulabilir.
Rollback Ne Yapar?
Rollback yapılmadan zaten database gerekli değişiklikleri arkaplanda yapmıştır.
-          Rollback segment kayıtları SGA’da oluşturulmuştur.
-          Değişen datablockler SGAda oluşturulmuştur.
-          Buffer redo oluşturlmuştur.
-          Yukarıdaki 3 işlemin büyüklüğüne bağlı olarak diske flush edilmiş olabilir.
-          Kilitler elde edilmiştir.
Rollback yapıldıktan sonra
-          Rollback segmentindeki data okunur.
-          Yapılan işlemin tersi yapılır (insert edildiyse,delete işlemi vb..)
-          Kilitler serbest bırakılır.
-          Bütün değişiklikler geri alınmış olur.
Rollback işlemi biraz daha farklı ve maliyetlidir. 

1 yorum: