Jak w temacie
Jak w temacie
Po wydaniu polecenia commit transakcja zostaje zatwierdzona i nie można już wycofać żadnych wydanych wcześniej poleceń...Niemniej, czasami można wycofać ich efekty. Zależy to od tego, jakie czynności zostały wykonane, a także od wersji serwera Oracle. Jeśli zależy Panu na "wycofaniu" jakiejś konkretnej operacji proszę o więcej szczegółów (czego konkretnie dotyczyła sytuacja i jaka jest to wersja bazy).
Chodzi o update danych i alter użytkownika.
W przypadku operacji update można wyświetlić dane przed modyfikacją, a następnie np. zapisać je do jakiejś tabeli tymczasowej np:
create table temp1 as select * from oryginalna_tabela where 1=2; insert into temp1 select * from oryginalna_tabela as of timestamp sysdate-10/24/60; commit;
Powyższy kod utworzy tabelę o nazwie temp1 i zapisze do nich dane z przed 10 minut (10/24/60) nie biorąc pod uwagę żadnych - nawet "zakomitowanych" - zmian, które miały miejsce w tym samym czasie.
Jeśli jednak chodzi o alter użytkownika nie ma możliwości wycofania takiej operacji. Można jedynie przywrócić stan całej bazy danych przy pomocy polecenia flashback database (od wersji 10g).
Normalnie nie jest to możliwe do tego celu Oracle zaleca użyć grupy funkcjonalności Flashback opisanej w dokumentacji np.
http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#g1026131
UWAGA!!!
Przeważnie w/w opcje są wyłączone na środowiskach produkcyjnych ze względu na koszty jakie trzeba ponieść.