Mechanizm Flashback Query jest udostępniony od wersji Oracle 9i. Mechanizm ten umożliwia odczyt danych z przeszłości.
Co możemy dzięki temu mechanizmowi:
- zobaczyć jak wyglądały dane przed modyfikacją
- sprawdzić jakie dane zostały usunięte
- porównać aktualne dane z danymi wcześniejszymi
- przywrócić dane z określonego czasu
Konfiguracja bazy danych
Dla poprawnego działania mechanizmu należy,
- włączyć mechanizm automatycznego zarządzania segmentem UNDO
UNDO_MANAGMENT = AUTO
- określić czas przechowywania danych z segmentów wycofania
UNDO_RETENTION = 43200
Wartość 43200 jest to wartość w sekundach, czyli w podanym przykładzie 12 godzin. Domyślnie ustawiona jest wartość 900 czyli 15 minut.
Pamiętajmy, że może to wymagać dużej przestrzeni wycofań (UNDO TABLESPACE).
Uprawnienia
Do operacji odczytu danych historycznych ma uprawnienia właściciel tabeli. Aby uzyskać informacje o danych historycznych tabel utworzonych przez innego użytkownika należy mieć przywilej FLASHBACK dla danej tabeli, lub przywilej FLASHBACK ANY TABLE dający prawo do wykonania tej operacji dla wszystkich tabel bazy danych.
Aby uzyskać prawo do korzystania z pakietu DBMS_FLASHBACK, należy mieć prawo do wykonywania funkcji z tego pakietu. Pakiet ten jest w schemacie SYS’a.
DBMS_FLASHBACK
Do przełączania sesji w tryb FLASHBACK służy pakietu DBMS_FLASHBACK.
Opis procedur z pakietu DBMS_FLASHBACK.
- enable_at_time (podaj_czas in TIMESTAMP) – włącza tryb Flashback przywracając stan danych na godzinę określoną w parametrze podaj_czas.
- enable_at_system_change_number(podaj_SCN in NUMBER) – włącza tryb Flashback, przywracając stan danych do zmiany SCN (System Change Number) podanym w parametrze podaj_SCN.
Procedura pierwsza w rzeczywistości dokonuje przemapowania podanego czasu na numer zmiany SCN i wykonanie drugiego pakietu. Mapowanie czasu SCN można odczytać z tabeli systemowej SMON_SCN_TIM E.
Włączenie trybu Flashback powoduje , że niemożliwe jest wykonywanie operacji DDL.
AS OF TIMESTAMP/SCN
Zapytanie zwracające tablicę z określonego czasu
select * from tablica as of timestamp
(to_timestamp ('01-01-2011 12:00:00', 'DD-MM-YYYY HH24:MI:SS'));
lub podając numer SCN
select * from tablica as of scn 784638563;
Pamiętać należy, że odzyskać możemy tylko dane usunięte poprzez operacje DELETE, operacja TRUNCATE powoduje nie generowanie informacji o sposobie wycofania instrukcji (dane nie są przechowywane w segmentach UNDO).
OGRANICZENIA
- użytkownik SYS nie może korzystać z pakietu DBMS_FLASHBACK
- informacje w segmencie UNDO są przechowywane przez określony czas
- wykorzystywany jest aktualny stan słowników, skutkuje to tym, że nie możemy odwoływać się do tablic, których dodano lub usunięto kolumny.
Pamiętać należy, że odzyskać możemy tylko dane znajdujące się w przestrzeni UNDO zanim zostaną nadpisane nowymi danymi. Aby temu zapobiec możemy wyeksportować sobie dane za pomocą parametrów FLASHBACK_SCN oraz FLASHBACK_TIME.
ZMIANY W ORACLE 10G
- FLASHBACK TABLE.
- FLASHBACK DROP.
- FLASHBACK DATABASE.
- FLASHBACK TRANSACTION QUERY.
- FLASHBACK TRANSACTION.
FLASHBACK TABLE
Funkcja FLASHBACK TABLE umożliwia odtworzenie stanu tabeli z określonego momentu w przeszłości, wraz z indeksami, więzami integralności i wyzwalaczami. Przed zastosowaniem trzeba włączyć możliwość zmiany numeru wierszy – ROWID.
alter table tablica enable row movement;
Użytkownik wykonujący funkcje FLASHBACK TABLE musi posiadać prawo FLASHBACK ANY TABLE oraz prawo do operacji "select", "insert", "delete" oraz "alter table" na docelowej tabeli.
Poniższe zapytanie przywróci stan tabeli sprzed pół godziny:
flashback table tablica to timestamp
systimestamp - interval '30' minute;
Funkcję tę można też wywołać z Enterprise Managera.
Kiedy nie można stosować tej funkcji:
- Na tabelach systemowych
- Na widokach zmaterializowanych
- Po poleceniu shrink
- Po poleceniach DDL (usuwających kolumny lub partycje, tworzące klastry, truncate oraz move)
Do obiektów usuniętych przez ten mechanizm można się odwołać poprzez „kosz” (recycle bin). FLASHBACK DROP w przeciwieństwie do FLASHBACK TABLE nie opiera się na segmentach wycofania (UNDO), lecz wykorzystuje mechanizm RECYCLE BIN.
Przegląd informacji w RECYCLE BIN:
select * from recyclebin;
Przywracanie tabeli:
flashback table tablica to before drop;
Przywracanie ze zmianą nazwy tabeli:
flashback table tablica to before drop rename to tablica_2;
Opróżnianie RECYCLE BIN:
- PURGE RECYCLE BIN – dla aktualnego użytkownika
- PURGE TABLE <nazwa_tabeli >– usuwa tabelę na stałe
- PURGE INDEX <nazwa_indeksu> - usuwa indeks
- PURGE TABLESPACE <nazwa_tablespace> - opróżnia kosz w danej przestrzeni tabek
- PURGE DBA_RECYCLEBIN – opróżnia cały kosz
Kasowanie tabeli z pominięciem kosza
drop table <tablica> purge;
Ograniczenia:
- Obiekty będą przechowywane, dopóki jest wystarczająca ilość miejsca
- Nie jest możliwe korzystanie z tego mechanizmu w systemowej przestrzeni tabel
- Funkcja autoextend również opróżnia kosz
FLASHBACK DATABASE
Mechanizm ten umożliwia przywrócenie całej bazy do określonego miejsca w przeszłości i odbywa się to szybciej, niż innymi dostępnymi metodami.
Konfiguracja.
Należy wykonać polecenie na bazie w trybie mount:
alter database flashback on;
Ustawiamy parametry:
- DB_RECOVERY_FILE_DEST – ustala obszar szybkiego odtworzenia FRA (Flash Recovery Area), w którym przechowywane będą logi flashback
- DB_RECOVERY_FILE_DEST_SIZE – rozmiar FRA
- DB_FLASHBACK_RETENTION_TARGET - ustala górny limit wyrażony w minutach, do jakiego możemy cofnąć bazę danych
Baza musi być w trybie archivelog.
Flashback database tworzy dodatkowe logi, które są niezbędne do odtworzenia bazy. Za ich zapisywanie odpowiedzialny jest proces RVWR (Recovery Writer Process).
Z widoku V$FLASHBACK_DATABASE_LOG uzyskujemy informacje do jakiego momentu możemy cofnąć bazę.
Przywracanie bazy danych.
Potrzebne uprawnienia sysdba. Uruchamiamy bazy w trybie mount
flashback database to timestamp to_date('01-01-2011 12:00');
Otwieramy bazę z opcją resetlogs.
alter database open resetlogs;
Tworzenie punktów przywracania:
create restore point przed_testem;
Ograniczenia:
- Nie możemy stosować, gdy usunięta zostanie przestrzeń tabel
- Nie możemy stosować, gdy plik danych zostanie pomniejszony lub gdy stworzymy nowe pliki kontrolne
- Nie odtworzymy, gdy w zarchiwizowanych dziennikach, oraz obszarach FRA nie ma wystarczającej ilości danych, w celu przywrócenia danych należy zastosować tradycyjne metody odzyskiwania.
ZMIANY W ORACLE 11G
-
FLASHBACK TRANSACTION BACKOUT.
- FLASHBACK DATA ARCHIVE
FLASHBACK TRANSACTION BACKOUT
Mechanizm ten działa bazując na segmentach wycofań oraz na archived redo logs.
Aby stosować ten mechanizm, należy włączyć dodatkowy poziom logowania (supplemental logging)
alter database add supplemental log data;
Możemy zarządzać tym mechanizmem poprzez Database Control i procedurę TRANSACTION_BACKOUT.
Parametry procedury:
- NUMBEROFXIDS – ilość transakcji do wycofania
-
XIDS – numer identyfikujący transakcje przekazany w postaci wektora
-
OPTIONS – zależność odnośnie transakcji będących rodzicem i potomkiem
-
NOCASCADE – opcja domyślna –używamy, jeśli nie przewidujemy żadnych zależności między transakcjami
-
CASCADE – wycofuje najpierw zależne transakcje
-
NOCASCADE_FORCE – wycofuje głównie transakcje (rodzica) i ignoruje wszystkie inne
-
SCNIHINT – początkowy numer SCN danej transakcji
FLASHBACK DATA ARCHIVE
Za pomocą tego mechanizmu możemy odzyskać dane nie tylko sprzed kilku kilkunastu godzin, lecz nawet kilku lat. Narzędzie to zapisuje zapisuje zmiany DML danej tabeli przez zdefiniowany okres czasu. Tworzona jest nowa wewnętrzna tabela, która jest repliką danej tabeli z dodatkowymi kolumnami zawierającymi znaczniki czasowe timestamp. Każda operacja update, delete na tabeli śledzonej powoduje utworzenie nowego wiersza w tabeli wewnętrznej. Tabela ta jest partycjonowana i kompresowana, aby zaoszczędzić miejsce na dysku.
Konfiguracja:
Przestrzeń tabel musi być zarządzana automatycznie (Automatic Segment Space ASSM). Segmenty wycofania również muszą być automatycznie zarządzane (Automatic Undo Management).
Za pomocą polecenia create falshback archive tworzymy logiczny kontener, który przechowywać będzie nasze dane. Opcjonalnie możemy określić parametr quota czyli limit miejsca na dysku przeznaczony na archiwizacje.
Powiązanie kontenera z tabelą:
alter table tablica flashback archive nazwa_kontenera;Dostęp do danych odbywa się poprzez konstrukcje “AS OF”:
select * from tablica as of timestamp
to_timestamp('01-01-2011 12:00:00', 'DD-MM-YYYY HH24:MI:SS')
Ograniczenia:
- Dla wersji Oracle 11.1 nie możliwe są operacjie takie jak modyfikowanie kolumn, drop oraz truncate na śledzonej tabeli
Większość funkcji FLASHBACK dostępnych jest jedynie w wersji Enterprise, a za korzystanie z FLASHBACK DATA ARCHIVE trzeba dodatkowo zapłacić.
Czy to juz koniec tego bloga? :(
OdpowiedzUsuń