Etiket arşivi: flashback table recover

Flashback Query

Flashback Query nedir, ne zaman kullanılır?

 

Flashback makale serisine flashback query ile devam ediyoruz.Flashback query ile tabloyu geçmiş bir andaymışız gibi sorgulayabiliriz.Undo retentiton parametresi kadar geriye dönük sorgulama yapmak mümkün.Kullanıcı hatalarından kaynaklanan yanlış silme, güncelleme vb dml işlemlerini yakalamak için kullanabiliriz..

Örneğin bir tabloyu yanlış güncellemiş olalım, ve commit ettiğimizi varsayalım.
güncellemenin yanlış olduğunu farkettik ve eyvah 🙂
Bu durumda panik yapmadan flashback query ile tablonun güncelleme öncesi durumunu
görebiliriz.

Zamana göre flashback;

SQL> SELECT * FROM flashback_table_test  AS OF TIMESTAMP TO_TIMESTAMP('02-05-2014 11:59:30','DD-MM-YYYY HH24:MI:SS');

Tablonun bir saat önceki hali;

SQL> SELECT * FROM flashback_table_test  AS OF TIMESTAMP SYSDATE-(1/24);

İstersek where şartı ile istediğimiz satır(ları) da sorgulayabiliriz.

SQL> SELECT * FROM flashback_table_test  AS OF TIMESTAMP TO_TIMESTAMP('02-05-2014 11:59:30','DD-MM-YYYY HH24:MI:SS') WHERE ID=3;

SCN’e göre flashback:

SQL> SELECT current_scn FROM v$database; --şu andaki scn numarası 4070211849

SQL> SELECT * FROM flashback_table_test  AS OF SCN 4070211799; 

SQL> SELECT * FROM flashback_table_test  AS OF SCN 4070211799  WHERE ID=2;

Önceki durumunu incelemek için Create Table As Of diyerek yeni bir tablo oluşturabiliriz..

SQL> CREATE TABLE flashback_table_SCN_4070211799 as (SELECT * FROM flashback_table_test  AS OF SCN 4070211799);

Umarım faydalı olur..

Flashback Drop

FLASHBACK DROP

Drop Edilen Tabloyu Flashback’le Kurtarmak:

Bu Flashback özelliğiyle yanlışlıkla drop edilmiş tabloyu geri getirebiliriz, kullanım amacı budur.
Flashback operasyonlarından flashback  table before drop kullanabilmemiz için “recyclebin on” olmalıdır. Flashback ayarları için aşağıdaki makaleye bakabilirsiniz.
http://omeracar.com.tr/flashback-nedir-nasil-aktif-edilir

Örnek için bir tablo yaratıp onun üzerinde çalışalım.

SQL> CREATE TABLE OMER_TEST_TAB AS (SELECT * FROM USER_TABLES);

SQL> SELECT COUNT(*) FROM OMER_TEST_TAB;
6012

SQL> DROP TABLE OMER_TEST_TAB;
Table dropped.


Drop edilen tabloyu orijinal ismiyle kurtarmak:

SQL>FLASHBACK TABLE OMER_TEST_TAB TO BEFORE DROP;
Flashback complete.


Drop edilen tabloyu yeni isimle kurtarmak:

SQL>FLASHBACK TABLE OMER_TEST_TAB TO BEFORE DROP RENAME TO OMER_TEST2_TAB;
Flashback complete.

Tablomuzu sorgulayarak tablomuzun geri gelip gelmediğine bakalım..

SQL>SELECT COUNT(*) FROM OMER_TEST_TAB T;
6012

SQL>SELECT COUNT(*) FROM OMER_TEST2_TAB;
6012

Yanlışlıkla drop edilen tablomuzu(OMER_TEST_TAB) geri getirmiş olduk.Drop edilen tablolar ve ilişkili nesneler (trigger,constraint,index vb) Recyclebin içerisinde tutulur.Nesne isimleri BIN…. İle başlıyor,
ve çöp kutusundaki tablolara select çekebiliyoruz.

SQL>SELECT * FROM “BIN$dmk5IZTTR8qVlpBs6KOSEw==$0“;

Nesneler drop edildikçe çöp kutusunda birikir bu yüzden ara ara
Recyclebin içini boşaltmak gerekiyor, bunun içinde “Purge Recyclebin” diyerek çöp kutusunu boşaltabiliyoruz..

Çöp kutusunu Purge etmek:

SQL>PURGE Recyclebin;

Bir tabloyu çöp kutusuna atmadan drop etmek:

SQL>DROP TABLE OMER_TEST_TAB PURGE;

Çöp kutusundaki bir tabloyu purge etmek:

SQL>PURGE TABLE OMER_TEST_TAB;


Umarım faydalı olur..