Database’ in olmazsa olmaz koşullarından biri en 2 gruplu bir redolog
grubunuzun olmasıdır. Redolog’ lar sistemin son ana döndürülmesinde kritik bir
önem taşıdığından dolayı groupların memberlanması son derece önemlidir.
Redologların nasıl memberlanacağı ile ilgili http://kamilturkyilmaz.blogspot.com/2010/11/redolog-group-tanmlama-degisiklik-yapma.html
gerekli bilgiyi daha önceki yazımda detaylı olarak
anlatmıştım. Redologlarınız member’ lı değilse ve herhangi birini
kaybetdiyseniz veritabanını kurtarmak için aşağıdaki işlemleri yapmamız
gerekir. Ancak burada unutumaması gereken nokta; commit edilmemiş tüm transactionların geri getirilemeyeceği yani veri kaybı
yaşanacağıdır.
Benzer bir case’ i oluşturabilmek için database’ imizi shutdown immediate
ile kapatıyoruz.
SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL>
Redologlardan birini, yer aldığı dizinden siliyorum; Şimdi bu haliyle
database’ i açmayı deniyorum (hatayı görebilmek için) ;
SQL> startup
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed
Size
1250428 bytes
Variable
Size
222301060 bytes
Database Buffers
381681664 bytes
Redo
Buffers
7135232 bytes
Veritabanı kullanıma açıldı.
ORA-00313: 1 günlük grubunun (thread 1) üyeleri açılamadı
ORA-00312: çevrimiçi günlük 1, thread 1:
'C:\ORACLE\10GR2\ORADATA\TEST\REDO01.LOG'
Database redologlardan redo01.log dosyasını bulamadığı için açamadı. Ve
mount modda kaldı. (hatırlayınız; database’ e startup komutu verildiğinde son
aşaması datafile’ leri ve redologları açtığı nokta idi, bu aşamayı
geçemediğinden dolayı mount modda kalıyor.) Kontrol etmek için ;
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
Bu durumdan kurtulmak için şimdi komut satırından database’ i recover
ediyoruz. Bu işlem ile kayıp olan redolog dosyası otomatikl olarak daha önce
olduğu lokasyona aynı isimle system tarafından otomatik olarak create ediliyor.
Bu işlemi “recover database until cancel” komutu ile yapmamızın nedeni
gelebildiğimiz kadar son noktaya gelmeye çalıştığımızdan dolayıdır.
SQL> recover database until cancel;
Ortam kurtama tamamlandı.
Bu işlemi başarıyla gerçekleştirdikden sonra yine unutulmaması gereken bir
nokta incomplete recovery işlemlerinden sonra mutlaka database’ i open
resetlogs komutu ile açabilmemizdir. Zaten open ile açmayı denediğinizde
aşağıdaki hatayı alırsınız.
SQL> alter database open ;
alter database open
*
1 satırında HATA:
ORA-01589: veritabanı açma için RESETLOGS veya NORESETLOGS seçeneği
kullanılmalı
Rsetlogs ile açıyoruz.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.
Bu şekilde database’ imizi kurtarmış olduk. Bu işlemi yapabilmek için
database’ in archive modda olmasına gerek yoktur. Çünkü bu problemi
düzeltmek için archive loglara ihtiyaç bulunmamaktadır.
Bu tarz disaster durumlarında veri kaybı
çoğu zaman kabul edilebilir bir nokta olmakdan çıkıyor, dolayısıyla yazımın
başında belirtmiş olduğum gibi önlemlerimizi zamanında ve doğru bir şekilde
alıyor olmamız gerekiyor.
Hiç yorum yok:
Yorum Gönder