Oracle FlashBack Archive

30 Mart 2018 Cuma

Flashback Data Archive ya da diger adiyla Total Recall teknolojisi Oracle 11g ile birlikte gelmistir.

Flashback Data Archive kritik tablolarda yapilan DML islemlerini tablespace’de saklamamizi saglayan teknolojidir.Peki kritik tablolar üzerinde yapilan DML islemlerini saklamamizin bize sagladigi avantajlaraörnek verecek olursak kullanicilarin hatali DML islemleri yaptiginda hatali DML islemini görüp düzeltebiliriz,kritik tablolar üzerinde bir nevi loglama yaparak kritik verilerimizi korumak,geçmise yönelik raporlamayla degisikliklerin takip edilmesi vs..

Denilebilir ki UNDO tablespace’lede eski verilere ulasabilirim niye Flashback Data Archive kullanip bir tablespace olusturup isimi daha da uzatayim. Dogrudur da eger kritik tablolar üzerinde kisa zamanli DML islemlerini görmemiz bizim için yeterli ise flashback version query’i kullanip DML islemlerini görebiliriz ama flashback version query UNDO tablespace’i kullandigi için ancak UNDO tablespace’in büyüklügü kadar geriye gidip yapilan DML islemlerini görebiliriz bunun da uzun bir zaman oldugunu sanmiyorum(UNDO tablespace’in büyüklügünü undo_retention parametresinden görebiliriz).Denilebilir ki burada UNDO tablespace’i büyütebilirim  ama UNDO tablespace’in esas görevi degistirilen verileri geçmise yönelik saklamak degildir.

Flashback Data Archive’de undo bilgilerini kullanarak  çalismaktadir. Diyebilirsiniz ki o zaman flashback version query ile flashback data archive arasindaki fark nedir.Flashback Data Archive ile Undo tablespace’in limitleri ayni degildir. Undo tablespace’in boyutu undo_retention parametresi ile sinirlayici niteliktedir(flashback database hariç, onun ayri bir log’u var). Flashback Data Archive ‘da böyle bir durum söz konusu degildir. Flashback Data Archive yalnizca undo verilerini kullanir ve bir tablo eger Flashback Data Archive için seçilmis ve tanimlanmis ise o tabloya ait bütün undo verileri archival için isaretlenir ve tablespace’e alinir(Flashback Data Archive’in tutarli olmasi için archival isaretlenmis veriler  tablespace’e alinana kadar ezilmez).Bu islemleri yerine getiren arka plan görevinin adi da FBDA’dir.

Simdi bir örnek yapalim ;

1.Uzerinde yapilacak bütün degisiklikleri kaydedecegimiz fda_table_deneme adinda bir tablo olusturalim ve birkaç sütün ekleyelim.

1

2

3

4

5

6

CREATE TABLE fda_table_deneme(

id number,

name VARCHAR2(20),

surname VARCHAR2(20),

age number

);

2.Tablomuzda yaptigimiz bütün degisikliklerin kaydedilecegi tablespace ve tabiki içinde de bir datafile olusturalim.

1

2

3

4

5

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 olusturdugumuz tablespace’i kullanarak arsiv dosyalarini olusturalim burada ki QUOTA ile arsivimizin boyutuna sinir koyabiliriz,RETENTION parametresi ile de ne kadar eski degisikliklerin saklanabilecegini belirtiriz.

1

2

3

CREATE FLASHBACK ARCHIVE fda_flashback_archive

TABLESPACE fda_tablespace_deneme

QUOTA 10G RETENTION 1 year;

4.Uzerinde yapilan degisiklikleri kaydedecegimiz tablomuzu belirleyip tanitiriz.

1

ALTER TABLE fda_table_deneme FLASHBACK ARCHIVE fda_flashback_archive;

5. Denemeler yapmak için tablomuzda birtakim DML islemleri gerçeklestirelim .

1

2

3

4

5

6

7

8

9

10

INSERT INTO fda_table_deneme VALUES(1,'Tuncay','ÖZER','39');

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 baktigimizda 4 tane veri görebiliriz.

1

SELECT * FROM fda_table_deneme;

  • Tablomuz ile ilgili yaptigimiz islemlere asagida ki gibi bakabiliriz.

1

SELECT * FROM flashback_transaction_query WHERE table_name=upper('fda_table_deneme');

  • Tablomuzun herhangi bir zamandaki halini görebiliriz.

1

SELECT * FROM fda_table_deneme AS OF timestamp to_timestamp('07-02-2013 16:45:58','DD-MM-YYYY HH24:MI:SS');

  • Tablomuzun istedigimiz bir aninda ki haline bakabiliriz.(Ben asagida ki örnekle 4 dk önceye bakiyorum)(second,minute,day,month)

1

SELECT * FROM fda_table_deneme AS OF timestamp(systimestamp-interval'4' minute);

  • Tablomuzda yapilan bütün islemleri görmek için asagida ki sorugu çalistirabiliriz.

1

SELECT * FROM fda_table_deneme VERSIONS BETWEEN SCN minvalue AND maxvalue;

  • Tablomuzda yapilan degisikliklerin belirli zaman araliklarinda ki listesini almak için asagida ki gibi bir sorgu çalistirabiliriz.

1

2

3

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 ihtiyacimiz kalmadiginda asagidaki gibi silebiliriz.

1

ALTER FLASHBACK ARCHIVE fda_flashback_archive PURGE ALL;

  • Flashback data archive içinde istedigimiz scn’den önceki bütün verileride asagidaki gibi silebiliriz.(ya da istedigimiz scn’den sonraki verileri silebiliriz bu islemleri zamana göre yapmak da mümkündür)

1

ALTER FLASHBACK ARCHIVE fda_flashback_archive PURGE BEFORE SCN 155526545;

  • Geçmise yönelik degisen veriyi saklama süresini uzatmak isteyebilirsiniz.

1

ALTER FLASHBACK ARCHIVE fda_flashback_archive MODIFY RETENTION 3 YEAR;

  • Flashback data archive kullanan tablonun archive olusturmasini engellemek için asagidaki sorguyu kullanabiliriz.

1

ALTER TABLE fda_table_deneme NO FLASHBACK ARCHIVE;

  • Flashback data archive arsivini drop etmek için asagidaki sorguyu kullanabiliriz.

1

DROP FLASHBACK ARCHIVE fda_flashback_archive;

  • Flashback data archive’i varsayilan yapmak için asagidaki kodu çalistirabiliriz.

1

ALTER FLASHBACK ARCHIVE fda_flashback_archive SET DEFAULT;

NOT : Flashback data archive ile ilgili bilgiler asagidaki viewlerden ulasabiliriz.

  • DBA_FLASHBACK_ARCHIVE : Flashback data archive hakkinda bilgi verir.
  • DBA_FLASHBACK_ARCHIVE_TS : Flashback data archive verilerinin tutuldugu tablespace’ler hakkinda bilgi verir.
  • DBA_FLASHBACK_ARCHIVE_TABLES : Flashback data archive kullanan tablolar hakkinda bilgi verir.

NOT : Flashback transaction query ile sorgu çektigimizde undo_sql kolonu null gelirse,asagidaki gibi log miner’i aktif yapmaliyiz çünkü flashback data archive arka planda log miner aracini kullaniyor.Bu yüzden supplemental_log_data_min parametresi YES modda olmalidir.

  • supplemental_log_data_min parametresinin statusunu ögrenmek için asagidaki sorguyu çalistirabiliriz.

1

SELECT supplemental_log_data_min FROM v$database;

  • supplemental_log_data_min parametresini YES(açmak) için asagidaki sorguyu çalistirabiliriz.

1

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

  • supplemental_log_data_min parametresini NO(kapatmak) için asagidaki sorguyu çalistirabiliriz.

1

ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;

NOT : Flashback data archive kullandigimizda hangi tablonun arsivini alacaksak onun schemasinda 3 tane tablo olusturuyor oracle ve flashback data archive ile ilgili bilgiler sakliyor burda. Flashback data archive’i ise kaldirdigimiz zaman tablolardan ikisi otomatikmen siliniyor bir tanesi kaliyor.(sys_fba_ddl_colmap_73528,sys_fba_hist_73528,sys_fba_tcrv_73528)

Yazar : Mustafa Bektas Tepe
Oracle World
Kaynaklar ; 
www.taliphakanozturk.wordpress.com
www.oganozdogan.com
www.dbataj.blogspot.com

Bunları da beğenebilirsiniz.