sobota, 22 października 2011

Tryb flashback

We wcześniejszycj postach pisałem juz o zapytaniach typu as of timestamp. Teraz robimy level up i  będziemy widzieć całą bazę z określonego punktu w czasie. Dane które będziemy widzieć pochodzą z przestrzeni UNDO , więc musimy pamiętać o właściwym ustawieniu parametru undo_retention.
Do tej sztuczki-magiczki wykrzystujemy pakiet dbms_flashback, więc jeśli chcemy z niego korzystać z innego użytkownika niż sys musimy temu użytkownikowi nadać odpowiednie uprawnienia:

grant execute on dbms_flashback to hr;


Następnie dokonujemy kilku zmian po których odróżnimy aktualny stan od stanu po zmianach. Dobrze jest sobie zapisać kiedy zmiany miały miejsce:



update employees set salary=3000;
commit;
update departments set manager_id=100;
commit; --13:37

Kolejnym krokiem jest włączenie trybu flashback. Musimy podać czas, z którego stan chcemy oglądać. Czas musi być podany jako timestamp:


begin
dbms_flashback.enable_at_time(to_timestamp('13:30:00 22-10-2011','hh24:mi:ss dd-mm-yyyy' ));
end;


Możesz teraz zajrzeć do tabel które zmieniałeś:


select * from employees;
select * from departments;




Zauważ że widzisz te tabele w stanie z czasu który podałeś w enable_at_time, nie trzeba dorzucać as of timestamp - bo to jest tutaj jakby parametrem domyślnym.  Minus jest taki, że mając włączony ten tryb nie możemy zmieniać nic w bazie. Baza działa w trybie flashback i jest tylko do odczytu. Nie możemy też wykonać żadnej operacji DDL. Oczywiście ograniczenie to dotyczy tylko aktualnej sesji.
 
Aby wyłączyć tryb flashback stosujemy to:

begin
dbms_flashback.disable;
end;

Brak komentarzy:

Prześlij komentarz