Archiwizowanie i odtwarzanie bazy danych z wykorzystaniem programu Recovery Manager (część II)

Robert Wrembel
Instytut Informatyki Politechniki Poznańskiej
e-mail: Robert.Wrembel@cs.put.poznan.pl

Niniejszy artykuł stanowi kontynuację artykułu zamieszczonego w poprzednim
numerze PLOUG’tek. Część pierwsza dotyczyła ogólnej architektury systemu
wykorzystującego RMANa, sposobów pracy w środowisku
programu RMAN, rodzajów kopii bezpieczeństwa bazy danych, jakie oferuje Recovery Manager oraz kanałom komunikacyjnym i skryptom
składowanym. Natomiast w części drugiej artykułu, w punkcie szóstym i siódmym
zostaną omówione techniki sporządzania kopii archiwalnych bazy danych, punkt ósmy
będzie prezentował katalog odtwarzania, a dziewiąty – sposoby wyszukiwania informacji z
tego katalogu.

6. Kopie plików

Za pomocą Recovery Managera można tworzyć kopie m.in. plików danych,
zarchiwizowanych plików dziennika powtórzeń, plików kontrolnych. Sposoby tworzenia
tych kopii zostaną omówione poniżej.

6.1. Kopie plików danych

Do sporządzania kopii plików danych służy polecenie copy, którego
podstawowa składnia została przedstawiona poniżej:

copy [level 0]
         datafile plik to <nazwa kopii>
                 [tag=nazwa_opisowa] [nochecksum]
...
[, datafile plik to <nazwa kopii> 
                 [tag=nazwa_opisowa] [nochecksum] ];

gdzie:

level 0 umożliwia utworzenie inkrementalnej kopii pliku poziomu zerowego;
wyspecyfikowanie innego poziomu niż zerowy zakończy się błędem:

RMAN-06011: invalid level specified: 

plik oznacza nazwę lub numer kopiowanego pliku; numer ten można odczytać zadając
zapytanie do perspektywy katalogu odtwarzania RC_DATAFILE lub dynamicznej tabeli
systemowej V$DATAFILE, np.

select file#, name from rc_datafile;
select file#, name from v$datafile;

tag umożliwia nadanie kopii pliku nazwy opisowej (do 30 znaków);

nochecksum powoduje, że sumy kontrolne bloków danych kopiowanego pliku nie
będą obliczane; domyślnie proces usługowy Oracle kopiując plik oblicza sumy
kontrolne.

Przykładowo, poniższe polecenie tworzy kopie plików o nazwach lab_dane1.dbf i
lab_dane2.dbf, poziomu zerowego i zapisuje je do odpowiednio do plików lab_dane1.bak
i lab_dane2.bak, w katalogu d:dysk4archiwum. Każdej z kopii nadano nazwę
opisową (parametr tag).

run {
       allocate channel k1 type disk;
       copy level 0 
        datafile <d:dysk1lablab_dane1.dbf> to 
                 <d:dysk4archiwumlab_dane1.bak> tag="dane1 28.08.99",
        datafile <d:dysk1lablab_dane2.dbf> to 
                 <d:dysk4archiwumlab_dane2.bak> tag="dane2 28.98.99";
       release channel k1;
}

6.2. Kopie zarchiwizowanych plików dziennika powtórzeń
Do sporządzania kopii zarchiwizowanych plików dziennika powtórzeń służy
polecenie copy, którego podstawowa składnia została przedstawiona poniżej:

copy
           archivelog <nazwa_pliku> to <nazwa kopii> [nochecksum]
           ...
           [, archivelog <nazwa_pliku> to <nazwa kopii> nochecksum]];

Poniższe polecenie tworzy kopie dwóch zarchiwizowanych plików dziennika powtórzeń
i kopię pliku danych o numerze 5. Dodatkowo, kopia pliku danych otrzymała nazwę
opisową tablesp_reccat.

run {
       allocate channel k1 type disk;
       archivelog <d:dysk3logarcharch104.arc> to 
                            <d:dysk4archiwumlogiarch104.bak>,
       archivelog <d:dysk3logarcharch105.arc> to
                            <d:dysk4archiwumlogiarch105.bak>, 
       copy datafile 5 to <d:dysk4archiwumlab_reccat.bak> 
                                  tag = tablesp_reccat;
}

6.3. Kopie plików kontrolnych

Do sporządzania kopii pliku kontrolnego służy polecenie copy, którego
podstawowa składnia została przedstawiona poniżej:

copy current controlfile to <nazwa kopii>;

Przykładowo, poniższe polecenie tworzy kopię bieżącego pliku kontrolnego i
zapisuje ją jako ctrl_280899.bak.

run {
      allocate channel k1 type disk;
      copy current controlfile to <d:dysk4archiwumctrl_200899.bak>;
      release channel k1;
}

6.4. Zrównoleglenie operacji sporządzania kopii

Standardowo, każda operacja kopiowania jest wykonywana sekwencyjnie, można jednak
zrównoleglić wiele takich operacji. Realizuje się to przez przydzielenie n
kanałów i wyspecyfikowanie n plików w jednym poleceniu copy.
Jako przykład rozważmy poniższe polecenie copy, w którym równolegle są
tworzone kopie trzech plików. Przed rozpoczęciem kopiowania są przydzielane trzy
kanały – każdy dla jednego kopiowanego pliku. Następnie, w jednym poleceniu copy
zostały wyspecyfikowane trzy pliki. Drugie polecenie copy zostanie wykonane
dopiero po zakończeniu polecenia je poprzedzającego.

run {
      allocate channel k1 type disk;
      allocate channel k2 type disk;
      allocate channel k3 type disk;
      copy     datafile 3 to <d:dysk4archiwumc_users.bak>,
               datafile 4 to <d:dysk4archiwumc_stff.bak>,
               datafile 5 to <d:dysk4archiwumc_tools.bak>;
      copy     datafile 6 to <d:dysk4archiwumc_tools1.bak>;
}

Uwaga: w każdym z omówionych wyżej przykładów wyspecyfikowanie nazwy pliku
docelowego powoduje zastąpienie istniejącego pliku nowym plikiem o takiej samej nazwie.

7. Zbiory archiwalne

Do sporządzania zbiorów archiwalnych (ang. backup sets) służy polecenie backup.
Za jego pomocą można archiwizować:

  • całą bazę danych w sposób pełny, inkrementalny, inkrementalny-kumulacyjny,
  • wybrane przestrzenie tabel w sposób pełny, inkrementalny, inkrementalny-kumulacyjny,
  • wybrane pliki danych w sposób pełny, inkrementalny, inkrementalny-kumulacyjny,
  • pliki kontrolne,
  • pliki dziennika powtórzeń zarchiwizowane wcześniej przez proces ARCH.

Każdy z powyższych sposobów zostanie omówiony w niniejszym punkcie.

7.1. Pełny zbiór archiwalny bazy danych

Podstawowa składnia polecenia backup archiwizującego całą bazę danych jest
następująca:

backup	[full]
        [nochecksum]
        [filesperset = n]
        format <opis formatu>
        [channel id_kanału]
        [tag = <nazwa opisowa>]
        [skip offline | readonly | inaccessible]
        (database);

gdzie:

full powoduje utworzenie pełnej kopii archiwalnej; jest to domyślny sposób
archiwizowania;
nochecksum wyłącza sprawdzanie sum kontrolnych dla archiwizowanych bloków
danych;
filesperset określa maksymalną liczbę archiwizowanych plików, która zostanie
umieszczona w jednym zbiorze archiwalnym;
format opis_formatu określa nazwę katalogu, do którego trafią pliki
zbioru archiwalnego i nazwy tych plików; w nazwach plików mogą wystąpić następujące
parametry:

  • %s numer zbioru archiwalnego, numer ten jest zwiększany o 1 dla każdego nowego
    zbioru;
  • %p numer części zbioru archiwalnego; numer ten dla każdego zbioru rozpoczyna
    się od 1 i jest zwiększany o jeden dla każdej nowej części zbioru archiwalnego;
  • %d nazwa zabezpieczanej bazy danych;
  • %t znacznik czasowy zbioru archiwalnego;
  • %n nazwa bazy danych uzupełniona znakami <X>, których liczba jest
    zależna od systemu operacyjnego;
  • %u nazwa składająca się z ośmiu znaków będących konkatenacją numeru
    zbioru i znacznika czasowego;

Przykładowy format plików zbiorów archiwalnych zawierający wszystkie dopuszczalne
parametry i przykładowa nazwa powstałego pliku zostały przedstawione na rysunku 5.

rys5.gif (4145 bytes)

Rys. 5. Przykład konstruowania formatu plików zbiorów archiwalnych

channel wskazuje kanał, który zostanie wykorzystany do sporządzenia zbioru
archiwalnego;
tag umożliwia nadanie nazwy opisowej zbiorowi archiwalnemu (do 30 znaków); nazwa
ta może być jednowyrazowa lub wielowyrazowa; w tym ostatnim przypadku musi być ujęta w
apostrofy lub cudzysłowy; nazwy opisowe mogą być wykorzystywane w poleceniach list,
restore, switch
; wiele zestawów może mieć taką samą nazwę opisową – w takim
przypadku RMAN wybiera zawsze zestaw sporządzony jako ostatni;
skip wskazuje pliki, które nie zostaną zarchiwizowane; może przyjąć jedną z
trzech wartości: offline¸ readonly, inaccessible wskazujących odpowiednio pliki
wyłączone (ang. offline), pliki tylko do odczytu (ang. read only), pliki niedostępne w
danej chwili;
database umożliwia zarchiwizowanie wszystkich plików danych.

W jednym zbiorze archiwalnym domyślnie są
umieszczane wszystkie archiwizowane pliki. Liczbę tych plików można jednak ograniczyć
za pomocą opisanego wyżej parametru filesperset. Poszczególne pliki umieszczone
w tym samym zbiorze są multipleksowane. Oznacza to, że bloki danych należące do
poszczególnych plików są przemieszane w jednym wyjściowym pliku zbioru archiwalnego.
Przykładowo, przyjmijmy, że parametr filesperset przyjmuje wartość 2. Wówczas
najpierw jest zapisywanych n bloków pierwszego pliku, następnie n
bloków drugiego pliku. Następnie jest zapisywane kolejne n bloków pliku
pierwszego, drugiego itp.

Utworzenie pełnego zbioru archiwalnego całej bazy danych zostanie zilustrowane
przykładem, w którym poniższe polecenia będą dokonywać zapisu na dysku (type disk).
Pliki kopii bezpieczeństwa będą otrzymywały nazwy zawierające: ciąg znaków dbincr0_,
numer zbioru archiwalnego (%s), numer części zbioru (%p) i nazwę
zabezpieczanej bazy danych (%d). W każdym pliku kopii będą multipleksowane
maksymalnie dwa pliki bazy danych (filesperset 2). Kopia
bezpieczeństwa obejmie całą bazę danych (database). Ponieważ sporządzana
będzie również kopia przestrzeni tabel SYSTEM, więc do zbioru archiwalnego
zostanie automatycznie dołączony plik kontrolny. Jeżeli baza danych składa się z sześciu plików danych, to zostaną
utworzone cztery zbiory archiwalne, a nie trzy, ponieważ do zbioru zostanie dodatkowo
włączony plik kontrolny. Trzy z nich będą zawierały po dwa zarchiwizowane pliki, a
czwarty – będzie zawierał jeden zarchiwizowany plik.

RMAN> run {
2>      allocate channel k1 type disk;
3>      backup
4>             filesperset 2
5>             format <d:dysk4archiwumdbincr0_%s_%p_%d>
6>             (database);
7>   }
RMAN-03022: compiling command: allocate
RMAN-03023: executing command: allocate
RMAN-08030: allocated channel: k1
RMAN-08500: channel k1: sid=8 devtype=DISK
RMAN-03022: compiling command: backup
RMAN-03023: executing command: backup
RMAN-08008: channel k1: starting datafile backupset
RMAN-08502: set_count=12 set_stamp=374502139
RMAN-08010: channel k1: including datafile 2 in backupset
RMAN-08010: channel k1: including datafile 3 in backupset
RMAN-08013: channel k1: piece 1 created
RMAN-08503: piece handle=D:DYSK4ARCHIWUMDBINCR0_12_1_LAB comment=NONE
RMAN-08008: channel k1: starting datafile backupset
RMAN-08502: set_count=13 set_stamp=374502148
RMAN-08010: channel k1: including datafile 6 in backupset
RMAN-08010: channel k1: including datafile 4 in backupset
RMAN-08013: channel k1: piece 1 created
RMAN-08503: piece handle=D:DYSK4ARCHIWUMDBINCR0_13_1_LAB comment=NONE
RMAN-08008: channel k1: starting datafile backupset
RMAN-08502: set_count=14 set_stamp=374502165
RMAN-08010: channel k1: including datafile 1 in backupset
RMAN-08011: channel k1: including current controlfile in backupset
RMAN-08013: channel k1: piece 1 created
RMAN-08503: piece handle=D:DYSK4ARCHIWUMDBINCR0_14_1_LAB comment=NONE
RMAN-08008: channel k1: starting datafile backupset
RMAN-08502: set_count=15 set_stamp=374502199
RMAN-08010: channel k1: including datafile 5 in backupset
RMAN-08013: channel k1: piece 1 created
RMAN-08503: piece handle=D:DYSK4ARCHIWUMDBINCR0_15_1_LAB comment=NONE
RMAN-08031: released channel: k1
Recovery Manager complete.

Uwaga: jeżeli baza danych pracuje w trybie bez archiwizacji plików dziennika
powtórzeń, wówczas pełną kopię archiwalną tej bazy można wykonać gdy jest ona
zamontowana (nie otwarta).

7.2. Inkrementalny zbiór archiwalny bazy danych

Podstawowa składnia polecenia backup archiwizującego całą bazę danych w
sposób inkrementalny jest następująca:

backup	incremental level = nr_poziomu [cumulative]
        [nochecksum]
        [filesperset = n]
        format <opis formatu>
        [channel id_kanału]
        [tag = <nazwa opisowa>]
        [skip offline | readonly | inaccessible]
        (database);

gdzie:
incremental level powoduje utworzenie kopii inkrementalnej poziomu wskazanego
numerem; RMAN dostarczany z SZBD Oracle8, wer. 8.0.5.0.0 umożliwia
specyfikowanie poziomów 0, 1, 2, 3 i 4; wyspecyfikowanie poziomu spoza tego zakresu
zakończy się błędem:

RMAN-20270: invalid incremental backup level

cumulative powoduje utworzenie kopii inkrementalnej-kumulacyjnej wskazanego
poziomu; cumulative można wykorzystywać tylko dla kopii inkrementalnych.
Poniższy przykład ilustruje sposób tworzenia zbioru inkrementalnego poziomu 0 całej
bazy danych.

run {
        allocate channel k1 type disk;
        backup incremental level=0
        format = <d:dysk4archiwumincr0_%d_%s_%p.bak>
        database;
}

Natomiast przykładowy sposób tworzenia zbioru inkrementalnego-kumulacyjnego poziomu 1
całej bazy danych został przedstawiony poniżej:

run {
        allocate channel k1 type disk;
        backup incremental level=1 cumulative
        format = <d:dysk4archiwumincr1c_%d_%s_%p.bak>
        database;
}

7.3. Archiwizowanie wybranych przestrzeni tabel

Podstawowa składnia polecenia backup archiwizującego wybrane przestrzenie
tabel jest następująca:

backup	[full]|[incremental level = nr_poziomu [cumulative] ]
        [nochecksum]
        [filesperset = n]
        format <opis formatu>
        [channel id_kanału]
        [tag = <nazwa opisowa>]
        (tablespace przestrzeń1, ..., przestrzeńn)
        [current controlfile];

gdzie:
tablespace umożliwia zarchiwizowanie wszystkich plików należących do wskazanej
przestrzeni tabel; przestrzeń tę można wskazać nazwą lub numerem;
numery przestrzeni tabel są zapisane w katalogu odtwarzania i słowniku danych; numer ten
można odczytać wydając zapytanie do perspektywy katalogu odtwarzania RC_TABLESPACE
lub dynamicznej tabeli systemowej V$TABLESPACE, np.:

select ts#, name from rc_tablespace;
select ts#, name from v$tablespace;

current controlfile powoduje włączenie pliku kontrolnego do zbioru
archiwalnego.

Poniższy przykład ilustruje sposób tworzenia zbioru archiwalnego zawierającego dwie
przestrzenie tabel o nazwach: LAB_DANE i LAB_RECCAT. Zbiór ten otrzymuje
nazwę opisową (tag) tblsp_dane_reccat.

run {
        allocate channel k1 type disk;
        backup 
        format = <d:dysk4archiwumtblsp_lab_dane_%s_%p>
        tag = tblsp_dane_reccat
        tablespace LAB_DANE, LAB_RECCAT;
        release channel k1;
}

7.4. Archiwizowanie wybranych plików danych

Podstawowa składnia polecenia backup archiwizującego wybrane pliki danych jest
następująca:

backup	[full]|[incremental level = nr_poziomu [cumulative] ]
        [nochecksum]
        [filesperset = n]
        format <opis formatu>
        [channel id_kanału]
        [tag = <nazwa opisowa>]
        (datafile plik1, ..., plikn)
        [current controlfile];

gdzie:
datafile umożliwia zarchiwizowanie pliku danych wskazanego numerem lub nazwą.

Poniższy przykład ilustruje sposób archiwizowania wybranych plików danych w zbiorze
archiwalnym. Najpierw są alokowane dwa kanały umożliwiające równoległy zapis na dwie
taśmy. Następnie jest tworzony zbiór archiwalny plików danych. Do każdego z kanałów
zostały jawnie przydzielone określone pliki danych. Każdy z plików wyjściowych
otrzymuje nazwę opisową (tag). Dodatkowo, jest również archiwizowany bieżący
plik kontrolny.
Jawne przydzielenie plików do kanałów ma na celu zrównoważenie obciążenia obu
kanałów. Pliki należy przydzielać do kanałów w taki sposób, aby suma ich rozmiarów
była podobna.

run {
allocate channel k1 type <SBT_TABPE>;
allocate channel k2 type <SBT_TABPE>;
backup full 
         filesperset 2
         format <d:dysk4archiwumdf.%s.%p>
         (datafile 1, 3 channel k1 tag=plik1i3)
         (datafile 2, 4 channel k2 tag=pliki2i4)
         (current controlfile);
release channel k1;
release channel k2;
}

7.5. Archiwizowanie pliku kontrolnego

Podstawowa składnia polecenia backup archiwizującego plik kontrolny jest
następująca:

backup
        format <opis formatu>
        [channel id_kanału]
        [tag = <nazwa opisowa>]
        scurrent controlfile;

Poniższy przykład ilustruje sposób zapisania w zbiorze archiwalnym bieżącego pliku kontrolnego.

run {
        allocate channel k1 type disk;
        backup
                format <ctrl%t.bak>
                current controlfile;
}

7.6. Zbiory archiwalne zawierające zarchiwizowane pliki dziennika
powtórzeń

Zbiory takie mogą zawierać wyłącznie zarchiwizowane pliki dziennika powtórzeń i
są zawsze wykonywane jako kopie pełne. Podstawowa składnia polecenia jest
następująca:

backup
        [filesperset = n]
        format <opis formatu>
        [channel id_kanału]
        archivelog        all |
                like <wzorzec nazwy> |
                until time <czas> |
                from time <czas> until time <czas> |
                until scn nrSCN |
                from scn nrSCN until scn nrSCN |
                from logseq = n until logseq = n thread = wątek
[delete input];

Słowo kluczowe all umożliwia umieszczenie w zbiorze archiwalnym wszystkich
zarchiwizowanych plików dziennika powtórzeń, natomiast like włącza do zbioru
te pliki, których nazwa pasuje do podanego wzorca. We wzorcu można stosować znaki %
(procent) i _ (podkreślenie). Możliwe jest również włączenie do zbioru archiwalnego
plików dziennika, które zostały utworzone przed
wskazanym momentem czasowym (słowa kluczowe until time) lub między dwoma podanymi
czasami (słowa kluczowe from time … until time). W każdym przypadku moment
czasowy określa się w formacie zależnym od wartości zmiennej systemowej NLS_DATE_FORMAT.

Przykładowo, poniższe polecenia umożliwiają umieszczenie w zbiorze archiwalnym
wszystkich zarchiwizowanych plików dziennika powtórzeń, które powstały w ciągu
ostatnich dwóch dni.

run {
        allocate channel k1 type disk;
        backup
           filesperset 20
           format <d:dysk4archiwumlogiarch_%s_%p_%t>
           (archivelog from time <sysdate-1> all);
release channel k1;
}

Jako kolejny przykład rozważmy polecenia włączające do zbioru archiwalnego
zarchiwizowane pliki dziennika powtórzeń, które zostały utworzone 27 sierpnia 1999
roku, między 17:00 (from time), a 18:55 (until time). Wartość zmiennej
systemowej NLS_DATE_FORMAT została wcześniej określona na <YYYY-MM-DD:HH24:MI:SS>.

run {
        allocate channel k1 type disk;
        backup filesperset 10
        format <d:dysk4archiwumlogiod17_00do18_55>
        archivelog 
           from time <1999:08:27:17:00:00> 
           until time <1999:08:27:18:55:00>;
        release channel k1;
}

Zarchiwizowane pliki dziennika można również wskazać posługując się numerami SCN
(por. WJZ99) (słowa kluczowe from scn i until scn) lub numerami
sekwencyjnymi (słowa kluczowe from logseq … until logseq). W tym ostatnim
przypadku należy dodatkowo wskazać wątek (ang. thread) za pomocą słowa kluczowego thread.
Jeżeli w poleceniu backup … archivelog zostanie użyta klauzula delete input
wówczas po umieszczeniu w zbiorze archiwalnym, pliki dziennika zostaną fizycznie
usunięte z dysku.
Jako przykład rozważmy poniższe polecenia, które umieszczają w zbiorze archiwalnym
zarchiwizowane pliki dziennika powtórzeń o numerach sekwencyjnych z przedziału od 100 (from
logseq
= 100) do 120 (until logseq = 120). Konieczne jest
wskazanie wątku (słowo kluczowe thread). Dla bazy danych nie pracującej w
konfiguracji serwera wielowątkowego (ang. multithreated server) wartość podana po tym
słowie wynosi 1. W każdej części archiwalnej ma
się znaleźć 20 plików (filesperset 20). Dodatkowo, po zarchiwizowaniu w
zbiorze, pliki te mają zostać fizycznie usunięte z dysku (delete input).

run {
        allocate channel k1 type disk;
        backup
                filesperset 20
                format <d:dysk4archiwumlogiarch_%s_%p_%t>
                (archivelog from logseq=100 until logseq=120 thread=1
                delete input);
        release channel k1;
}

Informacje na temat zarchiwizowanych plików dziennika powtórzeń można uzyskać
wydając odpowiednie zapytanie do dynamicznej tabeli systemowej V$ARCHIVED_LOG.
Tabela ta udostępnia m.in. następujące informacje:

  • nazwę zarchiwizowanego pliku dziennika powtórzeń (atrybut name),
  • numer sekwencyjny pliku (atrybut sequence#),
  • czy plik po włączeniu do zbioru archiwalnego został fizycznie usunięty (atrybut del),
  • czas zakończenia archiwizowania pliku przez proces ARCH (atrybut completion_time),
  • początkowy numer SCN związany z transakcją zapisaną w danym pliku dziennika
    (atrybut first_change#),
  • końcowy numer SCN związany z transakcją zapisaną w danym pliku dziennika
    (atrybut next_change#).

Poniżej przedstawiono przykładowe zapytanie do dynamicznej tabeli V$ARCHIVED_LOG
i fragment jego wyniku.

SQL> select name, sequence#, archived, deleted, completion_time,
  2> first_change#, next_change#
  3> from v$archived_log;
NAME
SEQUENCE#
ARC
DEL
COMPLETION_TIME
FIRST_CHANGE#
NEXT_CHANGE#

D:DYSK3LOGARCHARCH141.ARC
141
YES
NO
1999-08-27:12:40:43
14415
14416
D:DYSK3LOGARCHARCH142.ARC
142
YES
NO
1999-08-27:12:40:44
14416
14417
D:DYSK3LOGARCHARCH153.ARC
153
YES
YES
1999-08-27:15:27:52
14473
14495
D:DYSK3LOGARCHARCH154.ARC
154
YES
YES
1999-08-27:15:27:54
14495
14496
D:DYSK3LOGARCHARCH155.ARC
155
YES
YES
1999-08-27:15:27:56
14496
14497

Wartości atrybutów first_change# i next_change# są wykorzystywane do
określania wartości słów kluczowych from scn i until scn.

8. Katalog odtwarzania

8.1. Katalogowanie archiwalnych kopii plików – polecenie catalog

Kopie plików danych, plików kontrolnych lub zarchiwizowanych plików dziennika
powtórzeń wykonane za pomocą poleceń systemu operacyjnego (tj. z pominięciem RMANa)
nie są rozpoznawane przez Recovery Managera do momentu skatalogowania takich
kopii. Skatalogowanie polega na zapisaniu informacji o kopiach plików w katalogu
odtwarzania. Służy do tego celu polecenie catalog o następującej składni:

catalog	datafilecopy nazwa_pliku [tag=nazwa_opisowa] [level=0]|
        controlfilecopy nazwa_pliku [tag=nazwa_opisowa] [level=0]|
        archivelog nazwa_pliku [tag=nazwa_opisowa] [level=0];

gdzie:
datafilecopy umożliwia skatalogowanie plików danych wskazanych nazwą,
controlfilecopy umożliwia skatalogowanie plików kontrolnych,
archivelog umożliwia skatalogowanie
zarchiwizowanych plików dziennika powtórzeń,
tag umożliwia nadanie nazwy opisowej skatalogowanemu plikowi (do 30 znaków),
level 0 oznacza, że skatalogowany plik danych stanowi część inkrementalnej kopii archiwalnej poziomu 0.

Przykładowo, poniższe polecenie umożliwia skatalogowanie kopii archiwalnej pliku
kontrolnego utworzonej za pomocą polecenia: alter database backup controlfile to <d:dysk4archiwumctrl_300899.bak>;

RMAN> catalog controlfilecopy <d:dysk4archiwumctrl300899.bak>;

Kolejny przykład ilustruje sposób zarchiwizowania przestrzeni tabel dla otwartej bazy
danych i skatalogowania pliku tej przestrzeni.

SVRMGR> alter tablespace LAB_USERS begin backup;
SVRMGR> !copy d:dysk1labLAB_users.dbf e:backuplabdysk1LAB_users.dbf
SVRMGR> alter tablespace LAB_USERS end backup;
RMAN> catalog datafilecopy <e:backuplabdysk1LAB_users.dbf>;

8.2. Zmiana zawartości katalogu odtwarzania – polecenie change

Polecenie change służy m.in. do uaktualniania zawartości katalogu odtwarzania
w przypadku, gdy pliki należące do zbiorów archiwalnych i kopii plików zostały
fizycznie usunięte lub przeniesione do innego katalogu za pomocą poleceń systemu
operacyjnego. Najczęściej polecenie to wykorzystuje się do:

  1. Usuwania z katalogu odtwarzania informacji o dostępnych częściach zbiorów
    archiwalnych, kopiach plików danych lub zarchiwizowanych plików dziennika powtórzeń
    (polecenie change … uncatalog).
  2. Usuwania z katalogu odtwarzania informacji o częściach zbiorów archiwalnych, kopiach
    plików danych lub zarchiwizowanych plików dziennika powtórzeń z jednoczesnym fizycznym
    usunięciem plików z dysku (polecenie change … delete).
  3. Weryfikacji zawartości katalogu odtwarzania z dostępnymi na dysku: plikami części
    zbiorów archiwalnych, kopiami plików danych, kopiami zarchiwizowanych plików dziennika
    powtórzeń (polecenie change … validate). W przypadku usunięcia części tych
    plików z poziomu systemu operacyjnego odpowiadające im zapisy w katalogu odtwarzania są
    usuwane.
  4. Zapisania w katalogu odtwarzania informacji na temat niedostępności części zbiorów
    archiwalnych, kopii plików danych lub zarchiwizowanych plików dziennika powtórzeń, bez
    fizycznego usuwania tych plików (polecenie change … unavailable).
  5. Udostępnienia tych części zbiorów archiwalnych, kopii plików danych lub
    zarchiwizowanych plików dziennika powtórzeń (polecenie change … available),
    które wcześniej uczyniono niedostępnymi za pomocą polecenia change … unavailable.

Podstawowa składnia polecenia change została przedstawiona poniżej.

change rodzaj_obiektu obiekt operacja;

gdzie:
rodzaj_obiektu określa rodzaj obiektu, którego dotyczy polecenie change;
może przyjąć m.in. jedną z następujących wartości: backupset, backuppiece,
datafilecopy, controlfilecopy, archivelog
;
obiekt wskazuje obiekt, którego dotyczy
polecenie change; obiekt może być wskazany nazwą, nazwą opisową poprzedzoną
słowem kluczowym tag, lub wartością kluczową;

Wartość kluczową można uzyskać wydając
polecenie list lub zapytanie do perspektywy katalogu odtwarzania RC_BACKUP_SET
(atrybut bs_key) dla zbiorów archiwalnych lub RC_BACKUP_PIECE (atrybut bp_key)
dla części zbiorów archiwalnych. Poniżej przedstawiono przykładowe zapytania do tych
perspektyw i fragmenty ich wyników.

SQL> select bs_key, backup_type, pieces, set_stamp, set_count
   2 from rc_backup_set order by 1;
BS_KEY 
B
PIECES
SET_STAMP
SET_COUNT

154 
D
1
374503405
16
155 
D
1
374503414
17
156 
D
3
374503431
18
157
D
1
374503472
19
SQL> select bp_key, recid, bs_key, tag, set_stamp, set_count
   2 from rc_backup_piece order by 3
BP_KEY
RECID
BS_KEY TAG
SET_STAMP
SET_COUNT

171
14
154
374503405
16
172
15
155
374503414
17
173
16
156
374503431
18
174
17
156
374503431
18
175
18
156
374503431
18
176
19
157
374503472
19
...
..
...
.........
..
391
34
389 LAB_DANE 28.08.99
374684045
37
398
35
396 LAB_DANE 28.08.99
374684079
38

operacja może przyjąć jedną z następujących wartości: available,
unavailable, validate, uncatalog
i delete.

Dla obiektu backupset możliwe są następujące operacje: available,
unavailable
i delete.

Przykładowo, poniższe polecenie usuwa z dysku i katalogu odtwarzania zbiór
archiwalny identyfikowany wartością klucza 154.

RMAN> change backupset 154 delete;
RMAN-03022: compiling command: change
RMAN-03023: executing command: change
RMAN-08073: deleted backup piece
RMAN-08517: backup piece handle=D:DYSK4ARCHIWUMDBINCR0_16_1_LAB recid=14 stamp=374503406
RMAN-03023: executing command: partial resync
RMAN-08003: starting partial resync of recovery catalog
RMAN-08005: partial resync complete

Dla obiektu backuppiece możliwe są następujące operacje: available,
unavailable
i delete.

Przykładowo, poniższe polecenie spowoduje, że część zbioru archiwalnego
identyfikowana nazwą opisową (tag) <LAB_DANE 28.08.99> stanie się
niedostępna.

RMAN> change backuppiece tag <LAB_DANE 28.08.99> unavailable;

Dla obiektu datafilecopy możliwe są następujące operacje: available,
unavailable, validate, uncatalog
i delete.

Przykładowo, w celu usunięcia z katalogu informacji o kopii pliku lab_dane.bak
należy wydać polecenie:

RMAN> change datafilecopy <d:dysk4archiwumlab_dane.bak> uncatalog;
RMAN-03022: compiling command: change
RMAN-06119: uncataloged datafile copy
RMAN-08513: datafile copy filename=D:DYSK4ARCHIWUMLAB_DANE.BAK recid=1 stamp=374686638

Specyfikując kopię pliku można się
posłużyć jego nazwą (jak w powyższym przykładzie) lub kluczem rekordu opisującego
tę kopię w katalogu odtwarzania. Wartość klucza (atrybut Key), dla każdej
kopii pliku można uzyskać wydając polecenie list, np.

RMAN> list copy of datafile <d:dysk1lablab_dane.dbf>;
RMAN-03022: compiling command: list
RMAN-06210: List of Datafile Copies
RMAN-06211: Key
File
S
Completion time
Ckp SCN
Ckp time
Name
RMAN-06212: ---
---
--
------------------
------
------------------
-----------------------------
RMAN-06213: 402
2
A
1999-08-28:15:37:18
14620
1999-08-28:15:37:14
D:DYSK4ARCHIWUMLAB_DANE.BAK
RMAN-06213: 429
2
A
1999-08-28:18:30:11
14656
1999-08-28:18:30:06
D:DYSK4ARCHIWUMLAB_DANE2.BAK

Usunięcie z katalogu odtwarzania informacji o pliku lab_dane2.bak będzie
miało wówczas postać:

RMAN> change datafilecopy 429 uncatalog;

Informacje na temat utworzonych kopii plików danych można również uzyskać zadając
pytanie do perspektywy katalogu odtwarzania RC_DATAFILE_COPY, np.:

SQL> select cdf_key, name, tag, file# from rc_datafile_copy;

gdzie, atrybut cdf_key jest kluczem identyfikującym kopię pliku danych.

Dla obiektu controlfilecopy możliwe są następujące operacje: available,
unavailable, validate, uncatalog
i delete.

Informacje o zarchiwizowanych plikach kontrolnych są dostępne za pomocą perspektywy
katalogu odtwarzania RC_CONTROLFILE_COPY, np.:

SQL> select ccf_key, name from rc_controlfile_copy;
 CCF_KEY NAME
------------ -------------------------------------
   440 D:DYSK4ARCHIWUMCRTL1.BAK

Poniższe polecenie powoduje usunięcie kopii pliku kontrolnego ctrl1.bak z
dysku i informacji o tym pliku z katalogu odtwarzania.

RMAN> change controlfilecopy <d:dysk4ARCHIWUMCRTL1.BAK> delete;

Uwaga: w SZBD Oracle8 wer. 8.0.5.0.0 kopie plików kontrolnych można
specyfikować wyłącznie za pomocą ich nazw.

Dla obiektu archivelog możliwe są następujące operacje: available,
unavailable, validate, uncatalog
i delete. Nazwy kopii zarchiwizowanych plików
dziennika powtórzeń można wyspecyfikować za pomocą parametrów opisanych w punktach
6.2 i 7.6. Przykładowo, poniższe polecenie usuwa z katalogu odtwarzania informacje o
plikach, których nazwy pasują do wzorca <ARCH00%.ARC>.

RMAN> change archivelog like <d:dysk3LOGARCHARCH00%.ARC> uncatalog;

Uwaga: w przypadku stosowania parametru like znaczenie ma wielkość
liter we wzorcu nazwy pliku.

Informacje na temat kopii plików dziennika powtórzeń zarejestrowanych w katalogu
odtwarzania są dostępne za pomocą perspektywy tego katalogu RC_ARCHIVED_LOG,
np.:

SQL> select al_key, name from rc_archived_log;

8.3. Synchronizacja katalogu odtwarzania – polecenie resync database

Polecenie synchronizujące zawartość katalogu odtwarzania z zawartością bieżącego
pliku kontrolnego ma następującą postać:

resync database;

Możliwe jest również zsynchronizowanie katalogu z kopią archiwalną pliku
kontrolnego za pomocą polecenia:

resync database from controlfilecopy <nazwa>;

9. Generowanie raportów

Do generowania raportów służą dwa polecenia RMANa, tj. report i list.

9.1. Polecenie report

Polecenie report umożliwia uzyskanie m.in. następujących informacji:

  • listy plików, które nie były archiwizowane przez zadaną liczbę dni,
  • listy plików, które do odtworzenia do bieżącego stanu wymagają co najmniej n kopii
    inkrementalnych;
  • listy plików archiwalnych, które są nadmiarowe, tzn. istnieje wiele kopii
    archiwalnych tego samego pliku;
  • listy plików których zawartość została zapisana z klauzulą unrecoverable;
  • struktury bazy danych (tj. przestrzeni tabel i plików, z których są one złożone) z
    wyspecyfikowanego momentu w przeszłości.

Jeżeli sesja RMANa korzysta z katalogu odtwarzania, wówczas polecenie report
korzysta z informacji w nim zapisanych. W przeciwnym przypadku polecenie report
korzysta z informacji przechowywanych w pliku kontrolnym zabezpieczanej
bazy danych.

9.1.1. Lista plików niearchiwizowanych przez zadaną liczbę dni

Podstawową składnię polecenia przedstawiono poniżej. Słowo kluczowe datafile
umożliwia sprawdzenie, czy plik o podanej nazwie lub numerze był archiwizowany w ciągu
ostatnich n dni. Słowo kluczowe tablespace umożliwia sprawdzenie, czy pliki
przestrzeni tabel wskazanej nazwą lub numerem były archiwizowane w ciągu ostatnich n
dni. Natomiast wyspecyfikowanie słowa kluczowego database powoduje wyświetlenie listy tych plików należących do bazy
danych, których nie zarchiwizowano w ciągu ostatnich n dni.

report need backup days n 
                datafile plik |
                tablespace przestrzeń_tabel |
                database;

Przykładowo, poniższe polecenie umożliwia wyświetlenie listy wszystkich tych
plików bazy danych, które nie były archiwizowane w ciągu ostatnich trzech dni:

RMAN> report need backup days 3 database;

9.1.2. Lista plików wymagających co najmniej n kopii inkrementalnych do
odtworzenia do bieżącego stanu

Podstawową składnię polecenia przedstawiono poniżej. Listę tę można uzyskać dla
plików wskazanej przestrzeni tabel (słowo kluczowe tablespace) lub całej bazy
danych (słowo kluczowe database). Natomiast słowo kluczowe datafile
umożliwia sprawdzenie, czy wskazany plik wymaga zaaplikowania co
najmniej n kopii inkrementalnych.

report need backup incremental n
                datafile plik |
                tablespace przestrzeń_tabel |
                database;

Przykładowo, poniższe polecenie umożliwia wyświetlenie listy wszystkich tych
plików bazy danych, których odtworzenie do stanu bieżącego wymaga zaaplikowania
zawartości co najmniej dwóch kopii inkrementalnych:

RMAN> report need backup incremental 2 database;

9.1.3. Lista nadmiarowych plików archiwalnych

Składnię polecenia przedstawiono poniżej.

report obsolete [redundancy = l_kopii];

Słowo kluczowe redundancy umożliwia określenie liczby kopii tego samego
pliku; wartością domyślną jest 1. Przykładowo, w celu sprawdzenia, czy istnieje trzy
lub więcej kopii archiwalnych tego samego pliku należy wydać polecenie:

RMAN> report obsolete redundancy = 3;

9.1.4. Lista plików zapisanych z klauzulą unrecoverable

Składnię polecenia przedstawiono poniżej. Słowa kluczowe datafile, tablespace
i database umożliwiają sprawdzenie, odpowiednio, czy wskazany plik, przestrzeń
tabel lub dowolne pliki bazy danych zawierają dane zapisane z klauzulą unrecoverable.
Plik lub przestrzenie tabel wskazuje się nazwą lub numerem.

report unrecoverable datafile plik |
                tablespace przestrzeń_tabel |
                database;

Przykładowo, poniższe polecenie umożliwia wyświetlenie listy wszystkich tych
plików bazy danych, których zawartość zapisano z klauzulą unrecoverable.

RMAN> report unrecoverable database;

9.1.5. Struktura bazy danych z wyspecyfikowanego momentu w przeszłości

Podstawowa składnia tego polecenia jest następująca:

report schema at time = data |
              at scn = numerSCN |
              at logseq = numer_dziennika;

Moment w przeszłości można wyspecyfikować na jeden z trzech sposobów:

  • podając datę (słowo kluczowe time) w formacie określonym zmienną systemową NLS_DATE_FORMAT,
    np. <YYYY-MM-DD:HH24:MI:SS>;
  • podając numer SCN (słowo kluczowe scn);
  • określając numer sekwencyjny dziennika powtórzeń (słowo kluczowe logseq).

Poniższe przykładowe polecenie umożliwia uzyskanie informacji na temat struktury
bazy danych z dnia 25 sierpnia, 1999, godziny 12:00. Wcześniej nadano zmiennej systemowej
NLS_DATE_FORMAT wartość <YYYY-MM-DD:HH24:MI:SS>.

RMAN> report schema at time <1999-08-25:12:00:00>;
RMAN-03022: compiling command: report
RMAN-06290: Report of database schema
RMAN-06291: File
K-bytes
Tablespace
RB segs
Name
RMAN-06292: -----
-------
----------
--------
---------------------------
RMAN-06293: 1
20480
SYSTEM
YES
D:DYSK1LABLABSYSTEM.DBF
RMAN-06293: 2
5120
LAB_DANE
NO
 D:DYSK1LABLAB_DANE.DBF
RMAN-06293: 3
5120
LAB_TEMP
NO
D:DYSK1LABLAB_TEMP.DBF
RMAN-06293: 4
5120
LAB_RBS
YES
D:DYSK1LABLAB_RBS.DBF
RMAN-06293: 5
20480
LAB_RECCAT
NO
D:DYSK1LABLAB_RECCAT.DBF
RMAN-06293: 6
10240
SYSTEM
YES
D:DYSK1LABLABSYSTEM1.DBF

9.2. Polecenie list

Polecenie list umożliwia uzyskanie informacji m.in. na temat:

  • wszystkich zbiorów archiwalnych zawierających wskazany plik,
  • wszystkich zbiorów archiwalnych zawierających pliki należące do wskazanej
    przestrzeni tabel,
  • wszystkich kopii wskazanych plików danych,
  • kopii tych plików danych, które należą do wskazanej przestrzeni tabel,
  • zbiorów archiwalnych zawierających wskazane zarchiwizowane pliki dziennika
    powtórzeń,
  • inkarnacji wybranej bazy danych.

Polecenie list korzysta z informacji przechowywanych w katalogu odtwarzania. Z
tego powodu może ono być wydawane dopiero po dołączeniu się do katalogu odtwarzania.

9.2.1. Lista zbiorów archiwalnych zawierających wskazany plik

Poniżej przedstawiono przykładowe polecenie wyświetlające listę wszystkich
zbiorów zawierających plik o nazwie lab_dane.dbf.

RMAN> list backupset of datafile <d:dysk1lablab_dane.dbf>;
RMAN-03022: compiling command: list
RMAN-06230: List of Datafile Backups
RMAN-06231:
Key
File
Type
LV
Completion_time
Ckp SCN
Ckp Time
RMAN-06232:
-----------
----
-----------------
---
----------------------
--------
---------------------
RMAN-06233:
141
2
Incremental
0
1999-08-26:10:43:59
14278
 1999-08-26:10:42:18
RMAN-06233:
145
2
Incremental
0
1999-08-26:11:03:08
14293
 1999-08-26:11:02:36
RMAN-06233:
149
2
Incremental
0
1999-08-26:12:17:45
14308
 1999-08-26:12:16:09
RMAN-06233:
150
2
Incremental
0
1999-08-26:12:22:24
14308
1999-08-26:12:16:09
RMAN-06233:
154
2
Incremental
0
1999-08-26:12:43:30
14308
 1999-08-26:12:16:09

9.2.2. Lista zbiorów archiwalnych zawierających pliki należące do wskazanej
przestrzeni tabel

Poniżej przedstawiono przykładowe polecenie wyświetlające listę wszystkich
zbiorów zawierających pliki przestrzeni tabel o nazwie LAB_DANE.

RMAN> list backupset of tablespace <LAB_DANE>;

9.2.3. Lista zbiorów archiwalnych zawierających wskazane zarchiwizowane pliki
dziennika powtórzeń

Podstawowa składnia polecenia list jest następująca:

list backupset of
        archivelog all |
                like <wzorzec nazwy>|
                until time <czas> |
                from time <czas> until time <czas> |
                until scn nrSCN |
                from scn nrSCN until scn nrSCN |
                from logseq = n until logseq = n thread = wątek;

Znaczenie parametrów powyższego polecenia jest takie samo, jak parametrów
dotyczących polecenia backup archivelog (por. punkt 7.6).

Poniżej przedstawiono polecenie wyświetlające listę zbiorów archiwalnych, w
których zapisano zarchiwizowane pliki dziennika powtórzeń zawierające zapisy o
numerach SCN z przedziału od 14532 do 14534.

RMAN> list backupset of archivelog from scn 14532 until scn 14534 ;

9.2.4. Lista kopii wskazanych plików danych

Poniżej przedstawiono przykładowe polecenia wyświetlające listę wszystkich kopii
pliku o nazwie lab_dane.dbf i pliku o numerze 3.

RMAN> list copy of datafile <d:dysk1lablab_dane.dbf>;
RMAN> list copy of datafile 3;

9.2.5. Lista kopii plików danych należących do wskazanej przestrzeni tabel

Poniżej przedstawiono przykładowe polecenie wyświetlające listę wszystkich kopii
plików przestrzeni tabel o nazwie LAB_DANE.

RMAN> list copy of tablespace <LAB_DANE>;

9.2.6. Lista inkarnacji wybranej bazy danych

Inkarnacja jest wersją bazy danych tworzoną w wyniku poprawnego odtworzenia bazy
danych do określonego momentu w przeszłości (por. punkt 11.3.2, części trzeciej
artykułu).

Poniższe przykładowe polecenie umożliwia wyświetlenie inkarnacji bazy danych o
nazwie LAB.

RMAN> list incarnation of database LAB;
RMAN-03022: compiling command: list
RMAN-06240: List of Database Incarnations
RMAN-06241: DB Key
Inc Key
DB Name
DB ID
CURReset 
SCN
Reset Time
RMAN-06242: ------
-------
-------
-----
--------
---
------------------
RMAN-06243: 1
 2
LAB
822167203
YES
 1
1999-08-24:21:39:47

Trzecia część artykułu dotycząca technik odtwarzania bazy danych z wykorzystaniem RMANa
i perspektyw katalogu odtwarzania zostanie zamieszczona w kolejnym numerze PLOUG’tek.

Bibliografia

[O8BaR] Oracle8 Backup and Recovery Guide, rel. 8.0
[Backup8] Velpuri R., Oracle8 Backup & Recovery Handbook, Osborne McGraw-Hill, 1998,
ISBN 0-07-882389-7

[Wre98] Wrembel R., Archiwizowanie danych i odtwarzanie bazy danych po awarii,
PLOUG’tki, numery 7/98, 8/98, 9/99
[WJZ99] Wrembel R., Jezierski J., Zakrzewicz M.: System Zarządzania Bazą Danych Oracle7
i Oracle8, Wydawnictwo NAKOM, Poznań, 1999, ISBN 83-86969-34-3