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