23 Aralık 2011 Cuma

SWITCH DATAFILE ALL ve ORA-01157

Merhaba,

ORA-01157 hatasıyla ilgili tecrübelerimi aktarmak istiyorum. Hatanın tam açılımı aşağıdaki gibidir;

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
Bu hatanın Türkçe karşılığı şu, kontrol dosyası data file 1'i bulamıyor ve DBWR trace dosyasına konuyla ilgili bir bilgi basılıyor. Kontrol dosyasının içinde bütün data file'ların SCN'leri ile birlikte bilgileri tutulmaktadır. SCN'si geride olan bir data file olduğu durumda ya da ilgili data file fiziksel olarak yerinde olmadığında veya fiziksel olarak yerinde olsa bile kontrol dosyasında adı başka türlü gözüküyorsa veritabanını open moduna getiremezsiniz. Buradaki hatanın oluşma nedenlerinden birisini göstereceğim.

Öncelikle veritabanımızın bir yedeğini alıyoruz;

RMAN> backup database;
Sonra başka bir ortamda restore işlemi yapıyoruz;

run {
restore spfile from autobackup;
restore controlfile from autobackup;
restore database;
recover database;
}

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '+DATA/orcl/datafile/system.256.659541263'

SQL>
Bu hatayı almış olmanızın muhtemel nedeni her iki tarafında ASM olması ve db_file_name_convert parametrenizin ayarlanmamış veya SET NEWNAME FOR DATAFILE komutu ile datafile'ların yeni yerlerini kontrol dosyasına nasıl restore etmesi gerektiğini göstermemiş olmanızdır. Yalnız, ASM'de şöyle de bir durum var ki ASM instance'ı her restore'dan sonra datafile'ların isim uzantılarına değiştiriyor EĞER ilgili datafile başka bir ASM disk grubundan restore edilmişse. Bu durumda gönderdiğiniz SET NEWNAME FOR DATAFILE komutuna ya da ayarladığınız DB_FILE_NAME_CONVERT parametresine ek olarak --> SWITCH DATAFILE ALL; komutunu da run bloğunda vermeniz gerekiyor. Bu komutla data file'ın ASM bilgileri, kontrol dosyasında restore edildiği gibi değiştiriliyor ve veritabanını open resetlogs açabiliyorsunuz.


run{
SWITCH DATAFILE ALL;
}

datafile 1 switched to datafile copy
input datafile copy recid=1 stamp=677435474 filename=+DATA/orcl/datafile/system.291.677435389
datafile 2 switched to datafile copy
input datafile copy recid=2 stamp=677435474 filename=+DATA/orcl/datafile/undotbs1.304.677435423
datafile 3 switched to datafile copy
input datafile copy recid=3 stamp=677435474 filename=+DATA/orcl/datafile/sysaux.284.677435369
datafile 4 switched to datafile copy
input datafile copy recid=4 stamp=677435474 filename=+DATA/orcl/datafile/users.307.677435423
datafile 5 switched to datafile copy
input datafile copy recid=5 stamp=677435474 filename=+DATA/orcl/datafile/undotbs2.303.677435421
datafile 6 switched to datafile copy
input datafile copy recid=6 stamp=677435474 filename=+DATA/orcl/datafile/undotbs3.299.677435417

switch komutunu teker teker de verebilirsiniz;

RMAN> switch datafile 1 to copy;

datafile 1 switched to datafile copy
input datafile copy recid=1 stamp=677435474 filename=+DATA/orcl/datafile/system.291.677435389

Bir ASM instance'ından diğer bir ASM instance'ına geçiş yaparken her zaman switch datafile all; komutunu vermeniz gerekmiyor aslında. Örneğin bir Exadata makinesinde varsayılan olarak 3 tane ASM instance'ı vardır. Bunlardan birincisi DATA diğeri SYSTEM ve diğeri de RECO. Backup'ını aldığınız veritabanındaki bütün datafile'lar DATA'da ise restore ederken switch datafile all; komutunu vermeniz gerekmiyor. Ancak, diyelim backup'ını aldığınız veritabanındaki datafile'ların yanlışlıkla RECO'da yaratılmış. Bir kısmının bu şekilde olduğunu düşünün. Bu durumda o datafile'lar için switch datafile all; komutunu vermeniz gerekiyor çünkü SET NEWNAME FOR DATAFILE komutu ile isim ayarlamak isteseniz bile ASM disk grubu değişince datafile'ın sonundaki uzantı da değişiyor. Bu değişikliği switch komutu ile de kontrol dosyasına göstermek gerekiyor.

Bu makaledeki önemli nokta ve vermek istediğim mesaj, yukarıdaki yoldan geçtiyseniz veritabanının tamamını yeniden restore etmeye çalışmayın ve vakit kaybetmeyin. Belirttiğim komutla işleri yoluna koyabilirsiniz.

İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan