Strategia di backup a freddo per una modalità Noarchivelog Oracle Database 12C

Si esegue un backup a freddo gestito dall’utente copiando i file dopo l’arresto del database. Questo tipo di backup è noto anche come backup offline. Oracle database 12C può essere in modalità noarchivelog o archivelog quando si effettua un backup a freddo.

I DBA tendono a pensare a un backup freddo come sinonimo di un backup di un database in modalità noarchivelog. Non è corretto. È possibile effettuare un backup a freddo di un database in modalità archivelog, e questa è una strategia di backup che molti negozi impiegano. Le differenze tra un backup a freddo con il database in modalità noarchivelog e in modalità archivelog sono dettagliate nelle sezioni seguenti.

Fare un backup a freddo di un database in modalità Noarchivelog

Una ragione principale per fare un backup a freddo di un database Oracle 12C in modalità noarchivelog è quello di dare un modo per ripristinare un database di nuovo a un punto nel tempo nel passato. Utilizzare questo tipo di backup solo se non è necessario ripristinare le transazioni che si sono verificate dopo il backup. Questo tipo di strategia di backup e ripristino è accettabile solo se i requisiti aziendali consentono la perdita di dati e tempi di inattività. Raramente implementeresti mai questo tipo di soluzione di backup e ripristino per un database aziendale di produzione.

Detto questo, ci sono alcune buone ragioni per implementare questo tipo di backup. Un uso comune è quello di fare un backup a freddo di un database di sviluppo/test/formazione e ripristinare periodicamente il database alla linea di base. In questo modo è possibile riavviare un test delle prestazioni o una sessione di allenamento con lo stesso snapshot point-in-time del database.

Immagine

Immagine

Suggerimento Considerare l’utilizzo della funzione di database Flashback per impostare il database di nuovo a un punto nel tempo in passato.

L’esempio in questa sezione mostra come eseguire un backup di ogni file critico nel database: tutti i file di controllo, i file di dati, i file di dati temporanei e i file di log redo online. Con questo tipo di backup, è possibile ripristinare facilmente il database nel momento in cui è stato effettuato il backup. I principali vantaggi di questo approccio sono che è concettualmente semplice e facile da implementare. Ecco i passaggi necessari per un backup a freddo di un database in modalità noarchivelog:

  1. Determinare dove copiare i file di backup e quanto spazio è necessario.
  2. Identificare le posizioni e i nomi dei file di database da copiare.
  3. Chiudere il database con la clausola IMMEDIATA, TRANSAZIONALE o NORMALE.
  4. Copiare i file (identificati nel passaggio 2) nel percorso di backup (determinato nel passaggio 1).
  5. Riavvia il tuo database Oracle 12C.

Le sezioni seguenti elaborano questi passaggi.

Punto 1. Determinare dove copiare i file di backup e quanto spazio è necessario

Idealmente, la posizione di backup dovrebbe essere su un set di dischi separati dalla posizione dei file di dati in tempo reale. Tuttavia, in molti negozi, non si può avere una scelta e può essere detto che i punti di montaggio devono essere utilizzati dal database. Per questo esempio la posizione di backup è la directory / u01/cbackup / O12C. Per avere un’idea approssimativa di quanto spazio è necessario memorizzare una copia dei backup, è possibile eseguire questa query:

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);

È possibile verificare la quantità di spazio su disco operativo disponibile con il comando Linux/Unix df (disk free). Assicurarsi che la quantità di spazio su disco disponibile nel sistema operativo sia maggiore della somma restituita dalla query precedente:

$ df -h

Punto 2. Identificare le posizioni e i nomi dei file di database da copiare

Eseguire questa query per elencare i nomi (e i percorsi) dei file inclusi in un backup a freddo di un database in modalità noarchivelog:

select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;

BACKUP DEI LOG REDO ONLINE (O MENO)

È necessario eseguire il backup dei log redo online? No; non è mai necessario eseguire il backup dei registri redo online come parte di qualsiasi tipo di backup. Quindi, perché i DBA eseguono il backup dei registri di ripetizione online come parte di un backup a freddo? Uno dei motivi è che rende leggermente più semplice il processo di ripristino per lo scenario della modalità noarchivelog. I log redo online sono necessari per aprire il database in modo normale.

Se si esegue il backup di tutti i file (inclusi i log di ripristino online), per riportare Oracle database 12C allo stato in cui si trovava al momento del backup, si ripristinano tutti i file (inclusi i log di ripristino online) e si avvia il database.

Punto 3. Chiudere il database

Connettersi al database come SYS (o come utente con privilegi SYSDBA) e chiudere il database, utilizzando IMMEDIATO, TRANSAZIONALE o NORMALE. In quasi tutte le situazioni, l’uso IMMEDIATO è il metodo preferito. Questa modalità disconnette gli utenti, ripristina le transazioni incomplete e arresta il database:

$ sqlplus / as sysdbaSQL> shutdown immediate;

Punto 4. Creare copie di backup dei file

Per ogni file identificato nel passaggio 2, utilizzare un’utilità del sistema operativo per copiare i file in una directory di backup (identificata nel passaggio 1). In questo semplice esempio tutti i file di dati, i file di controllo, i file di database temporanei e i registri di ripetizione online si trovano nella stessa directory. Negli ambienti di produzione, è molto probabile che i file siano distribuiti in diverse directory. Questo esempio utilizza il comando cp Linux / Unix per copiare i file di database da / u01/dbfile / O12C nella directory/u01/cbackup / O12C:

$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C

Punto 5. Riavviare il database

Dopo aver copiato tutti i file, è possibile avviare il database:

$ sqlplus / as sysdbaSQL> startup;

Ripristino di un backup a freddo in modalità Noarchivelog con log di ripristino online

L’esempio successivo spiega come ripristinare da un backup a freddo di un database in modalità noarchivelog. Se hai incluso i log redo online come parte del backup a freddo, puoi includerli quando ripristini i file. Ecco i passaggi coinvolti in questa procedura:

  1. Spegni l’istanza.
  2. Copia i file di dati, i log di ripristino online, i file temporanei e controlla i file dal backup alle posizioni dei file di dati del database in tempo reale.
  3. Avvia il tuo database.

Questi passaggi sono dettagliati nelle sezioni seguenti.

Punto 1. Spegni l’istanza

Spegni l’istanza, se è in esecuzione. In questo scenario non importa come si spegne il database Oracle 12C, perché si sta ripristinando un punto nel tempo (senza recupero delle transazioni). Tutti i file nelle posizioni della directory del database live vengono sovrascritti quando i file di backup vengono copiati. Se la tua istanza è in esecuzione, puoi interromperla bruscamente. Come utente con privilegi SYSDBA, procedi come segue:

$ sqlplus / as sysdbaSQL> shutdown abort;

Punto 2. Copia i file dal backup

Questo passaggio fa il contrario del backup: stai copiando i file dalla posizione di backup alle posizioni dei file del database live. In questo esempio tutti i file di backup si trovano nella directory/u01/cbackup / O12C e tutti i file vengono copiati nella directory/u01/dbfile / O12C:

$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C

Punto 3. Avviare il database

Connettersi al database come SYS (o un utente con privilegi SYSDBA) e avviare il database:

$ sqlplus / as sysdbaSQL> startup;

Dopo aver completato questi passaggi, dovresti avere una copia esatta del tuo database come era quando hai effettuato il backup a freddo. È come se si impostasse il database al momento in cui è stato effettuato il backup.

Ripristino di un backup freddo in modalità Noarchivelog Senza log Redo online

Come accennato in precedenza, non è mai necessario i log redo online quando si ripristina da un backup freddo. Se hai eseguito un backup a freddo del tuo database in modalità noarchivelog e non hai incluso i log di ripristino online come parte del backup, i passaggi da ripristinare sono quasi identici ai passaggi della sezione precedente. La differenza principale è che l’ultimo passaggio richiede di aprire il database, utilizzando la clausola OPEN RESETLOGS. Ecco i passaggi:

  1. Spegni l’istanza.
  2. Copiare i file di controllo e i file di dati dal backup.
  3. Avviare il database in modalità di montaggio.
  4. Aprire il database con la clausola OPEN RESETLOGS.

Punto 1. Spegni l’istanza

Spegni l’istanza, se è in esecuzione. In questo scenario non importa come si spegne il database Oracle 12C, perché si sta ripristinando di nuovo a un punto nel tempo. Tutti i file nelle posizioni della directory del database live vengono sovrascritti quando i backup vengono copiati. Se la tua istanza è in esecuzione, puoi interromperla bruscamente. Come utente con privilegi SYSDBA, procedi come segue:

$ sqlplus / as sysdbaSQL> shutdown abort;

Punto 2. Copia i file dal backup

Copia i file di controllo e i file di dati dalla posizione di backup nelle posizioni dei file di dati in tempo reale:

$ cp <backup directory>/*.* <live database file directory>

Punto 3. Avviare il database in modalità di montaggio

Connettersi al database come SYS o un utente con privilegi SYSDBA e avviare il database in modalità di montaggio:

$ sqlplus / as sysdbaSQL> startup mount

Punto 4. Aprire il database con la clausola OPEN RESETLOGS

Aprire il database per l’utilizzo con la clausola OPEN RESETLOGS:

SQL> alter database open resetlogs;

Se viene visualizzato il messaggio modificato nel database, il comando ha avuto successo. Tuttavia, potresti vedere questo errore:

ORA-01139: RESETLOGS option only valid after an incomplete database recovery

In questo caso, emettere il seguente comando:

SQL> recover database until cancel;

Dovresti vedere questo messaggio:

Media recovery complete.

Ora, tenta di aprire il database con la clausola OPEN RESETLOGS:

SQL> alter database open resetlogs;

Questa istruzione indica a Oracle di ricreare i log redo online. Oracle utilizza le informazioni nel file di controllo per il posizionamento, il nome e la dimensione dei registri di ripetizione. Se ci sono vecchi file di log redo online in quelle posizioni, vengono sovrascritti.

Se stai monitorando il tuo avviso.log durante questo processo, si può vedere ORA-00312 e ORA-00313. Ciò significa che Oracle non riesce a trovare i file di log redo online; va bene, perché questi file non sono fisicamente disponibili fino a quando non vengono ricreati dal comando APRI RESETLOGS.

Scripting di un backup e ripristino a freddo

È istruttivo visualizzare come script di un backup a freddo. L’idea di base è quella di interrogare dinamicamente il dizionario dei dati per determinare le posizioni e i nomi dei file da eseguire il backup. Questo è preferibile a hard-coding le posizioni delle directory e nomi di file in uno script. La generazione dinamica di uno script è meno soggetta a errori e sorprese (ad esempio, l’aggiunta di nuovi file di dati a un database ma non a un vecchio script di backup hard-coded).

Immagine

Immagine

Nota Gli script in questa sezione non sono pensati per essere script di backup e ripristino di forza di produzione. Piuttosto, illustrano i concetti di base dello scripting di un backup a freddo e del successivo ripristino.

Il primo script in questa sezione esegue un backup a freddo di un database. Prima di utilizzare lo script di backup a freddo, è necessario modificare queste variabili nello script in modo che corrispondano all’ambiente del database:

  • ORACLE_SID
  • ORACLE_HOME
  • cbdir

La variabile cbdir specifica il nome del percorso della directory di backup. Lo script crea un file chiamato coldback.sql, che viene eseguito da SQL * Plus per avviare un backup a freddo del database:

#!/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

Questo file genera comandi che devono essere eseguiti da uno script SQL*Plus per eseguire un backup a freddo di un database Oracle. Metti un punto esclamativo (!) di fronte al comando cp Unix per istruire SQL * Plus per ospitare fuori al sistema operativo per eseguire il comando cp. Si posiziona anche una barra all’indietro ( \ ) davanti a ogni simbolo di dollaro ( $ ) quando si fa riferimento alle viste del dizionario dei dati v data; questo è richiesto in uno script di shell Linux/Unix. Il \ sfugge al $ e dice allo script di shell di non trattare il character come un carattere speciale (il normally normalmente significa una variabile di shell).

Dopo aver eseguito questo script, ecco un esempio dei comandi di copia scritti su 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;

Mentre si effettua un backup a freddo, è necessario generare anche uno script che fornisce i comandi per copiare i file di dati, i file temporanei, i file di registro e i file di controllo nelle loro posizioni originali. È possibile utilizzare questo script per ripristinare dal backup freddo. Lo script successivo in questa sezione crea dinamicamente un coldrest.script sql che copia i file dalla posizione di backup alle posizioni dei file di dati originali. È necessario modificare questo script nello stesso modo in cui è stato modificato lo script di backup freddo (ad esempio, modificare le variabili ORACLE_SID, ORACLE_HOME e cbdir in modo che corrispondano al proprio ambiente):

#!/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

Questo script crea uno script, chiamato coldrest.sql, che genera i comandi di copia per ripristinare i file di dati, i file temporanei, i file di registro e i file di controllo nelle loro posizioni originali. Dopo aver eseguito questo script di shell, ecco un frammento del codice nel coldrest.file 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;

Se è necessario ripristinare da un backup a freddo utilizzando questo script, accedere a SQL*Plus SYS, e di eseguire lo script:

$ sqlplus / as sysdbaSQL> @coldrest.sql

Вас заинтересует / Interessante per voi:

Gestione Oracle Database 12C O...

Gestione del database Oracle 12C O… 4931 visualizzazioni 2020, 10:18:11

Implementazione di uno Stra di backup a caldo...

Implementazione di uno Stra Hot Backup… 6414 visualizzazioni 2020, 10:16:34

Corrispondenza Oracle 12c tipo di tabella...

Corrispondenza Oracle 12c tipo di tabella… 1786 visite Ded Sab, 18 Agosto 2018, 16:59:35

Arresto del database Oracle 1...

Arresto del database Oracle 1… 976 visualizzazioni Андрей Волков Sab, 29 feb 2020, 10:19:28

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.