Tuesday, June 2, 2009

REDO LOG FİLELERİ ANLAMAK

redo loglar oracle'de yapilan islemlerin datafilelere yazilmadan önce tutuldugu dosyalardir
redo log ile bazi konu basliklarini buraya yaziyorum. firsat buldukca altlarina açiklama ekleyecegim.
1-redo log lar neler içeriyor.
-Öncelik ile redo loglar redo kayitlari içeriyor. :)
- bu redo kayitlari redo girdilerini içlerinde barindiriyor.
- redo group.member.
-system change number (SCN)
2-redo log memberlarini farkli disklere yerlestirme
-Bunu yapmadaki amaç eger disklerden birisi giderse diger disk imdadimiza yetissin.
3- redo log memberlarinin boylarinin ayarlanmasi
- ayni multiplexed redo log grubundaki memberlar ayni boyuta sahip olmak zorundadir.fakat farkli gruplar farkli boylarda olabilir.

4-redo log dosyalarinin nuamralarini belirlemek
- bunu belirlemedeki en etkili yol benim anladigim kadari ile deneme yanilma yontemi diyebiliriz. herkezin veritabani(VT) farkli olacagi için bu degeri bir standarta oturmak

çok mantikli olmaz. bu sebebden farkli degerler vererek VT den en etkili sonucu alana kadar deneme yanilma yapmaktir.
- alert log lar incelenerek ne kadar bekleme yapiyor. incelenebilir.
- MAXLOGFILES , MAXLOGMEMBERS gibi degerler karsimiza çikiyor. bu degerleri CREATE DATABASE ile belirliyoruz. eger belirlemez isek isletim sisteminin varsayilan degerini

aliyor. control file dan bunu degistirebiliyoruz. ama söyle bir durum karsimiza çikiyor.MAXLOGFILES degerini 10.2.0 dan önce override etmek istersek ya re-create database

yapacagiz yada controlfile ile degisecek.

5-Arsivleme geçikmelerini kontrol etmeliyiz.

6- redo log dosyalarini silme.
-active olani silemeyiz. onu önce inactive yapmak lazim. bunu içinde yedeklemeli archicved olmali.
-oracle sadece kendi sisteminde parametlerini siliyor. biz kendimiz isletim sisteminden o dosyalari silmeliyiz.
-cok fazla grup oldu ve veritabanimzi kuculdu o zaman silme islemi gerekli olabilir.
-disklerden birisinde bir hata oldu o zaman bazi gruplari silebiliriz.
-redo log dosyalarinda bir tanesi uygunsuz bir yede olabilir. mesala ne bileyim diskin birisinin boyu küçük kalmistir yerli degildir o zaman silersin. bu gibi sebepler redo log

silmene neden olabilir.

7- Instance ler en az iki tane redo log grubu istiyor. Bunun sebebi bir tanesi işlemlerin kayıtlarını tutarken diğeri ise yapılan işlemleri datafilelere aktarıyor.
Örneğin iki redolog file var elimizde Oracle ne yapıyor önce birisini current durumuna getiyor. Biz database çeşitli insert delete işlemleri yapıyoruz, bu yaptığımız işlemleri

current durumundaki redolog'a yazıyor. Bir süre sonra bu yazdığı redo log dolunca LGWR gidiyor diğer redolog dosyasının statusunu current yapıyor ve ona yazmaya balışıyor. Bu

sırada oncekinin status'unu active yaparak içerisindeki verileri datafilelere aktarıyor.sirkülasyon bu şeklide devam ediyor. Ne olunca sirkülasyonda takılma meydana geliyor.

Active durumdaki redologun datafilelere aktarılması işlemi bitmeden current durumdaki redolog dosyasının dolması. Durum böyle oluncada oracle thread 1 cannot allocate new log

sequence. hatasını dönduruyor. Bu durumdan kurtulmak için redolog dosyalarımızın sayısını ve boyutunu iyi belirlemeliyiz.
ALTER SYSTEM SET LOG_CHECKPOINT_TIMEOUT=27000 SCOPE=BOTH; active durumdaki redologların yarım saatte bir check point edilerik datafilelere yazılması gerektiğini söylüyoruz.

8- Bir redo log member'ı silmek sitediginizde onun gecersiz olmasi gerekmektedir. En son gecerli memberi silmek isterseniz bir sonraki redo log file in gecerli olmasini

beklemelisiniz yada
yada ALTER SYSTEM SWITCH LOGFILE; komutu ile active durumdaki redolog file'i datafile aktararak inactive duruma getirebilirsiniz. Oracle silme islemini kendi parametre

dosyasinda yapar isletim sistemi seviyesinde bir silme gerçekleştirmez. İşletim sisteminden el ile silmeniz gerekecektir.Burada dikkat etmeniz gereken konu Database kapalı iken

redologların hepsini silebilirsiniz. Yanlışlık ile redologlarınız silip database'nin açılmasını tehlikeye atmayınız. eğer veritabanını normal bir şekilde kapattıysanız

redologlardaki verileriniz datafilelere yazılacaktır. Herhangibi bir veri kaybı yaşamazsınız.Fakat database kötü bir şekilde kapandıysa ve bu durumda redologları silerseniz

veri kaybı yaşabilirsiniz. Veritabanı açık iken kullanılmakta olan redolog dosyalarını silmenize oracle izin vermeyecektir.



9- LGWR bir gruptan digerine atlama ile ilgili. LGWR ile bir redolog dolduğunda diğerine geçiyor. Yeni geçtiğini current duruma geriyor. current durumda olanı active durumuna

getirerek içerisindekileri datafilelere aktarıyor. Bu değişiklik parametreleri Control file saklanıyor. Active durumda olan redologdaki veriler ile işlem bitiğinde status

inactive duruma geliyor.

10- Redo log dosyalarinin kontrol edilmesi. Bu islemin amaci tam ve dogru olarak yazildigini kontrol etmek bunu için

-initialization parameter DB_BLOCK_CHECKSUM to TRUE, yapmak yeterli olacaktir. Zaten bu deger varsiyalan olarak TRUE dur. ALTER SYSTEM ile degistirebiliriz.

- eger bir bozulma tespit edilir ise diger gruptaki memberdan okumaya çalisacak ve hatayi düzeltecektir.
12- REDO LOG ların ismini ve konumu değiştirme

bu işlem için öncelik ile veritabanını normal bir şekilde kapatıyoruz.

SHUTDOWN

daha sonra işletim sistemi seviyesinde isimlerini değiştirebiliriz yada istersek konularınıda değiştirebiliriz. İkisini birden de yapabiliriz.

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

datanbase'i mount modda açıyoruz.

CONNECT / as SYSDBA
STARTUP MOUNT

Bu işlemlerin ardından işletim sistemi seviyesinde yaptıklarmızı Oracle söylüyoruz.

ALTER DATABASE
RENAME FILE '/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo'
TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';

Artık veritabanımızı açabilriz.

ALTER DATABASE OPEN;

NOT bu işlem zahmetli dikkatli yapmakta fayda var hatta yapmasan önce backup almalıyız. :)

13- REDO LOG STATUS

Active ---> Bu redo log file yazma işlemi bitti içerisindekiler datafilea aktarılıyor demek.
Current ---> Şu anda veritabanında yapılan işlemler bu redo log dosyasına yazılıyor.
Inactive ---> Bu redo log daki veriler datafilelere yazıldı.
unused ---> Henüz bu redo log dosyası hiç kullanulmadı. (tahminen yeni yatarılmış olabilir.)
Invalid ---> Adı üstünde bozuk.

14 - Sadece bir tane Current redo log olabilir. Birden fazla active ve inactive görebilirsiniz.



UNUTMADAN EKLEYELIM HEMEN BU ISLEMLERI YAPARKAN YEDEK ALMALIYIZ YOKSA BASIMIZ DERDE GIREBILIR.
bu kaynakta herşey çok güzel anlatılmış.
http://www.cagataycebi.com/oracle/oracle_redologs.pdf

15- Redo Log Grouplarında kullanımları görmek için sequencelerine bakmak faydalı olabilir. Buradaki değer bana göre redo log grouplarının ne kadar süre doldur boşalt yaptıklarını gösterdiği için boyutlarını belirlemede bize yol gösterebilir.
select * from v$log;
sorgusunda SEQUENCE# değerine bakmamız gerekiyor. Çok buyuk bir değer ise boyutunun arttırılması gerektiğini sçyleyebiliriz. Ama bunu soylemek bu kadar kolay değil. Çünkü belki sizin db nizde çok fazla işlem yapılıyor :)

No comments: