Pages

2 Şubat 2011 Çarşamba

RAC veritabanına yeni bir ASM disk eklerken karşılaşılan sorunlar

Solaris 10 üzerinde çalışan bir RAC veritabanına yeni bir ASM disk eklemeye çalışıldığında aşağıdaki gibi hata mesajları ile karşılaşabilir ve muhtemelen bu yeni ASM diski ekleyemeyiz.

ORA-15075 “disk(s) are not visible cluster-wide”
ORA-15020 “discovered duplicate ASM disk “DISK1″ and
ORA-15054 “disk “ORCL:DISK1″ does not exist in diskgroup “DG1″.

Disk grubunu yeniden dengelemek(rebalance) veya nomount-mount işlemi yapmak veya FORCE takısını kullanarak bu yeni diski ilave etmekte sonuç vermeyebilir. Bu durumu bir senaryoda uygulayarak nasıl çözüme kavuşturacağımıza bir göz atalım.

Öncelikle RAC ortamında çalışan veritabanına yeni bir ASM diskini mevcut bir disk gruba eklemek istiyoruz. İlk aşamada ORACLE_SID yi ASM instance ismine ayarlayıp oturum açıyoruz.

$ export ORACLE_SID=+ASM
$ sqlplus / as sysdba
SQL> ALTER DISKGROUP DATA1 ADD DISK ‘/dev/rdsk/c1t2d7s6’;
ERROR AT LINE 1:

ORA-15032: not all alterations performed
ORA-15075: disk(s) are not visible cluster-wide

Yukardaki hata mesajının alınmasının sebebi, fiziksel disk bölümlerinin(partition) RAC düğümleri tarafından görülememesidir. Bu diskin tüm düğümlerde oracle kullanıcısı ve oinstall grubuna erişim ve sahiplik izinlerinin atanmasından sonra(Solaris 10 platformunda Oracle 10g R2 RAC kurulumu yazıma bakabilirsiniz bu işlem için) bu sefer FORCE takısını ekleyerek aynı komutu çalıştırıyorum.

SQL> ALTER DISKGROUP DATA1 ADD DISK ‘/dev/rdsk/c1t2d7s6’ FORCE;
ORA-15020: discovered duplicate ASM disk ‘/dev/rdsk/c1t2d7s6’

Ancak bu seferde yukardaki hata mesajına gore aynı isimde bir diskin DATA2 diskgrubunda zaten bulunduğu yer alıyor. Bunun üzerine bu mevcut diski düşürmek için aşağıdaki komutu çalıştırıyorum.

SQL> alter diskgroup DATA1 drop disk '/dev/rdsk/c1t2d7s6’;
alter diskgroup DATA1 drop disk '/dev/rdsk/c1t2d7s6’
*
ERROR at line 1:
ORA-15032 : not all alterations performed

Tüm düğümlerde V$ASM_DISK görünümüne sorgu çekerek bu diskin statusunu öğreniyorum.

SQL> SELECT * FROM V$ASM_DISK;

G# D# HEADER_STATUS MOUNT_STATUS STATE NAME PATH
—- —- ———— ——- ——– ———— ————————-
0 0 MEMBER IGNORED NORMAL /dev/rdsk/c1t2d7s6

HEADER=MEMBER olması bu diskin tüm RAC düğümlerinde geçerli bir ASM diski olduğunu belirtmekte, MOUNT_STATUS=IGNORED olması ise diskin sistemde geçerli olduğu  ancak ASM tarafından reddedildiğini belirtmektedir. GROUP_NUMBER kolonunun 0 olması ise diskin diskgrup tarafından MOUNT yapılamadığını belirtir.

Bunun üzerine bu diskin dd çıktısına bakıyorum.

$dd if=/dev/rdsk/c1t2d7s6 of=/tmp/disk.out bs=4096 count=1096

Sonuçta bu diske diskgrup ismi ve disk numarası atanmış. Bu bilgileri kalıcı olarak diskin başlığından(header) silmek için root hesabından oturum açıp aşağıdaki komutu çalıştırıyorum. dd komutunu çalıştırırken mutlaka sorunlu diskin belirtildiğinden emin olun, yanlışlıkla düzgün çalışan bir disk veya bölüm seçilirse, o disk veya bölüm üzerindeki tüm verileri kaybedersiniz.

# dd if=/dev/null of=/dev/rdsk/c1t2d7s6 bs=4096 count=5000

Eğer Linux işletim sistemi kullanılıyorsa bu diskin ASMLibrary ortamındanda aşağıdaki gibi kaldırılması tavsiye edilir..

# /etc/init.d/oracleasm deletedisk /dev/rdsk/c1t2d7s6

Ardından diski yeniden ekliyorum ve işlem başarılı şekilde hatasız olarak sonuçlanıyor.

SQL> ALTER DISKGROUP DATA2 ADD DISK ‘/dev/rdsk/c1t2d7s6’;

0 yorum:

Yorum Gönder