13 Kasım 2012 Salı

                               Oracle Flashback

Flashback özelliğinin en  önemli avantajı recovery işleminin normal recovery metotlarına göre çok kısa sürmesidir.Veritabanını flashback parametreleri ile belirtilen zaman aralığında istenilen herhangi bir yere kolayca getirebiliriz.

SQL>select flashback_on from v$database ; -->database flashback özelliğinin açık olup olmadığını kontrol edebiliriz.
SQL>select log_mode from v$database; -->database log_mode kontrol ederiz.flashback kullanabilmek için database archivelog modda olmalıdır.
Database archivelog moda aldıktan sonara flashback için gerekli konfigurasyonu yapıyoruz.Bu özellik için 3 temel parametre kullanırız.
DB_FLASHBACK_RETENTİON_TARGET:Veritabanın geriye alınabileceği zaman periyodunu belirtir.Örneğin 600 dakika olarak set edersek. Database 10 saat içerisinde herhangi bir zamana recovery edilebilirnir.
SQL>alter system set db_flashback_retention_target=600;

DB_RECOVERY_FILE_DEST_SIZE:Yedek işlemi için ayrılan alanın büyüklüğüni belirtir.Bu alan retention target parametresiyle doğrudan ilişkilidir.Örneğin retention target 5 günlük ayarlandıysa ve günlük flashback verisi dest_size kadarsa target parametresi istenilen şekilde kullanılamayacaktır.
SQL>alter system set db_recovery_file_dest_size=5G;

DB_RECOVERY_FILE_DEST:Flashback loglarının  nerede tutulacağını belirtir.
SQL>alter system set db_recovery_file_dest='/backup/COMPANY/flashback_area/';

Bazı durumlarda burada şu hataları alabiliriz.
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST

Archivelog destination ile flashback için  kullanılan destination ayrı parametrelerde belirtmeliyiz.Bunun için ilk önce;
SQL>alter system set log_archive_dest=' ' scope=spfile;-->archivelog lokasyonu sıfırlanır
SQL>alter system set db_recovery_file_dest='/backup/COMPANY/flashback_area/' scope=spfile; flashback için kullanılan alan set edilir.
SQL>alter system set log_archive_dest_1='/LOCATION=/backup/COMPANY/archivelog/' scope=spfile; arşiv logları için alan set edilir.Yapılan değişikliklerin uygulanması için database restart yapılır.

Database mount modda açılır.
SQL>alter database flashback on;
SQL>alter database open;

Flashback ile Recover:Flashback ile recover işlemi iki şekilde yapılabilir.Bir istenilen SCN numarasına ikincisi istenilen zamana recover işlemi yapılabilinir.

SQL>select current_scn from v$database;-->database istenilen zamandaki SCN öğrenilebilinir.Elimizde bulunan scn hangi zamana veya istenilen zamanın scn numarasını öğrenmek için fonksiyon kullanabiliriz.

Eğer elimizde scn numarası varsa ve zamanı öğrenmek istiyorsak.
SQL> SELECT SCN_TO_TIMESTAMP( 34530329701 ) FROM DUAL;
İstenilen zamanın scn numarası öğrenilmek istenirse

SQL> SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP('2008-10-24 16:46:00', 'YYYY-MM-DD HH24:MI:SS') )FROM DUAL;
2604650

1)Flashback Recovery with SCN:
SQL>shutdown immediate
SQL>startup mount
SQL>flashback database to scn 2539847

SQL>alter database open resetlogs;--> bu komut ile database incarnation numarası resetlenecektir.

2)Flashback Recovery with Time:
SQL>shutdown immediate
SQL>startup mount
SQL>flashback database to timestamp to_timestamp('2012-10-08 17:15:24', 'YYYY-MM-DD HH24:MI:SS');

SQL>alter database open resetlogs;--> bu komut ile database incarnation numarası resetlenecektir.

Flashback Recovery Area:Flashback recovery area nın dolması durumunda oracle bu alanın boyutunu değiştirmeyecektir.Yeni oluşan  flashback logları ise eski flashback loglarının üzerinde yazılır.Ama bu durum bazı dezavantajları getirir. Log yazma işlemi daha yavaş gerçekleştirilir ve geriye dönülebilecek zaman daralır.Varolan flashback loglarını manually olarakta silebiliriz..Bunu şu şekilde yapabiliriz.Flashback özelliğini kapattığımızda RVWR(recovery writer process) flashback loglarını yazma işlemini gerçekleştiren process duracaktırve  flashback logları otomatik olarak silinecektir..

SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database flashback off;
bu komut ile alert.log dosyasına aşağıdaki loglar yazılır.flashback logların silindiğini görebiliriz.
SQL>alter database open;
/*
####### BU ESNADA ALERT LOG DOSYASI #######
...
ALTER DATABASE FLASHBACK OFF
Fri Oct 24 12:15:50 2008
Stopping background process RVWR
Deleted Oracle managed file
/data2/TESTDB/flashback_area/o1_mf_4j2zm7z5_.flb
Deleted Oracle managed file
/data2/TESTDB/flashback_area/o1_mf_4j316ybk_.flb
...
Flashback Database Disabled
Completed: ALTER DATABASE FLASHBACK OFF
SQL>alter database flashback on;
SQL>alter database open;

*/

Hiç yorum yok: