Commit edilmiş verilerin Flashback version query ile geri alınması

Ekstra kurulum gerektirmeden bir satır üzerinde oynanan tüm kirli oyunları görelim :D

Aslında bu yazıda herhangi bir tablonun herhangi bir satırının üzerinde yapılan tüm değişiklikleri nasıl görebiliriz sorusunun cevabını vericez tabiki oracle ın bize sunduğu güzelliklerle ve ekstra bir kurulum gerektirmeden.

Önce örnek için tablomuzu yaratalım

create table cihaz_sahip
(
cihaz_no number,
sahip_no number
)
;

Sonrasında tablomuz üzerinde çeşitli operasyonlar yapalım

insert into cihaz_sahip
values(1,1);
commit;

update cihaz_sahip
set sahip_no =2
where cihaz_no = 1;
commit;

update cihaz_sahip
set sahip_no =3
where cihaz_no = 1;
commit;


delete cihaz_sahip;
commit;

insert into cihaz_sahip
values(1,5);
commit;

Şimdi yapılan bu işlemleri bir film gibi önümüze dökelim

SELECT cihaz_no,
sahip_no,
versions_starttime,
versions_endtime,
versions_xid,
versions_operation
FROM cihaz_sahip versions BETWEEN TIMESTAMP minvalue AND maxvalue
order by VERSIONS_STARTTIME


VERSIONS_OPERATION
I
U
U
D
I


olarak gördüklerimiz tahmin ettiğiniz üzere I=Insert ,D=Delete ve U=Update işlemlerine denk geliyor

Ayrıca yine

VERSIONS_XID
05002E00AB000000
09002100B2000000
06000B00AA000000
07002700AD000000
03001500AF000000


değerlerini kullanarak yaptığımız işlemi geri alacak sql sorgusunu elde edebilmek mümkün bunun için

SELECT UNDO_SQL
FROM FLASHBACK_TRANSACTION_QUERY
WHERE XID = '03001500AF000000';

UNDO_SQL
delete from "DEVELOPER"."CIHAZ_SAHIP" where ROWID = 'AAADm+AAEAAABJuAAB';


Ancak bu FLASHBACK_TRANSACTION_QUERY view ini sorgulayabilmek için
grant select any transaction to kullanici

şeklinde verilebilecek sorgulama hakkına sahip olmanız gerekiyor.

En önemli nokta Flashback Versions Query ler ile ancak kısa bir zaman aralığında filmi izleyebilecek olmanız sınır ise

UNDO_RETENTION

bu parametreyi de sqlplus ile

show parameter UNDO_RETENTION

komutu ile görebilirsiniz.Ben kendi database imde bu değeri 900 saniye olarak görüyorum yani 15 dakika :D


Kaynak :

http://www.oracle.com/technology/pub/articles/10gdba/week1_10gdba.html

Test Ortamı:

Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

Comments

Makbus said…
Güzel bir anlatım olmuş. Teşekkürler

Popular posts from this blog

Pyppeteer fix for BrowserError: Browser closed unexpectedly

overlay filesystem and containers

How to add pagination to django comments for your model