2012/12/30

Oracle Flashback Teknolojisi

Oracle Flashback teknolojisi 10g ile birlikte geldi.Flashback geniş bir konu drop edilen tabloların geri getirilmesinden,RMAN içinde kullanımına kadar bir çok başlık bulunmaktadır.Veri kayıplarını önlemek için kullanılır. Flashback diğer recovery işlemlerinden ayıran en büyük özellik daha hızlı olmasıdır.
Oracle flashback da olan teknolojiler şunlardır.

  • Flashback Database
  • Flashback Table
  • Flashback Query
  • Flashback version Query
  • Flashback Transcation Query

Veritabanını Hazırlamak;
Flashback özelliğini kullanmak için üzerinden geçmemiz gereken belli başlı adımlar bulunuyor.Önce veritabanı  archivelog modda olmalıdır.Bunu kontrol etmek için şu sorguyu yazalım;
    *SQL> select log_mode from v$database;
Eğer veritabanı NOARCHİVELOG modda olduğunu söylüyorsa burda yapılması gereken veritabanımızı archivelog moda almak, bunun içinde şunları yapalım;
    *SQL> shutdown immediate;
    *SQL> startup mount;
    *SQL> alter database archivelog;
    *SQL> alter database open;
Veritabanımızı archivelog  moduna aldıkdan sonra flashback'i çalışıyor duruma getirmeliyiz.Bunun için yapılması gereken;
   *SQL> select flashback_on from v$database;
   *SQL> alter database flashback ON;
Artık veritabanımız hazır. Flashback kullanmaya geçmeden önce birkaç parametreleri kontrol edelim.
   *DB_FLASHBACK_RETENTİON_TARGET= veritabanımızın kaç gün önceye gideceğini ğösterir.
   *DB_RECOVERY_FILE_DEST= flashback loglarımızın nerede saklanacağını gösterir.
   *DB_RECOVERY_FILE_DEST_SIZE= flashback için ayıracağımız yerin miktarını belirleriz.
Bu parametreleri ihtiyaca göre değiştirmek için kullanılan komutlar;
    *SQL> alter system set DB_FLASHBACK_RETENTION_TARGET=600;
    *SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=20 G;
    *SQL> alter system set DB_RECOVERY_FILE_DEST='/data2/test_db/flashbackarea';

  • Flashback Database 

İki şekilde kurtarma işlemi gerçekleştirmemiz mümkündür.Bunlardan birisi SCN(system cache number) üzerinden giderek yapılır.SCN veritabanında yapılan her işlem için sürekli olaral artan numerik bir değerdir.Mevcut SCN değeri ağagıdaki sorguyla öğrenebiliriz.
    *SQL> select current_scn from v$database;
SCN değerini saate çevirmek için;
    *SQL> select scn_to_timestamp(123456) from dual;
Düşünelim ki ilk aldığımız scn değeri 123456 olsun ve ben bu aşamdan sonra veritabanımdan bir tablo sildim.Daha sonra tekrar bir scn degeri aldım bu değer de 123459 olsun.Ve bu tabloya tekrar ihtiyaç duyduğumu farz edelim.Yapmamız gereken işlem ilk aldığımız scn değerine dönmektir.

  • Flashback Table

Bunuda kısa bir örnek üzerinde anlatalım.Yalnız burada tablonun geçmiş bir durumuna dönecegimiz  ve tabloda rowid ler değişecegi için row movement özelliğini  ayarlamamız gerekir.Şimdi örnek üzerinde anlatalım;
    *SQL> create table ensar(id number);
    *SQL> alter table ensar enable row movement;
    *SQL> insert into ensar(10);
    *SQL> insert into ensar(15);
    *SQL> commit;
    *SQL> select * from ensar;
    *SQL> select current_scn from v$database;    954696
    *SQL> delete from ensar;
    *SQL> commit;
    *SQL> select * from ensar;
    *SQL> flashback table ensar to scn 954696;
Şimdi burada ne yaptığımızı anlatalım.Öncelikli olarak bir tablo oluşturduk ve onun içine kayıt ekledik.Commit ederek verilerimizi yazılmasını sağladık.Daha sonra kontrol amaçlı ensar tablosunun içine bakarak verilerimizin yazıldığından emin olduk.Veritabanımızın o andaki scn değerini ögrendik sonra ensar tablosun daki verileri sildik ve gecerli olması için commit çalıştırdık.Test amaçlı tekrar ensar tablomuza baktığımızda boş olduğunu anladık.Son olarak yukarıda aldığımız scn değerine geri dönerek flashback table uyğulamış olduk.

  • Flashback Query

Verilerimizi sanki o zamandaymış gibi getirmeyi sağlar. Örnek üzerinde anlatalım;
   *SQL> create table erdogan(id number);
   *SQL> insert into erdogan(id) values(5);
   *SQL> commit;
   *SQL > select current_scn from v$database;  955313
   *SQL> insert into erdogan(id) values(7);
   *SQL> commit;
   *SQL> select current_scn from v$database; 955345
   *SQL> select * from erdogan as of scn 955313;
Ne yaptığımızı anlatmaya çalısalım.Bir table oluşturduk ve içine veri ekledik geçerliliği için commit ettik.Veritabanımızn scn değerini aldık ve bir kez daha veri ekledik.Tekrar commit ettikden sonra scn değerimizi aldık ve ilk eklediğimiz query değerini geri döndük.

  • Flashback version query

 Bu teknoloji ile de tablonun satırlarında değişikliği görebiliriz.Örnek üzerinde anlatalım;
    *SQL> create table ensar(id number,desc varchar2(30));
    *SQL> insert into ensar (1,'birinci');
    *SQL> commit;
    *SQL> select current_scn from v$database;
    *SQL> update ensar set desc='ikinci' where id=1;   15246
    *SQL> commit;
    *SQL> select current_scn from v$database;
    *SQL> update ensar set des='ucuncu' where id=1;  16250
Bu örnekde update kullanarak veri üzerinde değişiklik yaparak scn degerleri aldık ve son olarak istedigimiz current değerine dönebiliriz.

  • Flashback transcation query

İşlem seviyesinde yapılan değişikliklerdir.Örnek üzerinde anlatalım;
    *SQL> select start_scn,start_timestamp
                          logon_user,operation
                          table_name,undo_sql
                 flashback tracnscation_query where
                 table_name='ensar'  order by 1;

İyi okurlar.

 

Hiç yorum yok:

Yorum Gönder