Przygotowanie bazy do wykonywania kopii bezpieczeństwa Wstęp Wykonywanie kopii bezpieczeństwa i odtwarzanie po awarii jest jednym z kluczowych zadań administratora bazy danych. W momencie wystąpienia awarii jednego z plików bazy danych czyli: Pliku kontrolnego (control file) Plików danych (data files) Redo logów (redo logs) należy wykonać odtwarzanie z kopii bezpieczeństwa (backup), którą trzeba wykonywać regularnie w trakcie normalnej pracy bazy danych. Scenariusze wykonywania kopii i odtwarzania zależą od kilku czynników takich jak: 1) Tryb pracy bazy danych dotyczący archiwizacji redo logów a) NOARCHIVELOG bez archiwizacji redo logów, które są cyklicznie nadpisywane przez proces LGWR b) ARCHIVELOG z archiwizacją redo logów, które są kopiowane i odkładane w specjalnie zdefiniowanym katalogu lub katalogach 2) Tryb wykonywania kopii bezpieczeństwa a) w momencie, kiedy instancja bazy nie działa i została wcześniej czysto zamknięta (SHUTDOWN IMMEDIATE, TRANSACTIONAL, NORMAL). Jest to tzw. Offline backup. b) w momencie, kiedy baza cały czas pracuje i wykonywane są transakcje. Jest to tzw. Online backup. Ten tryb jest możliwy tylko w przypadku pracy w ARCHIVELOG. Kopie bezpieczeństwa można wykonywać na kilka sposobów: Ręcznie czyli przez samodzielnie napisane skrypty z użyciem poleceń SQL i komend systemu operacyjnego (np. do kopiowania plików) Automatycznie za pomocą Enterprise Manager (EM). Automatycznie za pomocą narzędzia RMAN (Recovery Manager). Jest to narzędzie z linią komend podobnie jak SQLPLUS. RMAN jest preferowanym narzędziem do wykonywania kopii i odtwarzania. Mimo, że EM ułatwia proces wykonywania kopii i odtwarzania za pomocą graficznego interfejsu, prawie żaden administrator nie używa EM do tego celu. Wykonywanie kopii i odtwarzania jest procesem na tyle krytycznym, że administrator musi mieć pełną kontrolę nad operacjami jakie są wykonywane w trakcie. Strona: 1 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
Zabezpieczenie bazy danych przed awarią Jest takie powiedzenie, że lepiej zapobiegać niż leczyć. Takie podejście w 100% dotyczy również zarządzania bazą danych. Odtwarzanie po awarii jest ostatecznością do której wielokrotnie mogłoby nie dojść gdyby administratorzy odpowiednio zabezpieczyli bazę danych przed awarią. Do podstawowych czynności jakie trzeba wykonać, aby zwiększyć bezpieczeństwo bazy danych należy: zwielokrotnienie redo logów. W grupie redo logów musi być co najmniej jeden plik, ale dobrą praktyką jest posiadanie dwóch identycznych kopii w jednej grupie rozmieszczonych na różnych dyskach podłączonych do różnych kontrolerów. W takiej konfiguracji proces LGWR zapisuje jednocześnie do wszystkich kopii te same dane. zwielokrotnienie pliku kontrolnego. Oracle zaleca posiadanie co najmniej trzech kopii pliku kontrolnego włączenie trybu ARCHIVELOG zapewniającego archiwizacje plików redo oraz możliwości wykonywania kopii bezpieczeństwa w trybie Online wraz z odtwarzaniem po awarii dokładnie do punktu w czasie bezpośrednio przed awarią. archiwizacji redo logów do dwóch lokalizacji Zwielokrotnienie redo logów Grupy redo logów można podejrzeć w perspektywie V$LOG np. SELECT GROUP#, MEMBERS, STATUS, ARCHIVED FROM V$LOG; GROUP# MEMBERS STATUS ARC ---------- ---------- -------- --- 1 1 CURRENT NO 2 1 INACTIVE YES 3 1 INACTIVE YES Powyższe zapytanie wyświetla 3 grupy redo logów i w każdej grupie po jednym pliku. Jest to sytuacja wbrew zaleceniom według których w każdej grupie powinny być co najmniej 2 pliki (members) Kolejnych kopie plików redo logów w grupach dodaje się następującym poleceniem: ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo01-1.log' TO GROUP 1; Powyższe polecenie należy wykonać dla wszystkich grup redo logów dodając kolejnych członków do tych grup. W perspektywie V$LOGFILE można znaleźć dokładne informacje o położeniu członków grup redo: SELECT GROUP#, MEMBER FROM V$LOGFILE; GROUP# MEMBER ---- ---------------------------------------- Strona: 2 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
1 u01/app/oracle/oradata/orcl/redo01.log 2 u01/app/oracle/oradata/orcl/redo02.log 3 u01/app/oracle/oradata/orcl/redo03.log 1 u01/app/oracle/oradata/orcl/redo01-1.log 2 u01/app/oracle/oradata/orcl/redo02-1.log 3 u01/app/oracle/oradata/orcl/redo03-1.log Zwielokrotnienie pliku kontrolnego Położenie pliku kontrolnego jest określane parametrem CONTROL_FILES: SHOW PARAMETER CONTROL_FILES; Aby dodać nową kopię pliku kontrolnego należy: 1. zamknąć bazę danych: a. SHUTDOWN IMMEDIATE 2. stworzyć plik parametrów PFILE a. CREATE PFILE='/tmp/pfile.ora' FROM SPFILE; 3. skopiować istniejący plik kontrolny do nowej lokalizacji a. cd /u01/app/oracle/oradata/orcl b. cp control01.ctl control03.ctl 4. wyedytować plik PFILE a. emacs /tmp/pfile.ora b. CONTROL_FILES= '/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl', '/u01/app/oracle/oradata/orcl/control03.ctl' 5. Ponownie uruchomić bazę z użyciem pliku PFILE i powrócić do korzystania z SPFILE. a. STARTUP PFILE='/tmp/pfile.ora' b. CREATE SPFILE FROM PFILE='/tmp/pfile.ora' c. SHUTDOWN IMMEDIATE; d. STARTUP; Jeśli wszystkie operacje zostały wykonane z sukcesem to od tej pory baza będzie zapisywać wszystkie zmiany do 3 plików kontrolnych. Strona: 3 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
Tryb ARCHIVELOG Tryb Archivelog jest specjalnym trybem pracy bazy danych ponieważ redo logi są archiwizowane przez proces ARCH. Jeśli baza działa w tym trybie to możliwe jest wykonywanie kopii bezpieczeństwa podczas działania bazy danych (Online backup), a także w razie utraty plików danych możliwe jest odtworzenie bazy danych dokładnie do punktu w czasie sprzed awarii (complete recovery). Są jednak i takie przypadki, że nie da się odtworzyć zawartości bazy dokładnie sprzed awarii, a tylko do pewnego punktu w czasie (point in time recovery). Aby włączyć bazę danych w trybie Archivelog należy: 1. Sprawdzić aktualne wartości i w razie potrzeby ustawić miejsce składowania kopii bezpieczeństwa w tym również archiwalnych redo logów, a także rozmiar tej przestrzeni: a. SHOW PARAMETER DB_RECOVERY_FILE_DEST; b. ALTER SYSTEM SET DB_RECOVERY_FILE_DEST= '/u01/app/oracle/flash_recovery_area' SCOPE=BOTH; c. SHOW PARAMETER DB_RECOVERY_FILE_DEST_SIZE d. ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=2G SCOPE=BOTH; 2. Domyślne miejsce składowania archiwalnych redo logów wskazuje na parametr DB_RECOVERY_FILE_DEST, ale można ustawić dodatkowe miejsce w przypadku chęci zwielokrotnienia tych samych kopii archiwalnych redo logów np: a. SHOW PARAMETER LOG_ARCHIVE_DEST_1 b. ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archivelogs'; 3. Sprawdzić i ewentualnie ustawić format nazw plików archiwalnych redo logów w parametrze: a. SHOW PARAMETER LOG_ARCHIVE_FORMAT b. ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.dbf' SCOPE=SPFILE; 4. Ostatecznie przełączyć bazę w tryb ARCHIVELOG a. SHUTDOWN IMMEDIATE; b. STARTUP MOUNT; c. ALTER DATABASE ARCHIVELOG; d. ALTER DATABASE OPEN; Następnie można wymusić przełączenie aktualnej grupy redo logów i w ten sposób archiwizację poprzedniej do wskazanej lokalizacji: ALTER SYSTEM SWITCH LOGFILE; Ilość procesów archiwizujących redo logi jest określana parametrem: LOG_ARCHIVE_MAX_PROCESSES i zmieniana: ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3; Strona: 4 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
W systemie operacyjnym Linux procesy archiwizatora ora_arcn czyli ora_arc0, ora_arc1, itd. można zidentyfikować poleceniem: ps aux grep ora_ Ostatecznie tryb w jakim pracuje baza danych da się odczytać w kolumnie LOG_MODE perspektywy V$DATABASE: SELECT LOG_MODE FROM V$DATABASE; LOG_MODE ARCHIVELOG Strona: 5 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
Ćwiczenia Kopie bezpieczeństwa i odtwarzanie w bazie Oracle 11g Ćwiczenie nr 1 Przygotowanie bazy do wykonywania kopii bezpieczeństwa i odtwarzania 1. Sprawdzić konfigurację instancji bazy danych w następujących obszarach: a. ilość plików kontrolnych b. ilość grup redo logów c. ilość plików w pojedynczej grupie redo d. parametry inicjalizacyjne: i. DB_RECOVERY_FILE_DEST ii. DB_RECOVERY_FILE_DEST_SIZE iii. LOG_ARCHIVE_FORMAT e. tryb pracy bazy: NOARCHIVELOG czy ARCHIVELOG? f. Ustawić parametr DB_RECOVERY_FILE_DEST_SIZE na wartość 2G; 2. Dodać kolejny plik kontrolny do istniejących w bazie 3. Dodać do każdej grupy redo logów dodatkową kopię (członka grupy) 4. Przełączyć instancję bazy w tryb ARCHIVELOG Strona: 6 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
Odpowiedzi Kopie bezpieczeństwa i odtwarzanie w bazie Oracle 11g Ćwiczenie nr 1 1. Sprawdzić konfigurację instancji bazy danych w następujących obszarach: a. SHOW PARAMETER CONTROL_FILES; b. SELECT GROUP# FROM V$LOG; c. SELECT GROUP#, STATUS, MEMBER FROM V$LOGFILE ORDER BY GROUP#; d. Parametry i. SHOW PARAMETER DB_RECOVERY_FILE_DEST ii. SHOW PARAMETER DB_RECOVERY_FILE_DEST_SIZE iii. SHOW PARAMETER LOG_ARCHIVE_FORMAT e. SELECT LOG_MODE FROM V$DATABASE; f. ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=2G SCOPE=BOTH; 2. Dodać kolejny plik kontrolny do istniejących w bazie a. SHUTDOWN IMMEDIATE; d b. CREATE PFILE='/tmp/pfile.ora' FROM SPFILE c. emacs /tmp/pfile.ora d. zmodyfikować parameter *.control_files i. *.control_files='/u01/app/oracle/oradata/orcl/control0 1.ctl','/u01/app/oracle/flash_recovery_area/orcl/contr ol02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl' e. skopiować istniejący plik kontrolny do nowej lokalizacji i. cd /u01/app/oracle/oradata/orcl/ ii. cp control01.ctl control03.ctl f. STARTUP PFILE='/tmp/pfile.ora' g. CREATE SPFILE FROM PFILE='/tmp/pfile.ora' h. SHOW PARAMETER CONTROL_FILES 3. Dodać do każdej grupy redo logów dodatkową kopię (członka grupy) a. ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo01-1.log' TO GROUP 1; b. ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo02-1.log' TO GROUP 2; c. ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo03-1.log' TO GROUP 3; 4. Przełączyć instancję bazy w tryb ARCHIVELOG a. ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/app/oracle/flash_recovery_area' SCOPE=BOTH; b. ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=2G SCOPE=BOTH; c. SHUTDOWN IMMEDIATE; Strona: 7 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9
d. STARTUP MOUNT; e. ALTER DATABASE ARCHIVELOG; f. ALTER DATABASE OPEN; Strona: 8 Administracja bazą Oracle 11g Studia Podyplomowe SGGW Laboratorium nr 9