tryb archiwizacji -archivelog mode
Co to jest tryb archiwizacji (archivelog mode)
Żeby opisać na czym polega tryb ARCHIVELOG trzeba najpierw wyjaśnić kilka innych kwestii. W momencie dokonywania modyfikacji danych odpowiednie bloki bazy danych są ładowane do podobszaru SGA, tzw. database buffer cache. W momencie zainstnienia puktu kontrolnego (checkpoint) dane są zrzucane do logów REDO. Logi te są cyklicznie nadpisywane. W trybie archiwizacji proces archiwizacyjny (archiver) zapisuje pliki redo do innej lokalizaji zanim zostaną nadpisane. W ten sposób nie tracimy informacji o operacjach które były dokonywane na bazie.
Czy tryb archiwizacji w naszej bazie jest włączony?
Możemy to stwierdzić zapuszczając poniższe zapytanko:
SQL> select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG
O czym trzeba pamiętać przed włączeniem trybu archiwizacji?
Najważniejszą sprawą jest poprawne określenie ścieżki do katalogu archiwizacyjnego i zadbanie by było w nim wolne miejsce.
Jak oszacowac ile miejsca jest nam potrzebne na logi?
Najpierw musimy zastanowić się z jakiego okresu czasu chcemy zbierać logi. Przypuśćmy że wystarczy nam pół roku. Korzystamy z widoku V$LOG_HISTORY, w którym zapisana jest cała historia logowania. Mimo że logi są cyklicznie nadpisywane w trybie noarchivelog, to informacja o nadpisanych logach jest przechowywana.
SQL> desc v$log_history Name Null? Type ----------------------------------------- -------- ---------------------------- RECID NUMBER STAMP NUMBER THREAD# NUMBER SEQUENCE# NUMBER FIRST_CHANGE# NUMBER FIRST_TIME DATE NEXT_CHANGE# NUMBER
SEQUENCE# oznacza numer loga, first_time to data począwszy od której proces log writera zaczął zapis. Chcemy zobaczyć jak kształtowało się dzienne zużycie logów:
SQL>select count(*)ile_logow ,dzien
from
(
select to_char(first_time,'yy-mm-dd') dzien
from v$log_history
)
group by dzien order by dzien;
...
COUNT(*) DZIEN
---------- --------
16 09-02-03
14 09-02-04
15 09-02-05
13 09-02-06
5 09-02-07
3 09-02-08
12 09-02-09
21 09-02-10
13 09-02-11
53 09-02-12
24 09-02-13
...
Jak włączyć tryb archiwizacji?
Najpierw musimy wyłaczyć bazę. Następnie uruchomić ją w trybie mount. W trybie mount mamy dostęp do pliku kontrolnego (controlfile). Jednocześnie pliki bazy danych nie są otwarte.
SQL>shutdown immediate SQL>startup mount SQL>alter database archivelog SQL>alter database open
Chielibyśmy zobaczyć czy nasze działania przyniosły jakiś efekt. W tym celu wymusimy przełączenie między logami. Następnie zapuścimy zapytanie do V$ARCHIVED_LOG.
SQL>alter system switch logfile; system altered SQL>select * from V$ARCHIVED_LOG;
SQL> alter system set log_archive_dest="/home/oracle/product/10.2.0/db_1/dbs/log"; alter system set log_archive_dest="/home/oracle/product/10.2.0/db_1/dbs/log" * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or DB_RECOVERY_FILE_DEST SQL> alter system set DB_RECOVERY_FILE_DEST=''; System altered. SQL> alter system set log_archive_dest="/home/oracle/product/10.2.0/db_1/dbs/log"; System altered.
Łukasz Goszczyński goszczu.pl