Flashback ile Data Kurtarma

Bazen yanlislikla tablodan kayit silme veya tablo drop etmek gibi islemler yapilabilir.  Bu durumda flashback ile data geri kurtarilabilir.

Önemli olan çok gecikilmemesidir.   Asagidaki parametrelerin degerine göre eski data tutulmaktadir. Undo tablespace çok küçük ise ve çok sayida transaction geliyorsa undo_retention periyot beklenmeden yeni gelen transactionlar undo tablespacede en eski olanlarin üzerine yazilacaktir. Veya undo_retention zamani eger küçük set edilmisse data undo dan çabuk silinecektir.

  • UNDO_MANAGEMENT
  • UNDO_TABLESPACE
  • UNDO_RETENTION

Database’de transaction sayisi, block degisme süreleri gibi zamanlara bakilarak undo tablespace boyutu ve undo retention periot hesaplanabilir.
iki senaryo üzerinde duracagiz;

1 – Tablo drop edilmisse;

CREATE TABLE user_1.yeni_tablo
AS
   (SELECT *
     FROM as of
 timestamp TO_TIMESTAMP('2013-01-01 19:30:00', 'YYYY-MM-DD HH24:MI:SS')
 from user_1.eski_tablo);

2- Tablodan bazi rowlar drop edilmisse;

create table user_1.yeni_tablo as 
select * from as of timestamp sysdate - 2/24 
from user_1.eski_tablo where id=1234567;

sadece insert into ile yeni_tablo’ya alinan degerler istenilen tabloya insert edilebilir. Fakat öncesinde tablonun bagimliliklarini incelemek gerekir.  Insert ile tetiklenen bir trigger olabilir, yanlislikla sildigimzi için aslinda bu degerler için trigerin çalismasini istemiyoruz, sequencing artmamasini isteyebiliriz. Asagidaki case için tabloya insert ile tetiklenen bir trigger oldugunu düsünelim ve zaten bu degerler için trigger daha önce çalismisti, yeniden çalismasini istemiyoruz.

–tabloyu locklayalim.

lock table user_1.eski_tablo  IN EXCLUSIVE MODE NOWAIT;

–triggeri disable edelim.

alter trigger CRM.ARIZA_IHBAR_AIT disable;

–tekrar tabloyu lock edelim çünkü yukardaki alter ile auto commit gerçeklesti ve lock kalkti.

lock table crm.ARIZA_IHBAR  IN EXCLUSIVE MODE
NOWAIT;

–simdi yanlislikl silinen datayi insert edelim.

insert into user_1.eski_tablo select * from user_1.yeni_tablo;

–triggeri enable edelim. Ve lock islemini sonlandiralim.

alter trigger CRM.ARIZA_IHBAR_AIT enable;

commit;

NOT: Oracle Flashback Query’i  DDL  veya  DML ile kullanmak vertabani durumunu etkiler. Yani bu da bir transaction olur ve undo tablespaceinde yer kullanir/eskilerin üstüne yazar. Dolayisiyla ihtiyacimiz olan datalarin ne oldugunu bilip mümkünse tek seferde yeni olusturulan bir tabloya atmak veya eski bir tabloya insert etmektir.

Tags:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir