--Şu anda elimde mevcud olan REDO LOG yapim.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 15 52428800 1 YES INACTIVE 1070389 8/17/2009 4:28:50 PM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 NO CURRENT 1098886 8/18/2009 12:00:50 AM
select GROUP#, ARCHIVED, STATUS from v$log;
--bu sorgu ile daha anlamli birseyler çikarabiliriz.
--Şimdi curent durumdaki redo log grubumuzu diske aktaralim.
ALTER SYSTEM SWITCH LOGFILE
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 NO CURRENT 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 16 51200000 1 YES INACTIVE 1070910 8/17/2009 4:39:05 PM
4 4 1 18 51200000 2 YES ACTIVE 1098886 8/18/2009 12:00:50 AM
--Görüldüğü gibi burada bir sirkülasyon içerisinde redo log üzerinde akis sağlaniyor.
--4 nolu redo log grubu current durumundan active durumuna geçti. inactive durumdaki 1 nolu grupta current durumuna geçti.
--firt_time sütününda ise en son ne zaman islem gördüğünü görüyoruz.
--Yeni bir REDO LOG File eklemek için
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG') SIZE 50000K;
--ORA-00301: 'C:\oracle\product\10.2.0\oradata\ORCL\REDO06.LOG' günlük dosyasini eklemede hata - dosya yaratilamaz
--ORA-27038: yaratilan dosya zaten var
--OSD-04010:
--hatasini aldik bundan kurtulmak için dosya isimelrini değistiriyoruz.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO07.LOG','C:\oracle\product\10.2.0\oradata\ORCL\REDO08.LOG') SIZE 50000K;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
--eklemis olduklarimizi yeni bir group(5 nolu) içerisine koydu.
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO09.LOG') SIZE 10000K;
SELECT * FROM V$LOGFILE;
--yeni eklediğimizi 6 nolu gruba dahil etti.
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
--GRUOP BELİRTEREK REDO LOG FILE EKLEME
--10 Nolu bir REDO LOGF group yaratiyoruz ve bu gruba her biri 5MB olan 4 tanae file ekliyoruz.
ALTER DATABASE
ADD LOGFILE GROUP 10 ('C:\oracle\product\10.2.0\oradata\ORCL\REDO10.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO11.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO12.LOG',
'C:\oracle\product\10.2.0\oradata\ORCL\REDO13.LOG')
SIZE 5000 k;
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
8 6 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO09.LOG NO
9 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO10.LOG NO
10 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO11.LOG NO
11 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO12.LOG NO
12 10 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG NO
select * from v$log;
--Bu sorguda redo log gruplarini görüyoruz farkederseniz sonradan olusturduğumuz grouplar hiç kullanilmadiği için UNUSED durumundalar.
Row# GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 1 19 52428800 1 YES INACTIVE 1124103 8/18/2009 8:47:21 AM
2 2 1 17 52428800 1 YES INACTIVE 1071255 8/17/2009 4:46:49 PM
3 3 1 20 51200000 1 NO CURRENT 1132995 8/18/2009 11:47:44 AM
4 4 1 18 51200000 2 YES INACTIVE 1098886 8/18/2009 12:00:50 AM
5 5 1 0 51200000 2 YES UNUSED 0
6 6 1 0 10240000 1 YES UNUSED 0
7 10 1 0 5120000 4 YES UNUSED 0
--Yeni bir REDO LOG member (redo log file) eklemek için asağidaki yapiyi kullanabiliriz.
--burada 6 nolu gruba "C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG" dosyayi ekleyelim.
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' TO GROUP 6;
--ORA-01577: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO13.LOG' günlük dosyasi eklenemez - dosya zaten veritabaninin parçasi
--Ayni isimde baska bir tane olduğu için bu hatayi aldik
ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO14.LOG' TO GROUP 6;
--ORA-00359: logfile group 6 does not exist bu hatayi alirsaniz bu demktirki 6 nolu group mevcud degil. Group olusturduktan sonra redo log file eklemeyi deneyin.
ALTER SYSTEM CHECKPOINT;
--bu komut ile active durumda olan redo log grouplarinin inactive olmaya zorlariz.
ALTER SYSTEM SET log_checkpoint_timeout = 1500 SCOPE=MEMORY
--ile bu parametreyi degistirebiliriz.
--bozulmus olan bir redolog file'i database'i kapatmadan resetlemek
için asağidaki komutu kullanabilirsiniz.
ALTER DATABASE CLEAR LOGFILE GROUP 2;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
Bu script üstesinden asagidaki iki üstesinden gelinemeyen redologlarin silenememesi durumunda bize yardimci olacaktir.
1- Eğer sadece 2 tane REDOLOG grubunuz var ise
2- current redolog grubunuz bozulduysa.
-- REDOLOG Filelerin oldugu yerleri ve gruplarini görmek için
SELECT * FROM V$LOGFILE;
Row# GROUP# TYPE MEMBER IS_RECOVERY_DEST_FILE
1 3 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 2 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
3 1 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
5 4 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
6 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO07.LOG NO
7 5 ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO08.LOG NO
ALTER SYSTEM SWITCH LOGFILE;
select * from v$log
create table deneme1 as select * from user_objects
ALTER SYSTEM CHECKPOINT;
select * from v$logfile;
STALE durumunda olan redo log gruubundaki redologfileleri görebilmek için aşağıdaki sorguyu kullanabiliriz.
SELECT v2.group#, MEMBER, v2.status member_status, v1.status group_status
FROM v$log v1, v$logfile v2
WHERE v1.group# = v2.group# AND v2.status = 'STALE';
STALE (bayat, bayatlamış) durumunun manası sistemin shutdown abort ile kapatılması yada sistemin bir şekilde düşmesi (crash ) denemebilir. Bunun sebebi o redo loggrubunun bozuk olan yada erişilemeyen bir diskte olmasından olabilir (emin değilim tahmin yürüttüm.) Benim TEST amaçlı kullandığım DB de deneme amacı ile makinaya reset attiğimda yada shutdown abort dediğimde bu durum ile karşılaşıyorum. Kapatmadan hemen önce current durumunda olanların STALE durumuna geldiğini gördüm. Ama
No comments:
Post a Comment