Oracle Online Logların Boyutunu Nasıl Değiştiririz

Hemen hemen tüm DBA lerin başına en az bir kere online logların boyutunu değiştirme işi gelmiştir. Biliyorsunuz ki online logların boyutu ve sayıları veritabanımızın performansını doğrudan etkilemektedir. Çok küçük boyutlu loglar veritabanımızın arkaplanında çalışan processlerin çok fazla switch işlemi yapmasına ve bunun da veritabanında beklemeye sebep olmaktadırlar. Çok büyük boyutlu loglar da ise, veritabanının crash olması durumunda veri kayıplarına neden olacağını biliyoruz. Oracle ın önerdiği bir saat içinde en fazla 5 kere log switch olmasıdır. Bu yüzden online log boyutları veritabanı için çok önem taşımaktadır.

Şimdi örnek olarak veritabanımızda bulunan online logların boyutlarını değiştirelim.

Aşağıdaki komutla veritabanında bulunan log dosyalarını ve boyutlarını listeleyebiliyoruz.

SQL> select group#,members,status,bytes/1024/1024 as mb from v$log;

 GROUP#    MEMBERS STATUS                   MB
---------- ---------- ---------------- ----------
 1          1 INACTIVE                 50
 2          1 INACTIVE                 50
 3          1 CURRENT                  50

Yukarıdaki örnekten gördüğümüz üzerine veritabanında 3 farklı log grubu ve her grupta bir tane thread bulunmaktadır. Bu yazımda herkesin group ve thread in ne olduğunu bildiğini varsayıyorum. Aşağıdaki komut ise online log ların dosya sisteminde nerede olduğunu göstermektedir.

SQL> select group#,member from v$logfile;

 GROUP# MEMBER
---------- ------------------------------------------------------------
 3 /u01/app/oracle/oradata/orcl/redo03.log
 2 /u01/app/oracle/oradata/orcl/redo02.log
 1 /u01/app/oracle/oradata/orcl/redo01.log

Gördüğünüz üzerine her bir log dosyasının boyutu 50 MB. Şimdi bunları 100M yapacağız.
Veritabanında log dosyalarının direk boyutunu arttırıp azaltamıyoruz. Bunun için istediğimiz boyutta yeni online log dosyaları oluşturuyoruz ve daha sonra eski online log dosyalarını siliyoruz.

SQL> alter database add logfile '/u01/app/oracle/oradata/orcl/group401.log' size 100m;

Database altered.

SQL> alter database add logfile '/u01/app/oracle/oradata/orcl/group501.log' size 100m;

Database altered.
SQL> alter database add logfile '/u01/app/oracle/oradata/orcl/group601.log' size 100m;

Database altered.

Yukarıdaki komutların sonucunda veritabanında toplam 6 tane online log oldu.

SQL> select group#,members,status,bytes/1024/1024 mb from v$log;

 GROUP#    MEMBERS STATUS                   MB
---------- ---------- ---------------- ----------
 1          1 INACTIVE                 50
 2          1 INACTIVE                 50
 3          1 CURRENT                  50
 4          1 UNUSED                  100
 5          1 UNUSED                  100
 6          1 UNUSED                  100

6 rows selected.

Şimdi önceden oluşturulmuş olan 3 tane online log dosyasını sileceğiz. Burada dikkat etmemiz gereken nokta, sileceğimiz online log dosyasının status unun INACTIVE olmasıdır. Yukarıdaki örnekte gördüğümüz üzere şuan group 1 ve group 2 yi silebiliriz.

SQL> alter database drop logfile group 1;

Database altered.
SQL> alter database drop logfile group 2;

Database altered.

Group 3 ü silmeye çalıştığımızda sistem bu dosyanın şuan kullanıldığı için silenemeyeceğini bize söyleyecektir.

SQL>  alter database drop logfile group 3;

 alter database drop logfile group 3

*

ERROR at line 1:

ORA-01623: log 3 is current log for instance orcl (thread 1) - cannot drop

ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo03.log'

Bu durumda bu dosyaların switch olmasını bekleyeceğiz ya da kendimiz switch komutunu çalıştıracağız.

SQL> alter system switch logfile;

System altered.

SQL> select group#,members,status,bytes/1024/1024 as mb from v$log;

 GROUP#    MEMBERS STATUS                   MB
---------- ---------- ---------------- ----------
 3          1 ACTIVE                   50
 4          1 CURRENT                 100
 5          1 UNUSED                  100
 6          1 UNUSED                  100

Yukarıdaki komutla birlikte group 3 teki log dosyasının status u CURRENT den ACTIVE e geçti. Durumu ACTIVE iken de bu dosyayı silemeyiz. Yani veritabanının bu dosya üzerinde check point işlemi tam olarak bitmemiştir. Aşağıdaki komutu çalıştırarak bu dosyayı INACTIVE durumuna getirebiliriz. INACTIVE olduktan sonra da bu dosyayı silebiliriz.

SQL> alter system checkpoint;

System altered.

SQL> select group#,members,status,bytes/1024/1024 as mb from v$log;

 GROUP#    MEMBERS STATUS                   MB
---------- ---------- ---------------- ----------
 3          1 INACTIVE                 50
 4          1 CURRENT                 100
 5          1 UNUSED                  100
 6          1 UNUSED                  100

SQL> alter database drop logfile group 3;

Database altered.

SQL> select group#,members,status,bytes/1024/1024 as mb from v$log;

 GROUP#    MEMBERS STATUS                   MB
---------- ---------- ---------------- ----------
 4          1 CURRENT                 100
 5          1 UNUSED                  100
 6          1 UNUSED                  100

Böylelikle veritabanımızda bulunan online log dosyalarının boyutunu 100M a arttırmış olduk, yani eski 50 MB ları silip yerine 100MB lık yeni online logları koymuş olduk.
Bir sonraki yazımızda görüşmek üzere…