Database Incarnation

Veritabanını son commit edilen transaction’a kadar kurtaramadığımız senaryolarda veya controlfile backupını kullanarak recover ettiğimiz de, veritabanını”ALTER DATABASE OPEN RESETLOGS” komutunu kullanarak open hale getirmek zorundayız.
Resetlogs ifadesiyle Oracle, redo log dosyaları bulunmuyor ise defualt 3 redo log dosyası yaratır eğer bulunuyor ise redo loglarda bulunan bütün kayıtları sıfırlar. Çünkü eğer veritabanında Incomplete recovery işlemi gerçekleşmiş ise redo loglardaki SCN bilgisi hala hiçbir zaman kurtarılamayacak transaction bilgisini barındırıyor demektir. Bu yüzden Oracle bu kayıtları sıfırlar ve eski archivelogların ve backupın yeniden kullanılması ihtimaline karşı da veritabanını yeni bir incarnation moduna getirir. Incarnation ne demek olduğunu açıklayacak olursak aşağıdaki resme bakabiliriz.

1.jpg
En son SCN numarasın bilgisinin 2000 olduğunu varsayalım. Sistemimizde gerçekleşen bir problem dolayısıyla veritabanını recover işlemine tabi tuttuğumuzu düşünelim ancak redo loglar zarar görmüş ve sistemi ancak SCN 1000 ‘e kadar recover edebiliyoruz. Bu tarz bir incpmplete recovery durumunda sistemi “RESETLOGS” komutu ile açtığımızda veritabanını yeni bir zaman çizelgesine sokmuş oluruz. Ve artık bu nokta veritabanını restore edebileceğimiz en son nokta oluyor. Bu noktanın öncesinde bütün backuplar geçersiz sayılır. Ancak Oracle bize eski backupları kullanabilmemiz için veritabanının incarnation modunu değiştirebilme imkanı sunar. Şimdi bunu bir örnekle açıklayalım.
İlk olarak veritabanının backupını alalım ve sonra da örnek bir tablo yaratalım.
2.png
3.png
Ardından tablomuzdaki bütün verileri silip commit edelim.
4.png
Son olarak da tablomuzu drop edip logfile switch işlemi gerçekleştiriyoruz.
5.png
Veritabanının incarnation bilgisini görmek istersek aşağıdaki sorguyu çalıştırabiliriz.
6.png
Görüldüğü üzere veritabanı şu anki incarnation# değer 3 olan zaman çizgisinde. Status değeri Parent olan ise Current Incarnation’ın doğduğu noktayı ifade etmekte.
Şimdi incomplete recovery işlemini simule etmek için tablomuzu drop etmeden önceki SCN numarasına dönelim ve veritabanımızı “resetlogs” komutu ile açalım.

7.png
8.png
Veritabanını resetlog opsiyonu ile open hale getirdiğimizde görüyoruzki yeni bir incarnation yaratıldı. Örnek tablomuzu sorguladığımızda tablomuzun başarılı bir şekilde recover edildiğini görebiliriz.
Şimdi ise tablomuzdan kayıtların silindiği SCN numarasının öncesine 7676120 değerine dönmeye çalışalım.

9.png
Veritabanımızı yeni incarnation’ın başladığı SCN değerinden daha önceki bir zamana dönmeyye çalıştığımızdan hata alıyoruz. Yazımın başında da belirttiğim gibi yeni bir incarnation başlattığımızda artık restore edebileceğimiz nokta incarnation resetlog_change değeridir. O yüzden daha önceki bir incarnation da bulunan SCN değerine restore ve recover işlemlerini gerçekleştirmek istiyorsak aşağıdaki komutları kullanabiliriz.
10.png
11.png
Tablomuz recover edildi ve eski incarnation status bilgisi artık current moddan orphan moda dönüştü.

Yorum bırakın