Flashback Data Archive ya da diğer adıyla Total Recall teknolojisi Oracle 11g ile birlikte gelmiştir.

Flashback Data Archive kritik tablolarda yapılan DML işlemlerini tablespace’de saklamamızı sağlayan teknolojidir.Peki kritik tablolar üzerinde yapılan DML işlemlerini saklamamızın bize sagladığı avantajlara örnek verecek olursak kullanıcıların hatalı DML işlemleri yaptığında hatalı DML işlemini görüp düzeltebiliriz,kritik tablolar üzerinde bir nevi loglama yaparak kritik verilerimizi korumak,geçmişe yönelik raporlamayla değişikliklerin takip edilmesi vs..

Denilebilir ki UNDO tablespace’lede eski verilere ulaşabilirim niye Flashback Data Archive kullanıp bir tablespace oluşturup işimi daha da uzatayim. Doğrudur da eger kritik tablolar üzerinde kısa zamanlı DML işlemlerini görmemiz bizim için yeterli ise flashback version query’i kullanıp DML işlemlerini görebiliriz ama flashback version query UNDO tablespace’i kullandığı için ancak UNDO tablespace’in büyüklüğü kadar geriye gidip yapılan DML işlemlerini görebiliriz bunun da uzun bir zaman olduğunu sanmıyorum(UNDO tablespace’in büyüklüğünü undo_retention parametresinden görebiliriz).Denilebilir ki burada UNDO tablespace’i büyütebilirim  ama UNDO tablespace’in esas görevi değiştirilen verileri geçmişe yönelik saklamak değildir.

Flashback Data Archive’de undo bilgilerini kullanarak  çalışmaktadir. Diyebilirsiniz ki o zaman flashback version query ile flashback data archive arasındaki fark nedir.Flashback Data Archive ile Undo tablespace’in limitleri aynı değildir. Undo tablespace’in boyutu undo_retention parametresi ile sınırlayıcı niteliktedir(flashback database hariç, onun ayrı bir log’u var). Flashback Data Archive ‘da böyle bir durum söz konusu değildir. Flashback Data Archive yalnızca undo verilerini kullanır ve bir tablo eğer Flashback Data Archive için seçilmiş ve tanımlanmış ise o tabloya ait bütün undo verileri archival için işaretlenir ve tablespace’e alınır(Flashback Data Archive’in tutarlı olması için archival işaretlenmiş veriler  tablespace’e alınana kadar ezilmez).Bu işlemleri yerine getiren arka plan görevinin adı da FBDA’dır.

Şimdi bir örnek yapalım ;

1.Uzerinde yapılacak bütün değişiklikleri kaydedeceğimiz fda_table_deneme adında bir tablo oluşturalım ve birkaç sütün ekleyelim.

CREATE TABLE fda_table_deneme(
id number,
name VARCHAR2(20),
surname VARCHAR2(20),
age number
);

2.Tablomuzda yaptığımız bütün değişikliklerin kaydedileceği tablespace ve tabiki içinde de bir datafile oluşturalım.

CREATE TABLESPACE
fda_tablespace_deneme
DATAFILE
'/u01/app/oracle/oradata/orcl/fda_datafile_deneme01.DBF'
SIZE 1024M;

3. Flashback Data Archive için daha önceden oluşturduğumuz tablespace’i kullanarak arşiv dosyalarını oluşturalım burada ki QUOTA ile arşivimizin boyutuna sınır koyabiliriz,RETENTION parametresi ile de ne kadar eski değişikliklerin saklanabileceğini belirtiriz.

CREATE FLASHBACK ARCHIVE fda_flashback_archive
TABLESPACE fda_tablespace_deneme
QUOTA 10G RETENTION 1 year;

4.Uzerinde yapılan değişiklikleri kaydedeceğimiz tablomuzu belirleyip tanıtırız.

ALTER TABLE fda_table_deneme FLASHBACK ARCHIVE fda_flashback_archive;

5. Denemeler yapmak için tablomuzda birtakım DML işlemleri gerçekleştirelim .

INSERT INTO fda_table_deneme VALUES(1,'Mustafa','Tepe','24');
INSERT INTO fda_table_deneme VALUES(2,'Kenan','Gun','20');
INSERT INTO fda_table_deneme VALUES(3,'Halil','Sig','30');
INSERT INTO fda_table_deneme VALUES(4,'Murat','Konmaz','35');
INSERT INTO fda_table_deneme VALUES(5,'Burak','Almaz','40');
COMMIT;
UPDATE fda_table_deneme SET age=41 WHERE age=40;
COMMIT;
DELETE fda_table_deneme WHERE id=3;
COMMIT;

6.Tablomuzun son durumuna baktığımızda 4 tane veri görebiliriz.

SELECT * FROM fda_table_deneme;
  • Tablomuz ile ilgili yaptıgımız işlemlere aşagıda ki gibi bakabiliriz.
SELECT * FROM flashback_transaction_query WHERE table_name=upper('fda_table_deneme');
  • Tablomuzun herhangi bir zamandaki halini görebiliriz.
SELECT * FROM fda_table_deneme AS OF timestamp to_timestamp('07-02-2013 16:45:58','DD-MM-YYYY HH24:MI:SS');
  • Tablomuzun istediğimiz bir anında ki haline bakabiliriz.(Ben aşağıda ki örnekle 4 dk önceye bakıyorum)(second,minute,day,month)
SELECT * FROM fda_table_deneme AS OF timestamp(systimestamp-interval'4' minute);
  • Tablomuzda yapılan bütün işlemleri görmek için aşağıda ki sorugu çalıştırabiliriz.
SELECT * FROM fda_table_deneme VERSIONS BETWEEN SCN minvalue AND maxvalue;
  • Tablomuzda yapılan değişikliklerin belirli zaman aralıklarında ki listesini almak için aşağıda ki gibi bir sorgu çalıştırabiliriz.
SELECT * FROM fda_table_deneme VERSIONS BETWEEN SCN minvalue AND maxvalue
MINUS
SELECT * FROM fda_table_deneme AS OF timestamp to_timestamp('07-02-2013 17:49:08','DD-MM-YYYY HH24:MI:SS');
  • Flashback data archive içindeki verilere ihtiyacımız kalmadığında aşağıdaki gibi silebiliriz.
ALTER FLASHBACK ARCHIVE fda_flashback_archive PURGE ALL;
  • Flashback data archive içinde istediğimiz scn’den önceki bütün verileride aşağıdaki gibi silebiliriz.(ya da istediğimiz scn’den sonraki verileri silebiliriz bu işlemleri zamana göre yapmak da mümkündür)
ALTER FLASHBACK ARCHIVE fda_flashback_archive PURGE BEFORE SCN 155526545;
  • Geçmişe yönelik değişen veriyi saklama süresini uzatmak isteyebilirsiniz.
ALTER FLASHBACK ARCHIVE fda_flashback_archive MODIFY RETENTION 3 YEAR;
  • Flashback data archive kullanan tablonun archive oluşturmasını engellemek için aşağıdaki sorguyu kullanabiliriz.
ALTER TABLE fda_table_deneme NO FLASHBACK ARCHIVE;
  • Flashback data archive arşivini drop etmek için aşağıdaki sorguyu kullanabiliriz.
DROP FLASHBACK ARCHIVE fda_flashback_archive;
  • Flashback data archive’ı varsayılan yapmak için aşağıdaki kodu çalıştırabiliriz.
ALTER FLASHBACK ARCHIVE fda_flashback_archive SET DEFAULT;

NOT : Flashback data archive ile ilgili bilgiler aşağıdaki viewlerden ulaşabiliriz.

  • DBA_FLASHBACK_ARCHIVE : Flashback data archive hakkında bilgi verir.
  • DBA_FLASHBACK_ARCHIVE_TS : Flashback data archive verilerinin tutulduğu tablespace’ler hakkında bilgi verir.
  • DBA_FLASHBACK_ARCHIVE_TABLES : Flashback data archive kullanan tablolar hakkında bilgi verir.

NOT : Flashback transaction query ile sorgu çektiğimizde undo_sql kolonu null gelirse,aşağıdaki gibi log miner’i aktif yapmalıyız çünkü flashback data archive arka planda log miner aracını kullanıyor.Bu yüzden supplemental_log_data_min parametresi YES modda olmalıdır.

  • supplemental_log_data_min parametresinin statusunu öğrenmek için aşağıdaki sorguyu çalıştırabiliriz.
SELECT supplemental_log_data_min FROM v$database;
  • supplemental_log_data_min parametresini YES(açmak) için aşağıdaki sorguyu çalıştırabiliriz.
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  • supplemental_log_data_min parametresini NO(kapatmak) için aşağıdaki sorguyu çalıştırabiliriz.
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;

NOT : Flashback data archive kullandığımızda hangi tablonun arşivini alacaksak onun schemasında 3 tane tablo oluşturuyor oracle ve flashback data archive ile ilgili bilgiler saklıyor burda. Flashback data archive’ı ise kaldırdığımız zaman tablolardan ikisi otomatikmen siliniyor bir tanesi kalıyor.(sys_fba_ddl_colmap_73528,sys_fba_hist_73528,sys_fba_tcrv_73528)
Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe
Oracle World
Kaynaklar ; 
www.taliphakanozturk.wordpress.com
www.oganozdogan.com
www.dbataj.blogspot.com

Loading