Warning: Declaration of Suffusion_MM_Walker::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /DISK2/WWW/plsql.cz/www/wp-content/themes/suffusion/library/suffusion-walkers.php on line 39
Mar 182011
 

Balík DBMS_FLASHBACK je s námi již od Oracle9iR2 a firma Oracle jej s každou další verzí vylepšuje a přidává nové funkcionality. DBMS_FLASHBACK je balík, který nám umožní získat původní data a to i v případě, že jsme spustili nějaký ten DML a s hrůzou jsme zjistili, že jsme to rozhodně commitnout nechtěli ;) Použití si určitě najde každý – pohled na data, která existovala v tabulce (a nejen v tabulce, je umožněn i FLASHBACK celé databáze) před nějakou změnou si najde spoustu využití. Je až pozoruhodné kolik mých kolegů tuto možnost do nedávna ještě neznalo. Přitom znalost této funkčnosti programátorem ušetří spoustu vztekání a často i problémů. Další důvod proč mít tuto znalost je často omezená doba platnosti ;) Cirman je věčný UNDO logy nemusí být nemusí.

DBMS_FLASHBACK toho umí opravdu hodně, takový rychlotip je select do tabulky na historická data. Nejprve je třeba vědět v jaké verzi/kdy chcete vidět data. Určení času/verze lze dvěma způsoby: timestamp, což je ta horší volba protože je nepřesná. Druhá a lepší volba je určení času/verze pomocí SCN (System Change Number), což je naprosto přesné číslo, kterým je určena každá změna  v databázi, narozdíl od timestamp, který může obsahovat i více změn + perioda (3s) s jakou se zaznamenává.

Zjištění SCN před změnou.

select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
SCN=349998023

Omylem smažeme tabulku.

delete MY_TABLE;
commit;

A nyní pohled na historická data před tímto osudným smazáním:


select * from MY_TABLE as of scn 349998023;

O proti Oracle 9iR2 a 10g jde 11g mnohem dále a umožňuje v FlashBackem vracet data, dotazovat se celé databáze, vráti relevantní transakce, vypisovat SCN atd..

Co je důležité vědět je, že historický pohlede je čten u UNDOlogu a možnost obnovy silně závisí na nastavení databáze a to konkrétně parametru UNDO_RETENTION, který v minutách (výchozích je pouze 15 !) vaší možnost obovy a případně RETENTION GUARANTEE parametr, který to zaručuje.

Commitly jste něco, co jste němeli? Použijte DBMS_FLASHBACK - jediné co se může stát je obdržení chyby ORA-08180 a pocit ještě větší flustrace ;)

 Posted by at 19:55

 Leave a Reply

(required)

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>