Oracle Redo Log yönetimi

Önceki Yazımızda Redo Log mimarisi ve işleyişi hakkında konuşmuştuk. Şimdi Redo log eklenmesi silinmesi kısaca yönetimi hakkında konuşalım.

Redo loglar aynı diskte durduğu gibi farklı disklerde de durabilir. Bir Instance en az 2 log file istediğini daha önce söylemiştik. Aynı member(elemanların) oluşturduğu kümeye redo log grup denir. Ayrıntılı anlatırsak Bir problem çıkma ihtimâline karşı redo log dosyalarını çoklamak (multiplexing) mümkündür. Birinci redo log dosyası demek yerine, birinci redo log grubu denerek, bu gruba birden fazla redo log dosyası eleman/üye (member) olarak atanır. Grup içindeki redo log dosyalarının hepsi de aynıdır.

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- ----------------
         1          1       1351   52428800          1 INACTIVE
         2          1       1352   52428800          1 CURRENT
         3          1       1350   52428800          1 INACTIVE
SQL>

Redo Log dosyalarını oluşabilecek olağan dışı durumlara karşı çoklu (multiplexing) hale getirirsek o kadar güvenli olmuş oluruz. Öncekiyazımızda Redo Log mimarisinde işleyişi anlatmıştık. LGWR, bir sonraki grup elemanları arşivlenmediği için erişemiyorsa, Grup elemanları arşive çıkılana ve kullanım için uygun hâle gelene kadar, işlem durdurulur.
Yine başka bir senaryo da Sıradaki grubun bütün elemanlarına donanım kaynaklı bir problemden erişilemiyorsa, Oracle hata döndürür ve veritabanı kapatılır. Bu durumda, bir online redo log’un olmayışı nedeniyle recover işlemi yapmanız gerekebilir.
Bu sebeple Multiplexing yapılan elemanların farklı disklere yazılması veri önemlidir.
Şimdi Redo Log dosyaları ile neler yapabileceğimize bakalım

Redo Log’lara Grup/Eleman Ekleme/Çıkartma Boyut değiştirme / Yeniden adlandırma vs...
Öncelikle durumuna bakalım

SELECT F.MEMBER, L.* FROM V$LOGFILE F, V$LOG L WHERE F.GROUP# = L.GROUP#




Yeni Redo Log eklenmes: (ADD NEW ONLINE REDO LOG);
Şimdi  basit ilerleyelim ve hazırda bulunan 3. Online Redo Log file group için 4. File ekleyelim.

SQL> ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/app/oracle/oradata/denizgyotst/redo04.log ') SIZE 50M;
Database altered.

Ayni anda iki elemanli yeni bir grup eklemek:
SQL> ALTER DATABASE ADD LOGFILE GROUP 5 ('/u01/app/oracle/oradata/denizgyotst/redo51.log', '/u01/app/oracle/oradata/denizgyotst/redo52.log' ) SIZE 50M;

Kontrol edelim



Drop edip, Boyut değiştirme :
Redo log gruplarını mümkün olduğunca birbiriyle aynı şekilde tutmak önemlidir.  Bazı durumlarda mevcut redolog fillerın size ni eşitlemek isteriz. Şimdi bu duruma yönelik bir çalışma yapalım
 Tabi önce durumuna bir bakalım.

Şayet işlem yapacağımız Redo Log aktif ise switch etmemiz gerekecek. (2. Redo group için)

SQL> alter system switch logfile;
System altered.
SQL>

Şimdi tekrar durumlarına bakalım
SELECT F.MEMBER, L.* FROM V$LOGFILE F, V$LOG L WHERE F.GROUP# = L.GROUP#


Gördüğünüz gibi 2.Log file Active, 3.Log file current duruma geçti. Yani LGWR daha önce 2.Log’a yazarken şimdi 3.Log’a yazmaya başladı. LGWR bunun yanında DBWR ‘a 2.Log için mesaj verdi. 2.Log sistem check point atana kadar active statusünde kalacak.  (Bu konuyu önceki konumuzda detaylı behsetmiştik )

Eğer sistemin check pointi ni beklemek istemiyorsak manuel checkpoint atarız.

SQL> alter system checkpoint;
System altered.

Şimdi yeniden bakalım.

Evet artık Inactive grup silinebilir yeniden boytlandırılabilir işlem yapılabilir.
SQL> alter database drop logfile group 2;
Database altered.
SQL>

Şimdi yeniden ekleyelim!
SQL> alter database add logfile group 2 size 50M;
Database altered.
SQL>


Kontrol ettiğimizde görüyoruz ki UNUSED durumda hemen switch ediyorum..

SQL> alter system switch logfile;
System altered.
SQL>



Ve Current duruma geçtiğini görüyorum..
Bu işlemi boyutunu değiştirmek istediğimiz redo log grupları için yapabiliriz. Yeniden eklediğim 2.Grup içinde aynı boyutu verdim.
Drop log member:
Redo log gruplarını mümkün olduğunca birbiriyle aynı şekilde tutmak önemlidir demiştik. Yani bir
grubu 2 elemanlı yaratırken, diğer grubun 4 elemanlı olması tasarım açısından güzel
gözükmeyecektir.

SQL> ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/denizgyotst/redo52.log';
Database altered.

Bu arada DROP edilen redo log nesneleri aslında silinmezler. Ancak bir daha kullanılamazlar.

İyi çalışmalar diliyorum
Usta.. 

Hiç yorum yok:

Ara