Hurriyet

redolog etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
redolog etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Mayıs 2013 Salı

Redo Log Yönetimi 2:




Yeni redo log dosyalarının üretimi için veritabanında “alter database” yetkisinin bulunması gerekmektedir. Bir oracle  veritabanında en fazla Maxlogfiles parametresi kadar grup bulunabilinir.

Maxlogfile kayıtlarını görmek için: Show parameters maxlogfiles;

Alter database add logfile ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') size 5M;

Ayrıca, aşağıdaki sorguda olduğu gibi grubumuza bir numara da atabiliriz. :

Alter database add logfile group 1 ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') size 5M;

Redo Log Member Yaratılması

Alter database add logfile  member '/oracle/dbs/log3c.rdo' to group 1;

Ya da aşağıdaki gibi grup belirtmeden sadece dosya adları belirtilerek de eklenebilinir.

Alter database add logfile  member '/oracle/dbs/log3c.rdo' to ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo')

Redo Log Dosyalarının Yerinin Değiştirilmesi ve İsimlerinin değiştirilmesi:

1)      İlk olarak veritabanı kapatılır.

Shutdown;

2)      Redo log dosyaları yeni yerlerine taşınırlar. 

mv /diska/logs/log1a.rdo /diskc/logs/log1c.rdo
mv /diska/logs/log2a.rdo /diskc/logs/log2c.rdo

3)      Veritabanı başlatılır ancak açılmaz. Mount modunda açılır. Bu şekilde açılmasının nedeni ise control file’daki dosyaların mount modda yerlerinin belirlenmesi ama içlerinin okunmamasıdır.

Startup mount;

4)      Sonrasında ise “alter database” ifadesi ile log file’ların isimleri değiştirilir.
ALTER DATABASE
  RENAME FILE '/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo'
           TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';

5)      Veritabanı açılır.

Alter database open;

Redo Log Group ve Memberların Drop Edilmesi

Redo log dosyaları bazen disk değişimlerinde ya da kurtarma operasyonlarında silinmeleri gerekebilinir.Diskler bozulduğu zamanlarda da bütün redo log dosyalarını silmemiz gerekebilir.

-Redo log dosyaları silinmeden önce bazı şartlar göz önünde bulundurulmalıdırlar. Örneğin bir instance’ın çalışmayı sürdürebilmesi için en az 2 grup redo log dosyasının olması lazım.

-Redo log gruplarının silinebilmeleri için “inactive” durumda olmaları gerekir. Eğer şu an kullanılanın silinmesi isteniyorsa, önce log switch yaptırılırılmalıdır.

Alter system switch logfile;

-Bir redo log grubu silinmeden önce arşivlenip arşivlenmediği incelenmelidir. Bu da dictionary’den v$log tablosu sorgulanarak öğrenilebilinir.

Select Group#,archived,status from v$log;

Redo log grubunun drop edilmesi için aşağıdaki sorgu kullanılır.

Alter database drop logfile group 3;

Bir redo log grubu drop edildiğinde, ve sistem de OMF (oracle-managed files ) yoksa yani sistemdeki veritabanı dosyaları oracle tarafından kontrol edilmiyorsa o redo log dosyaları sadece veritabanı yapısından atılmış gibi gözükür. Tamamen silinmesi için bu yapılan işlem sonrası gerekli işletim sistemi komutlarını kullanarak dosyaların tamamen silinmesidir. OMF kullanılsaydı, dosyalar otomatik olarak silineceklerdi.
Tek bir member drop etmek içinse aşağıdaki komutlar kullanılır.

Alter database drop logfile member '/oracle/dbs/log3c.rdo';

Log Switch Zorlaması

Log switch zorlaması  LGWR process’inin zorla bir redo log grubuna yazmayı durdurmasını, ve başka bir redo log grubuna yazmaya başlamasını sağlar.

Alter system switch logfile;

Redo Log Dosyalarının Kontrolü

Redo log dosyalarının checksumları kontrol edilerek dosyaların içinde hiç corruption var mı, redo log dosyalarının blokları arasında bir sorun olup olmadığı incelenerek görülür. Bunun için de veritabanında bulunan bir parametre aktifleştirilebilinir. DB_BLOCK_CHECKSUM parametresi true yapılırsa, veritabanı kendiliğinden bu checksum değerlerini hesaplamaya başlar.

Redo Log Dosyasının Temizlenmesi

Redo log dosyalarının temizlenmesi gerekliliği, bazen redo log dosyalarının yukarıda belirttiğimiz üzere corrupt olması yani block okumada bir sorun yaşanması üzerine yaşanabilinir.  Aşağıdaki ifade  ise corrupt olmuş redo log dosyası eğer şu anda current modda çalışan redo log grubumuza dahil ise çalışabilir.

Alter database clear logfile group 3;

Eğer corrupt olmuş redo log dosyası arşivlenmediyse aşağıdaki sorgu uygulanır.

Alter database clear unarchived logfile group 3;

Redo Log Yönetimi:


Oracle veritabanının recovery(kurtarma) işlemlerindeki en önemli dosyalardır.  Bu dosyalar da veritabanına yapılmış değişiklikler olduğu anda kaydedilmektedir. Bu dosyalar veritabanında bir instance failure yani ani veritabanı kapanmalarında  verilerini kaybını önleme amacıyla oluşturulurlar.

Veritabanında herhangi bir geri yükleme işleminde bu dosyalar içindeki redo kayıtları alınır ve veritabanındaki gerekli değişiklikler uygulanır.  Redo kayıtları LGWR(log writer) process’i tarafından yazılır. Ne zamanki bir transaction commit(kaydedilirse) edilirse, LGWR process’i tetiklenir ve redo log lara yazılır ve buna bir SCN(system change numer) numarası atanır.

Oracle Veritabanı her zaman en az 2 redo log dosyasının olması gerektirir.  Bu 2 dosyadan bir tanesi diğeri yazılıp arşivlenirken, diğeri aktif olarak kullanılır. Eğer veritabanı NOARCHIVELOG modda ise yapılan değişiklikler redo log dosyasından datafilelara kaydedildikten sonra tekrar kullanılabilinir hale gelir.  Eğer veritabanı ARCHIVELOG modda ise,  redo log dosyasının tekrar kullanılabilir hale gelmesi için ilk önce içerideki kayıtları datafile’a kaydedilmesi ve arşivlenmesi gerekmektedir.

Redo log grup detayları: Select * from v$log;

Redo Log dosyalarının groupları ve memberları: select * from v$logfile;

En fazla redo log verisi üreten kullanıcılar:

Özel sorgu.

SELECT s.sid, s.username, s.program, t.value "redo blocks written"
  FROM v$session s, v$sesstat t
 WHERE s.sid = t.sid
   AND t.value != 0
   AND t.statistic# = (select statistic# from v$statname
                        where name = 'redo size')
ORDER BY 4
/





Active, Current, Inactive Redo Log Dosyaları

Veritabanına aktif olarak yazılan redo log dosyasına “Current” redo log dosyası denir. Bu dosyaların özel adlarının olmasının nedeni veritabanı sorgulanırken hangisinin hangi modda olduğunu ve hangilerinin aktif olduğunu görmek içindir.

Instance recovery, yani bir kurtarma anında gerekecek olanlar ise “Active” olarak belirtilirler.  Bu kurtarma anında gerekmeyecek olanlarsa “Inactive” olarak belirtilirler.

Redo Logların Çoğaltılması ve Korunması

Redo logların instance recoverylerindeki önemleri çok fazladır. Bu yüzden bu dosyaların korunmaları gerekmektedir. Bu dosyaların korunmaları için ayrı ayrı dosyalarda saklanmalıdır. Bunun için de “group” oluşturulmalıdır. Bu gruplardaki her “member” diğerinin tıpatıp aynısıdır.

Eğer LGWR process’i bir redo log dosyasına yazamazsa hem alert dosyasına hem de LGWR  trace dosyasına not düşer. Ayrıca erişilemeyen log dosyası invalid konuma düşer.

LGWR process’i redo log grouplarından birine yazma amacıyla erişemiyorsa, bütün “member”ları  erişilemez durumda ise veritabanı çalışmayı durdurur ve kapanır. Tekrar yazabilir hale gelene kadar yapılan işlemleri kabul etmez. Eğer checkpoint ilerlememişse erişilemeyen grup drop edilmeden önce “Alter database clear unarchived log” diyip archiviing iptal edilip sonra drop edilir. Eğer checkpoint ilerlemişse sorun yoktur çünkü log dosyası arşivlenmiştir. O yüzden erişilemeyen redo log dosyası drop edilir.