wykonujesz zimną kopię zapasową zarządzaną przez użytkownika, kopiując pliki po zamknięciu bazy danych. Ten typ kopii zapasowej jest również znany jako kopia offline. Twoja baza danych Oracle database 12c może działać w trybie noarchivelog lub archivelog podczas tworzenia zimnej kopii zapasowej.
bazy danych zazwyczaj traktują zimną kopię zapasową jako synonim kopii zapasowej bazy danych w trybie noarchivelog. To nieprawda. Możesz wykonać zimną kopię zapasową bazy danych w trybie archivelog, a to strategia tworzenia kopii zapasowych, którą stosuje wiele sklepów. Różnice pomiędzy cold backupem z bazą danych w trybie noarchivelog i w trybie archivelog są szczegółowo opisane w poniższych sekcjach.
Tworzenie zimnej kopii zapasowej bazy danych w trybie Noarchivelog
jednym z głównych powodów tworzenia zimnej kopii zapasowej bazy danych Oracle database 12c w trybie noarchivelog jest umożliwienie przywrócenia bazy danych do przeszłości. Tego typu kopii zapasowej należy używać tylko wtedy, gdy nie ma potrzeby odzyskiwania transakcji, które miały miejsce po wykonaniu kopii zapasowej. Ten rodzaj strategii tworzenia kopii zapasowych i odzyskiwania jest akceptowalny tylko wtedy, gdy wymagania biznesowe pozwalają na utratę danych i przestoje. Rzadko można wdrażać tego typu rozwiązanie do tworzenia kopii zapasowych i odzyskiwania dla bazy danych firmy produkcyjnej.
mimo to, istnieje kilka dobrych powodów, aby zaimplementować ten typ kopii zapasowej. Jednym z powszechnych zastosowań jest tworzenie zimnej kopii zapasowej bazy danych programistycznych/testowych/szkoleniowych i okresowe Resetowanie bazy danych z powrotem do bazy danych. Umożliwia to ponowne uruchomienie testu wydajności lub sesji treningowej z tą samą migawką bazy danych.
Wskazówka rozważ użycie funkcji bazy danych Flashback, aby ustawić bazę danych z powrotem do punktu w czasie w przeszłości.
przykład w tej sekcji pokazuje, jak wykonać kopię zapasową każdego krytycznego pliku w bazie danych: wszystkich plików kontrolnych, plików danych, tymczasowych plików danych i plików dziennika ponowienia online. Dzięki temu typowi kopii zapasowej możesz łatwo przywrócić bazę danych do momentu, w którym została wykonana kopia zapasowa. Głównymi zaletami tego podejścia jest to, że jest ono koncepcyjnie proste i łatwe do wdrożenia. Oto kroki wymagane do zimnej kopii zapasowej bazy danych w trybie noarchivelog:
- Określ, gdzie skopiować pliki kopii zapasowej i ile miejsca jest wymagane.
- Określ lokalizacje i nazwy plików bazy danych do skopiowania.
- Zamknij bazę danych za pomocą klauzuli natychmiastowej, transakcyjnej lub normalnej.
- skopiuj pliki (określone w Kroku 2) do lokalizacji kopii zapasowej (określonej w kroku 1).
- Uruchom ponownie bazę danych Oracle 12c.
poniższe sekcje opisują te kroki.
Krok 1. Określ, gdzie należy skopiować pliki kopii zapasowej i ile miejsca jest wymagane
Najlepiej, Aby lokalizacja kopii zapasowej znajdowała się na zestawie dysków oddzielonych od lokalizacji aktywnych plików danych. Jednak w wielu sklepach możesz nie mieć wyboru i możesz dowiedzieć się, które punkty montowania mają być używane przez bazę danych. W tym przykładzie lokalizacją kopii zapasowej jest katalog /U01/cbackup/O12C. Aby zorientować się, ile miejsca potrzeba do przechowywania jednej kopii zapasowej, możesz uruchomić to zapytanie:
select sum(sum_bytes)/1024/1024 m_bytesfrom(select sum(bytes) sum_bytes from v$datafileunionselect sum(bytes) sum_bytes from v$tempfileunionselect (sum(bytes) * members) sum_bytes from v$loggroup by members);
możesz sprawdzić, ile miejsca na dysku operacyjnym jest dostępne za pomocą polecenia Linux/Unix DF (disk free). Upewnij się, że ilość wolnego miejsca na dysku w systemie operacyjnym jest większa niż suma zwrócona z poprzedniego zapytania:
$ df -h
punkt 2. Zidentyfikuj lokalizacje i nazwy plików bazy danych do skopiowania
Uruchom to zapytanie, aby wyświetlić listę nazw (i ścieżek) plików, które są zawarte w zimnej kopii zapasowej bazy danych w trybie noarchivelog:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
tworzenie kopii zapasowych dzienników powtórzeń online (lub nie)
czy musisz wykonać kopię zapasową dzienników powtórzeń online? Nie; nigdy nie musisz tworzyć kopii zapasowych dzienników ponowienia online w ramach jakiegokolwiek rodzaju kopii zapasowej. Dlaczego więc bazy danych wykonują kopie zapasowe dzienników ponawiania online w ramach zimnej kopii zapasowej? Jednym z powodów jest to, że proces przywracania dla scenariusza trybu noarchivelog jest nieco łatwiejszy. Dzienniki powtórek online są wymagane, aby otworzyć bazę danych w normalny sposób.
jeśli wykonujesz kopię zapasową wszystkich plików (w tym dzienników wznowienia online), aby przywrócić bazę danych Oracle database 12c do stanu, w którym znajdowała się w momencie tworzenia kopii zapasowej, przywracasz wszystkie pliki (w tym dzienniki wznowienia online) i uruchamiasz bazę danych.
Krok 3. Zamknij bazę danych
Połącz się z bazą danych jako SYS (lub jako Użytkownik uprzywilejowany SYSDBA) i zamknij bazę danych, używając opcji natychmiastowej, transakcyjnej lub zwykłej. W prawie każdej sytuacji preferowaną metodą jest użycie natychmiastowego. Ten tryb odłącza użytkowników, wycofuje niekompletne transakcje i wyłącza bazę danych:
$ sqlplus / as sysdbaSQL> shutdown immediate;
punkt 4. Utwórz kopie zapasowe plików
dla każdego pliku zidentyfikowanego w Kroku 2 Użyj narzędzia systemu operacyjnego, aby skopiować pliki do katalogu kopii zapasowej (zidentyfikowanego w kroku 1). W tym prostym przykładzie wszystkie pliki danych, pliki kontrolne, tymczasowe pliki bazy danych i dzienniki ponownego wykonania online znajdują się w tym samym katalogu. W środowiskach produkcyjnych najprawdopodobniej pliki będą rozmieszczone w kilku różnych katalogach. Ten przykład wykorzystuje polecenie Linux / Unix cp do skopiowania plików bazy danych z/U01 /dbfile/O12C do katalogu/U01 / cbackup / O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
punkt 5. Uruchom ponownie bazę danych
po skopiowaniu wszystkich plików możesz uruchomić bazę danych:
$ sqlplus / as sysdbaSQL> startup;
Przywracanie zimnej kopii zapasowej w trybie Noarchivelog z dziennikami Redo Online
następny przykład wyjaśnia, jak przywrócić z zimnej kopii zapasowej bazy danych w trybie noarchivelog. Jeśli do zimnej kopii zapasowej dołączyłeś dzienniki ponowienia online, możesz dołączyć je podczas przywracania plików. Oto kroki związane z tą procedurą:
- Wyłącz instancję.
- skopiuj pliki danych, dzienniki ponownego wykonania online, pliki tymczasowe i pliki kontrolne z kopii zapasowej do lokalizacji plików danych w aktywnej bazie danych.
- Uruchom swoją bazę danych.
te kroki są szczegółowe w następujących sekcjach.
Krok 1. Zamknij instancję
Zamknij instancję, jeśli jest uruchomiona. W tym scenariuszu nie ma znaczenia, w jaki sposób wyłączysz bazę danych Oracle 12c, ponieważ przywracasz ją do określonego punktu w czasie (bez odzyskiwania transakcji). Wszystkie pliki w lokalizacjach katalogów bazy danych są nadpisywane, gdy pliki kopii zapasowej są kopiowane z powrotem. Jeśli twoja instancja jest uruchomiona, możesz ją nagle przerwać. Jako Użytkownik uprzywilejowany SYSDBA wykonaj następujące czynności:
$ sqlplus / as sysdbaSQL> shutdown abort;
punkt 2. Skopiuj pliki z powrotem z kopii zapasowej
ten krok powoduje odwrócenie kopii zapasowej: kopiujesz pliki z lokalizacji kopii zapasowej do lokalizacji plików aktywnej bazy danych. W tym przykładzie wszystkie pliki kopii zapasowej znajdują się w katalogu /U01/cbackup /O12C, a wszystkie pliki są kopiowane do katalogu/U01/dbfile / O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
Punkt 3. Uruchom bazę danych
Połącz się z bazą danych jako SYS (lub użytkownik posiadający uprawnienia SYSDBA) i uruchom bazę danych:
$ sqlplus / as sysdbaSQL> startup;
po zakończeniu tych kroków powinieneś mieć dokładną kopię bazy danych, tak jak w momencie tworzenia zimnej kopii zapasowej. To tak, jakbyś ustawił bazę danych z powrotem do punktu w czasie, gdy wykonałeś kopię zapasową.
Przywracanie zimnej kopii zapasowej w trybie Noarchivelog bez dzienników wznowienia Online
jak wspomniano wcześniej, nigdy nie potrzebujesz dzienników wznowienia online podczas przywracania z zimnej kopii zapasowej. Jeśli wykonałeś zimną kopię zapasową bazy danych w trybie noarchivelog i nie uwzględniłeś dzienników ponowienia online jako części kopii zapasowej, kroki przywracania są prawie identyczne z krokami z poprzedniej sekcji. Główną różnicą jest to, że ostatni krok wymaga otwarcia bazy danych za pomocą klauzuli OPEN RESETLOGS. Oto kroki:
- Wyłącz instancję.
- skopiuj pliki kontrolne i pliki danych z powrotem z kopii zapasowej.
- Uruchom bazę danych w trybie montowania.
- otwórz bazę danych za pomocą klauzuli OPEN RESETLOGS.
Krok 1. Zamknij instancję
Zamknij instancję, jeśli jest uruchomiona. W tym scenariuszu nie ma znaczenia, w jaki sposób wyłączysz bazę danych Oracle 12c, ponieważ przywracasz ją do określonego punktu w czasie. Wszelkie pliki w lokalizacjach katalogów bazy danych są nadpisywane podczas kopiowania kopii zapasowych. Jeśli twoja instancja jest uruchomiona, możesz ją nagle przerwać. Jako Użytkownik uprzywilejowany SYSDBA wykonaj następujące czynności:
$ sqlplus / as sysdbaSQL> shutdown abort;
punkt 2. Skopiuj pliki z powrotem z kopii zapasowej
skopiuj pliki kontrolne i pliki danych z lokalizacji kopii zapasowej do lokalizacji aktywnego pliku danych:
$ cp <backup directory>/*.* <live database file directory>
Punkt 3. Uruchom bazę danych w trybie montowania
Połącz się z bazą danych jako SYS lub użytkownik z uprawnieniami SYSDBA i uruchom bazę danych w trybie montowania:
$ sqlplus / as sysdbaSQL> startup mount
punkt 4. Otwórz bazę danych za pomocą klauzuli OPEN RESETLOGS
otwórz bazę danych do użycia za pomocą klauzuli OPEN RESETLOGS:
SQL> alter database open resetlogs;
jeśli widzisz komunikat o zmianie bazy danych, polecenie powiodło się. Jednak ten błąd może być widoczny:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
w takim przypadku wykonaj następujące polecenie:
SQL> recover database until cancel;
powinieneś zobaczyć ten Komunikat:
Media recovery complete.
teraz spróbuj otworzyć bazę danych za pomocą klauzuli OPEN RESETLOGS:
SQL> alter database open resetlogs;
to oświadczenie nakazuje firmie Oracle odtworzenie dzienników online. Oracle wykorzystuje informacje z pliku kontrolnego w celu umieszczenia, nazwy i rozmiaru dzienników ponowienia. Jeśli w tych lokalizacjach znajdują się stare pliki dziennika ponowienia online, są one nadpisywane.
Zaloguj przez cały ten proces, można zobaczyć ORA-00312 i ORA-00313. Oznacza to, że Oracle nie może znaleźć plików dziennika ponowienia online; jest to w porządku, ponieważ pliki te nie są fizycznie dostępne, dopóki nie zostaną odtworzone za pomocą polecenia OPEN RESETLOGS.
Skryptowanie zimnej kopii zapasowej i przywracanie
jest instrukcją, aby zobaczyć, jak skryptować zimną kopię zapasową. Podstawową ideą jest dynamiczne odpytywanie słownika danych w celu określenia lokalizacji i nazw plików, które mają zostać zarchiwizowane. Jest to lepsze niż twarde kodowanie lokalizacji katalogów i nazw plików w skrypcie. Dynamiczne generowanie skryptu jest mniej podatne na błędy i niespodzianki (np. dodawanie nowych plików danych do bazy danych, ale nie do starego, zakodowanego skryptu kopii zapasowej).
Uwaga skrypty w tej sekcji nie są przeznaczone do tworzenia kopii zapasowych i odzyskiwania siły produkcyjnej. Raczej ilustrują one podstawowe pojęcia tworzenia skryptów zimnej kopii zapasowej i późniejszego przywracania.
pierwszy skrypt w tej sekcji tworzy zimną kopię zapasową bazy danych. Przed użyciem skryptu zimnej kopii zapasowej należy zmodyfikować te zmienne w skrypcie, aby dopasować je do środowiska bazy danych:
- ORACLE_SID
- ORACLE_HOME
- cbdir
zmienna cbdir określa nazwę lokalizacji katalogu kopii zapasowej. Skrypt tworzy plik o nazwie coldback.sql, który jest wykonywany z SQL * Plus w celu zainicjowania zimnej kopii zapasowej bazy danych:
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cspo coldback.sqlselect 'shutdown immediate;' from dual;select '!cp ' || name || ' ' || '&&cbdir' from v$datafile;select '!cp ' || name || ' ' || '&&cbdir' from v$tempfile;select '!cp ' || member || ' ' || '&&cbdir' from v$logfile;select '!cp ' || name || ' ' || '&&cbdir' from v$controlfile;select 'startup;' from dual;spo off;@@coldback.sqlEOFexit 0
plik ten generuje polecenia, które mają być wykonane ze skryptu SQL * Plus w celu utworzenia zimnej kopii zapasowej bazy danych Oracle. Umieszczasz wykrzyknik (!) przed poleceniem Unix cp, aby polecić SQL * Plus, aby hostował się w systemie operacyjnym, aby uruchomić polecenie cp. Podczas odwoływania się do widoków słownika V$ data umieszcza się również ukośnik ( \ ) przed każdym znakiem dolara ( $ ); jest to wymagane w skrypcie powłoki Linux / Unix. \ Ucieka przed $ i mówi skryptowi powłoki, aby nie traktował $ jako znaku specjalnego ($zwykle oznacza zmienną powłoki).
po uruchomieniu tego skryptu, oto przykład poleceń kopiowania zapisanych do coldback.skrypt sql:
shutdown immediate;!cp /u01/dbfile/O12C/system01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/sysaux01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/undotbs01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/users01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/tools01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/temp01.dbf /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo02a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo02b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo01a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo01b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo03a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo03b.rdo /u01/cbackup/O12C!cp /u01/dbfile/O12C/control01.ctl /u01/cbackup/O12C!cp /u01/dbfile/O12C/control02.ctl /u01/cbackup/O12Cstartup;
podczas tworzenia zimnej kopii zapasowej należy również wygenerować skrypt, który zawiera polecenia do kopiowania plików danych, plików tymczasowych, plików dziennika i plików kontrolnych z powrotem do ich oryginalnych lokalizacji. Możesz użyć tego skryptu do przywrócenia z zimnej kopii zapasowej. Następny skrypt w tej sekcji dynamicznie tworzy zimny opór.skrypt sql, który kopiuje pliki z lokalizacji kopii zapasowej do oryginalnych lokalizacji plików danych. Musisz zmodyfikować ten skrypt w ten sam sposób, w jaki zmodyfikowałeś skrypt zimnej kopii zapasowej (tj. zmienić zmienne ORACLE_SID, ORACLE_HOME i cbdir, aby pasowały do Twojego środowiska):
#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cdefine dbname=$ORACLE_SIDspo coldrest.sqlselect 'shutdown abort;' from dual;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$datafile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$tempfile;select '!cp ' || '&&cbdir/' || substr(member, instr(member,'/',-1,1)+1) || ' ' || member from v$logfile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$controlfile;select 'startup;' from dual;spo off;EOFexit 0
ten skrypt tworzy skrypt o nazwie coldrest.sql, który generuje polecenia kopiowania, aby przywrócić pliki danych, pliki tymczasowe, pliki dziennika i pliki kontrolne z powrotem do oryginalnych lokalizacji. Po uruchomieniu tego skryptu powłoki, tutaj znajduje się fragment kodu w zimnej krainie.plik sql:
shutdown abort;!cp /u01/cbackup/O12C/system01.dbf /u01/dbfile/O12C/system01.dbf!cp /u01/cbackup/O12C/sysaux01.dbf /u01/dbfile/O12C/sysaux01.dbf!cp /u01/cbackup/O12C/undotbs01.dbf /u01/dbfile/O12C/undotbs01.dbf!cp /u01/cbackup/O12C/users01.dbf /u01/dbfile/O12C/users01.dbf!cp /u01/cbackup/O12C/tools01.dbf /u01/dbfile/O12C/tools01.dbf...!cp /u01/cbackup/O12C/redo03b.rdo /u02/oraredo/O12C/redo03b.rdo!cp /u01/cbackup/O12C/control01.ctl /u01/dbfile/O12C/control01.ctl!cp /u01/cbackup/O12C/control02.ctl /u01/dbfile/O12C/control02.ctlstartup;
jeśli chcesz przywrócić z zimnej kopii zapasowej za pomocą tego skryptu, Zaloguj się do SQL * Plus as SYS i uruchom skrypt:
$ sqlplus / as sysdbaSQL> @coldrest.sql