efectuați o copie de rezervă rece gestionată de utilizator prin copierea fișierelor după ce baza de date a fost închisă. Acest tip de copie de rezervă este, de asemenea, cunoscut sub numele de copie de rezervă offline. Oracle database 12C poate fi fie în modul noarchivelog, fie în modul archivelog atunci când faceți o copie de rezervă rece.
DBA-urile tind să se gândească la o copie de rezervă rece ca fiind sinonimă cu o copie de rezervă a unei baze de date în modul noarchivelog. Nu e corect. Puteți face o copie de rezervă rece a unei baze de date în modul archivelog și aceasta este o strategie de rezervă pe care multe magazine o folosesc. Diferențele dintre o copie de rezervă rece cu baza de date în modul noarchivelog și în modul archivelog sunt detaliate în secțiunile următoare.
efectuarea unei copii de rezervă la rece a unei baze de date Noarchivelog Mode
un motiv principal pentru a face o copie de rezervă la rece a unei baze de date Oracle 12c în modul noarchivelog este de a vă oferi o modalitate de a restabili o bază de date înapoi la un moment în trecut. Ar trebui să utilizați acest tip de copie de rezervă numai dacă nu este necesar să recuperați tranzacțiile care au avut loc după backup. Acest tip de strategie de backup și recuperare este acceptabil numai dacă cerințele afacerii dvs. permit pierderea de date și timpii morți. Rareori ați implementa vreodată acest tip de soluție de backup și recuperare pentru o bază de date de afaceri de producție.
acestea fiind spuse, există câteva motive bune pentru a implementa acest tip de copie de rezervă. O utilizare obișnuită este de a face o copie de rezervă rece a unei baze de date de dezvoltare/testare/instruire și de a reseta periodic baza de date înapoi la linia de bază. Acest lucru vă oferă o modalitate de a reporni un test de performanță sau o sesiune de antrenament cu același instantaneu punct-in-time al bazei de date.
sfat luați în considerare utilizarea caracteristicii bazei de date Flashback pentru a seta baza de date înapoi la un moment în trecut.
exemplul din această secțiune vă arată cum să faceți o copie de rezervă a fiecărui fișier critic din Baza de date: toate fișierele de control, fișierele de date, fișierele de date temporare și fișierele jurnal de refacere online. Cu acest tip de copie de rezervă, puteți restaura cu ușurință baza de date înapoi la momentul în care a fost făcută copia de rezervă. Principalele avantaje ale acestei abordări sunt că este conceptual simplu și ușor de implementat. Iată pașii necesari pentru o copie de rezervă rece a unei baze de date în modul noarchivelog:
- determinați unde să copiați fișierele de rezervă și cât spațiu este necesar.
- identificați locațiile și numele fișierelor bazei de date de copiat.
- închideți baza de date cu clauza imediată, tranzacțională sau normală.
- copiați fișierele (identificate la Pasul 2) în locația de rezervă (determinată la Pasul 1).
- reporniți Oracle database 12c.
următoarele secțiuni elaborează acești pași.
Pasul 1. Determinați unde să copiați fișierele de rezervă și cât spațiu este necesar
în mod ideal, locația de rezervă ar trebui să fie pe un set de discuri separate de locația fișierelor de date live. Cu toate acestea, în multe magazine, este posibil să nu aveți de ales și vi se poate spune ce puncte de montare urmează să fie utilizate de baza de date. Pentru acest exemplu, locația de rezervă este directorul / u01/cbackup / o12c. Pentru a vă face o idee aproximativă despre cât spațiu aveți nevoie pentru a stoca o copie a copiilor de rezervă, puteți rula această interogare:
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);
puteți verifica cât spațiu pe disc de operare este disponibil cu comanda Linux/Unix DF (disk free). Asigurați – vă că spațiul pe disc disponibil în sistemul de operare este mai mare decât suma returnată din interogarea anterioară:
$ df -h
Pasul 2. Identificați locațiile și numele fișierelor bazei de date pentru a copia
rulați această interogare pentru a lista numele (și căile) fișierelor care sunt incluse într-o copie de rezervă rece a unei baze de date noarchivelog mode:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
copierea de rezervă a jurnalelor de refacere ONLINE (sau nu)
trebuie să faceți o copie de rezervă a jurnalelor de refacere online? Nu; niciodată nu trebuie să faceți o copie de rezervă a jurnalelor de refacere online ca parte a oricărui tip de copie de rezervă. Atunci, de ce DBA-urile fac backup pentru jurnalele de refacere online ca parte a unei copii de rezervă reci? Un motiv este că face procesul de restaurare pentru scenariul modului noarchivelog ușor mai ușor. Jurnalele de refacere online sunt necesare pentru a deschide baza de date într-un mod normal.
dacă faceți o copie de rezervă a tuturor fișierelor (inclusiv jurnalele de refacere online), atunci pentru a readuce Oracle database 12c la starea în care se afla la momentul copierii de rezervă, restaurați toate fișierele (inclusiv jurnalele de refacere online) și porniți baza de date.
Pasul 3. Închideți baza de date
Conectați-vă la baza de date ca SYS (sau ca utilizator privilegiat SYSDBA) și închideți baza de date, utilizând imediat, tranzacțional sau NORMAL. În aproape orice situație, utilizarea imediată este metoda preferată. Acest mod deconectează utilizatorii, returnează tranzacțiile incomplete și închide baza de date:
$ sqlplus / as sysdbaSQL> shutdown immediate;
Pasul 4. Creați copii de rezervă ale fișierelor
pentru fiecare fișier identificat la Pasul 2, Utilizați un utilitar OS pentru a copia fișierele într-un director de rezervă (identificat la Pasul 1). În acest exemplu simplu, toate fișierele de date, fișierele de control, fișierele temporare ale bazei de date și jurnalele de refacere online se află în același director. În mediile de producție, cel mai probabil veți avea fișiere răspândite în mai multe directoare diferite. Acest exemplu utilizează comanda cp Linux/Unix pentru a copia fișierele bazei de date din/u01/dbfile /O12C în directorul/u01/cbackup / O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
Pasul 5. Reporniți baza de date
după ce toate fișierele sunt copiate, puteți porni baza de date:
$ sqlplus / as sysdbaSQL> startup;
restaurarea unei copii de rezervă la rece în modul Noarchivelog cu jurnalele de refacere online
următorul exemplu explică modul de restaurare dintr-o copie de rezervă la rece a unei baze de date în modul noarchivelog. Dacă ați inclus jurnalele de refacere online ca parte a copiei de rezervă la rece, le puteți include atunci când restaurați fișierele. Iată pașii implicați în această procedură:
- închideți instanța.
- copiați fișierele de date, jurnalele de refacere online, fișierele temporare și controlați fișierele înapoi din copia de rezervă în locațiile fișierelor de date ale bazei de date live.
- porniți baza de date.
acești pași sunt detaliați în secțiunile următoare.
Pasul 1. Opriți instanța
opriți instanța, dacă rulează. În acest scenariu, nu contează cum închideți Oracle database 12C, deoarece restaurați înapoi la un moment dat (fără recuperarea tranzacțiilor). Toate fișierele din locațiile directoarelor bazei de date sunt suprascrise atunci când fișierele de rezervă sunt copiate înapoi. Dacă instanța dvs. rulează, o puteți abandona brusc. Ca utilizator privilegiat SYSDBA, procedați în felul următor:
$ sqlplus / as sysdbaSQL> shutdown abort;
Pasul 2. Copiați fișierele înapoi din copia de rezervă
acest pas face reversul copiei de rezervă: copiați fișierele din locația de rezervă în locațiile fișierelor bazei de date live. În acest exemplu, toate fișierele de rezervă sunt localizate în directorul / u01 / cbackup / O12C și toate fișierele sunt copiate în directorul/u01/dbfile / O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
Pasul 3. Porniți baza de date
Conectați-vă la baza de date ca SYS (sau un utilizator care are privilegii SYSDBA) și porniți baza de date:
$ sqlplus / as sysdbaSQL> startup;
după ce ați terminat acești pași, ar trebui să aveți o copie exactă a bazei de date așa cum a fost atunci când ați făcut copia de rezervă rece. Este ca și cum ați seta baza de date înapoi la momentul în care ați făcut copia de rezervă.
restaurarea unei copii de rezervă la rece în modul Noarchivelog fără jurnalele de refacere online
așa cum am menționat mai devreme, nu aveți nevoie niciodată de jurnalele de refacere online atunci când restaurați dintr-o copie de rezervă la rece. Dacă ați făcut o copie de rezervă rece a bazei de date în modul noarchivelog și nu ați inclus jurnalele de refacere online ca parte a copiei de rezervă, pașii de restaurare sunt aproape identici cu pașii din secțiunea anterioară. Principala diferență este că ultimul pas necesită deschiderea bazei de date, utilizând clauza open RESETLOGS. Iată pașii:
- închideți instanța.
- copiați fișierele de control și fișierele de date înapoi din copia de rezervă.
- porniți baza de date în modul de montare.
- deschideți baza de date cu clauza open RESETLOGS.
Pasul 1. Opriți instanța
opriți instanța, dacă rulează. În acest scenariu, nu contează cum închideți Oracle database 12C, deoarece restaurați înapoi la un moment dat. Orice fișiere din locațiile directoarelor bazei de date live sunt suprascrise atunci când copiile de rezervă sunt copiate. Dacă instanța dvs. rulează, o puteți abandona brusc. Ca utilizator privilegiat SYSDBA, procedați în felul următor:
$ sqlplus / as sysdbaSQL> shutdown abort;
Pasul 2. Copiați fișierele înapoi din copia de rezervă
copiați fișierele de control și fișierele de date din locația de rezervă în locațiile fișierelor de date live:
$ cp <backup directory>/*.* <live database file directory>
Pasul 3. Porniți baza de date în modul montare
Conectați-vă la baza de date ca SYS sau un utilizator cu privilegii SYSDBA și porniți baza de date în modul montare:
$ sqlplus / as sysdbaSQL> startup mount
Pasul 4. Deschideți baza de date cu clauza open RESETLOGS
deschideți baza de date pentru utilizare cu clauza OPEN RESETLOGS:
SQL> alter database open resetlogs;
dacă vedeți mesajul modificat al bazei de date, comanda a avut succes. Cu toate acestea, este posibil să vedeți această eroare:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
în acest caz, emiteți următoarea comandă:
SQL> recover database until cancel;
ar trebui să vedeți acest mesaj:
Media recovery complete.
acum, încercați să deschideți baza de date cu clauza open RESETLOGS:
SQL> alter database open resetlogs;
această declarație instruiește Oracle să recreeze jurnalele de refacere online. Oracle utilizează informații din fișierul de control pentru plasarea, numele și dimensiunea jurnalelor de refacere. Dacă există fișiere vechi de jurnal de refacere online în acele locații, acestea sunt suprascrise.
dacă vă monitorizați alerta.jurnal de-a lungul acestui proces, este posibil să vedeți ORA-00312 și ORA-00313. Aceasta înseamnă că Oracle nu poate găsi fișierele jurnal de refacere online; Acest lucru este în regulă, deoarece aceste fișiere nu sunt disponibile fizic până când nu sunt recreate de comanda Open RESETLOGS.
Scripting o copie de rezervă rece și restaurare
este de instruire pentru a vedea cum să script o copie de rezervă rece. Ideea de bază este de a interoga dinamic dicționarul de date pentru a determina locațiile și numele fișierelor care urmează să fie susținute. Acest lucru este de preferat să hard-codificare locațiile director și numele de fișiere într-un script. Generarea dinamică a unui script este mai puțin predispusă la erori și surprize (de exemplu, adăugarea de noi fișiere de date într-o bază de date, dar nu la un script de rezervă vechi, codificat).
Notă Scripturile din această secțiune nu sunt menite să fie script-uri de backup și recuperare de producție-putere. Mai degrabă, ele ilustrează conceptele de bază ale scriptării unei copii de rezervă la rece și a restaurării ulterioare.
primul script din această secțiune face o copie de rezervă rece a unei baze de date. Înainte de a utiliza scriptul de rezervă rece, trebuie să modificați aceste variabile în script pentru a se potrivi mediului bazei de date:
- ORACLE_SID
- ORACLE_HOME
- cbdir
variabila cbdir specifică numele locației directorului de rezervă. Scriptul creează un fișier numit coldback.sql, care este executat din SQL * Plus pentru a iniția o copie de rezervă rece a bazei de date:
#!/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
acest fișier generează comenzi care urmează să fie executate dintr-un script SQL*Plus pentru a face o copie de rezervă rece a unei baze de date Oracle. Puneți un semn de exclamare (!) în fața comenzii Unix cp pentru a instrui SQL * Plus să găzduiască sistemul de operare pentru a rula comanda cp. De asemenea, plasați o bară oblică înapoi (\) în fața fiecărui semn dolar ($) atunci când faceți referire la vizualizările dicționarului de date v$; Acest lucru este necesar într-un script shell Linux/Unix. \ Scapă de $ și spune scriptului shell să nu trateze $ ca un caracter special ($semnifică în mod normal o variabilă shell).
după ce executați acest script, aici este un eșantion de comenzi de copiere scrise la coldback.script 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;
în timp ce faceți o copie de rezervă rece, ar trebui să generați și un script care oferă comenzile pentru a copia fișiere de date, fișiere temporare, fișiere jurnal și fișiere de control înapoi în locațiile lor originale. Puteți utiliza acest script pentru a restabili din copia de rezervă rece. Următorul script din această secțiune creează dinamic o frigodihnă.script sql care copiază fișierele din locația de rezervă în locațiile originale ale fișierelor de date. Trebuie să modificați acest script în același mod în care ați modificat scriptul de rezervă rece (adică modificați variabilele ORACLE_SID, ORACLE_HOME și cbdir pentru a se potrivi mediului dvs.):
#!/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
acest script creează un script, numit coldrest.sql, care generează comenzile de copiere pentru a restaura fișierele de date, fișierele temp, fișierele jurnal și fișierele de control înapoi la locațiile lor originale. După ce executați acest script shell, aici este un fragment al codului în coldrest.fișier 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;
dacă trebuie să restaurați dintr-o copie de rezervă rece utilizând acest script, conectați-vă la SQL * Plus ca SYS și executați scriptul:
$ sqlplus / as sysdbaSQL> @coldrest.sql