Oracle 11g Active Data Guard özelliğinde gerçek zamanlı sorgu yeteneğinin yanında, Otomatik Blok Medya Düzeltme(Automatic Block Media Repair) özelliği ile daha yüksek erişilebilirlik yeteneği olduğu gözükmektedir. Primary veritabanındaki veri blok bozulmalarını standby siteden bu bozulan blokları elde etmek suretiyle ABMR arkaplan prosesi tarafından tamir edilebilmektedir.
Aynı fonksiyon, aktif standby sitedeki blok bozulmalarını primary siteden aynı şekilde bozulmamış blokların elde edilmesiyle tamir edilmesi yoluylada kullanılabilmektedir. Aşağıdaki senaryoda bu durumu test edeceğiz.
Bu test senaryosunda kullanılmak üzere bir tablo oluşturup USERS tablespace içine atayacağız.
SQL> create table testtbl
tablespace users
as select * from hr.emp;
tablespace users
as select * from hr.emp;
Table created.
DBMS_ROWID fonksiyonunu kullanarak bu tablonun kullandığı blokları belirliyoruz.
SQL> select * from
(select distinct dbms_rowid.rowid_block_number(rowid)
from testtbl)
where rownum < 6;
(select distinct dbms_rowid.rowid_block_number(rowid)
from testtbl)
where rownum < 6;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
12
13
14
15
16
------------------------------------
12
13
14
15
16
Ardından bu bloklardan herhangi birisini bozuyoruz (senaryomda 13 numaralı bloğu bozuyorum, bu testi kesinlikle gerçek üretim veritabanınızda yapmayın!)
dd of=/u01/app/oracle/oradata/orcl/users01.dbf bs=8192 seek=13 conv=notrunc count=1 if=/dev/zero
Ardından primary veritabanında tampon önbelleği boşaltarak yeni blok okumasını zorunlu kılıp bir sorgu çalıştırıyoruz ve bir veri bloğunu bozmamıza rağmen ORA-01578 blok bozulma hatası almadan sorgu tamamlanıyor.
Ancak, veritabanı alert log dosyasına bakınca blok bozulmasının tespit edilmiş olduğu gözükecek ve bu alert log dosyasında ABMR arkaplan prosesinin bozuk blokları tamir etmek üzere çalıştığı raporlanmış olacaktır.
ALTER SYSTEM: Flushing buffer cache
Thu Jun 22 10:50:15 2011
Corrupt block relative dba: 0x0100008b (file 4, block 13)
Completely zero block found during multiblock buffer read
Reading datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’ for corruption at rdba: 0x0100008b (file 4, block 13)
Reread (file 4, block 13) found same corrupt data
Starting background process ABMR
Thu Jun 22 10:50:15 2011
ABMR started with pid=40, OS id=6369
Auto BMR service is active.
Requesting Auto BMR for (file# 4, block# 13)
Waiting Auto BMR response for (file# 4, block# 13)
Auto BMR successful
Thu Jun 22 10:50:15 2011
Corrupt block relative dba: 0x0100008b (file 4, block 13)
Completely zero block found during multiblock buffer read
Reading datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf’ for corruption at rdba: 0x0100008b (file 4, block 13)
Reread (file 4, block 13) found same corrupt data
Starting background process ABMR
Thu Jun 22 10:50:15 2011
ABMR started with pid=40, OS id=6369
Auto BMR service is active.
Requesting Auto BMR for (file# 4, block# 13)
Waiting Auto BMR response for (file# 4, block# 13)
Auto BMR successful
Şimdi aynı senaryonun aktif standby sitede nasıl sonuç verdiğine bakalım. ‘dd’ komutuyla aynı blok bozma işlemini standby sunucu üzerinde de gerçekleştiriyoruz ve sorguyu ilk sefer çalıştırdığımızda aşağıdaki gibi hata mesajı alıyoruz.
SQL> alter system flush buffer_cache;
System altered.
SQL> select count(*) from testtbl;
select count(*) from testtbl
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 13)
ORA-01110: data file 4: ‘/u01/app/oracle/oradata/orcl/users01.dbf’
select count(*) from testtbl
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 13)
ORA-01110: data file 4: ‘/u01/app/oracle/oradata/orcl/users01.dbf’
Ancak aynı sorguyu bir kez daha çalıştırdığımızda, bu bozuk blokların primary veritabanınından otomatik olarak ABMR arkaplan prosesince tamir edilmesinden dolayı herhangi bir hata mesajı almıyoruz.
SQL> select count(*) from testtbl;
COUNT(*)
--------
254
--------
254
0 yorum:
Yorum Gönder