Restore e Recover - RMAN
Restore è il comando che sposta i datafiles dal backup alla posizione originale che avevano prima della cancellazione.
Restore e Recover di un tabelspace.
run {
sql 'alter tablespace users offline immediate';
restore tablespace users;
recover tablespace users;
sql 'alter tablespace users online';
}
E s e m p i o #1
Recuperare un datafile cancellato e aprire il database in 3 step.
Supponiamo di avere il database "spento" e di cancellare un suo datafile PROVA03.DBF del tablespace EXAMPLE.
Cd $ORACLE_BASE/oradata/orcl
rm PROVA03.DBF
A questo punto riapriamo il database.
SQL>startup nomout;
SQL>alter database mount;
SQL>alter database open;
ERRORE alla riga 1:
ORA-01157: impossibile identificare/bloccare il file 6, vedere file
DBWR
ORA-01110: file di dati 6: '..........PROVA03.DBF'
Collegarsi ad RMAN.
canale ORA_DISK_1: SID=170 tipo di dispositivo=DISK
creazione del file di dati numero=6 nome=.................\PROVA03.DBF
ripristino non effettuato; tutti i file sono di sola lettura, non in linea o già ripristinati
restore terminato in 04-GIU-14
Se vado sotto $ORACLE_BASE/oradata/orcl ritrovo il file PROVA03.DBF.
Se riapriamo il database compare il messaggio di errore seguente:
SQL> conn /as sysdba
Connesso.
SQL> alter database open;
ERRORE alla riga 1:
ORA-01113: necessario recupero di dischi per il file '6'
ORA-01110: file di dati 6: '......................\PROVA03.DBF'
Vediamo che i datafiles non hanno gli stessi livelli di SNC.
SQL> select FILE# , CHECKPOINT_CHANGE# from V$DATAFILE_HEADER;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5107621
2 5107621
3 5107621
4 5107621
5 5107621
6 5062017
7 5107621
8 5107621
9 5107621
Essendo i datafile disallineati occorre leggere i redolog recuperabili dagli Archive log sotto il path $ORACLE_BASE/flash_recovery_area/<SID>/ARCHIVELOG.
RMAN> RECOVER DATAFILE 6;
Se rieseguo la query di prima risulta che tutti i datafile hanno lo stesso livello di SCN.
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5107621
2 5107621
3 5107621
4 5107621
5 5107621
6 5107621
7 5107621
8 5107621
9 5107621
E' passato SMON che allinea gli SCN.
SQL> ALTER DATABASE OPEN;
E s e m p i o #2
Recuperare un datafile cancellato e aprire il database.
Supponiamo di cancellare il datafile PROVA04.DBF e di riaprire il database:
SQL> startup mount;
SQL> alter database open;
ERRORE alla riga 1:
ORA-01157: impossibile identificare/bloccare il file 7, vedere file di traccia
DBWR
ORA-01110: file di dati 7: '.....PROVA04.DBF'
RMAN> LIST FAILURE DETAIL;
Lista di errori del database
=========================
ID errore Priority Status Ora rilevata Summary
--------- -------- --------- ------------ -------
82 HIGH OPEN 04-GIU-14 Uno o pi¨ file di dati non di sistema mancanti
Impatto: Vedere l'impatto per i singoli errori figlio
Lista di errori figlio per ID errore padre 82
ID errore Priority Status Ora rilevata Summary
--------- -------- --------- ------------ -------
165 HIGH OPEN 04-GIU-14 File di dati 7: '...\PROVA04.DBF' mancante
Impatto: Alcuni oggetti nella tablespace EXAMPLE potrebbero non essere disponibili
Mi dice che manca un file non di sistema e pertanto potrei aprire il file senza quel datafile mettendolo offline.
Le informazioni relative a blocchi corrotti posso essere estratti anche dalla vista seguente.
select * from V$database_block_corruption;
SQL> alter database datafile 7 OFFLINE;
Modificato database.
SQL> alter databse open;
I dati non sono coerenti, mancano le info contenute nel datafile 7.
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5109064
2 5109064
3 5109064
4 5109064
5 5109064
6 5109064
7 0
8 5109064
9 5109064
Per rimittere il datafile online.
SQL>alter database datafile 7 ONLINE;
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5109064
2 5109064
3 5109064
4 5109064
5 5109064
6 5109064
7 5109052
8 5109064
9 5109064
SQL>alter system checkpoint;
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5113634
2 5113634
3 5113634
4 5113634
5 5113634
6 5113634
7 5113634
8 5113634
9 5113634
Ritorniamo al caso in cui il database non è open, con il datafile 7 cancellato.
Il comando seguente esegue in automatico il restore e il recover del datafile 7.
RMAN> ADVISE FAILURE;
....
Descrizione correzione opzione
------ ------------------
1 Ripristinare e recuperare il file di dati 7
Strategia: La correzione comprende il recupero completo dei metadati senza perdita di dati
Script di correzione: .......\diag\rdbms\orcl\orcl\hm\reco_1648021552.hm
Descrizione correzione opzione
------ ------------------
1 Ripristinare e recuperare il file di dati 7
Strategia: La correzione comprende il recupero completo dei metadati senza perdita di dati
Script di correzione: ....diag\rdbms\orcl\orcl\hm\reco_1648021552.hm
contenuto dello script di correzione:
# restore and recover datafile
restore datafile 7;
recover datafile 7;
Si è certi di voler eseguire la correzione riportata sopra (immettere YES o NO)?
scrivere YES
...
.....
Si è certi di voler aprire il database (immettere YES o NO)?
Scrivere YES
database open
Recovery invece è il processo di applicazione di tutte le transazioni effettuate sui dati presenti nel datafiles (scritte nei redolog e archivelog) in modo da riportare i datafiles allo stato che avevano prima del "media failure".
Restore e Recover di un tabelspace.
run {
sql 'alter tablespace users offline immediate';
restore tablespace users;
recover tablespace users;
sql 'alter tablespace users online';
}
E s e m p i o #1
Recuperare un datafile cancellato e aprire il database in 3 step.
Supponiamo di avere il database "spento" e di cancellare un suo datafile PROVA03.DBF del tablespace EXAMPLE.
Cd $ORACLE_BASE/oradata/orcl
rm PROVA03.DBF
A questo punto riapriamo il database.
SQL>startup nomout;
SQL>alter database mount;
SQL>alter database open;
ERRORE alla riga 1:
ORA-01157: impossibile identificare/bloccare il file 6, vedere file
DBWR
ORA-01110: file di dati 6: '..........PROVA03.DBF'
Collegarsi ad RMAN.
RMAN> RESTORE DATAFILE 6;
Avvio di restore in 04-GIU-14
canale allocato: ORA_DISK_1Avvio di restore in 04-GIU-14
canale ORA_DISK_1: SID=170 tipo di dispositivo=DISK
creazione del file di dati numero=6 nome=.................\PROVA03.DBF
ripristino non effettuato; tutti i file sono di sola lettura, non in linea o già ripristinati
restore terminato in 04-GIU-14
Se vado sotto $ORACLE_BASE/oradata/orcl ritrovo il file PROVA03.DBF.
Se riapriamo il database compare il messaggio di errore seguente:
SQL> conn /as sysdba
Connesso.
SQL> alter database open;
ERRORE alla riga 1:
ORA-01113: necessario recupero di dischi per il file '6'
ORA-01110: file di dati 6: '......................\PROVA03.DBF'
Vediamo che i datafiles non hanno gli stessi livelli di SNC.
SQL> select FILE# , CHECKPOINT_CHANGE# from V$DATAFILE_HEADER;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5107621
2 5107621
3 5107621
4 5107621
5 5107621
6 5062017
7 5107621
8 5107621
9 5107621
Essendo i datafile disallineati occorre leggere i redolog recuperabili dagli Archive log sotto il path $ORACLE_BASE/flash_recovery_area/<SID>/ARCHIVELOG.
RMAN> RECOVER DATAFILE 6;
Se rieseguo la query di prima risulta che tutti i datafile hanno lo stesso livello di SCN.
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5107621
2 5107621
3 5107621
4 5107621
5 5107621
6 5107621
7 5107621
8 5107621
9 5107621
E' passato SMON che allinea gli SCN.
SQL> ALTER DATABASE OPEN;
E s e m p i o #2
Recuperare un datafile cancellato e aprire il database.
Supponiamo di cancellare il datafile PROVA04.DBF e di riaprire il database:
SQL> startup mount;
SQL> alter database open;
ERRORE alla riga 1:
ORA-01157: impossibile identificare/bloccare il file 7, vedere file di traccia
DBWR
ORA-01110: file di dati 7: '.....PROVA04.DBF'
RMAN> LIST FAILURE DETAIL;
Lista di errori del database
=========================
ID errore Priority Status Ora rilevata Summary
--------- -------- --------- ------------ -------
82 HIGH OPEN 04-GIU-14 Uno o pi¨ file di dati non di sistema mancanti
Impatto: Vedere l'impatto per i singoli errori figlio
Lista di errori figlio per ID errore padre 82
ID errore Priority Status Ora rilevata Summary
--------- -------- --------- ------------ -------
165 HIGH OPEN 04-GIU-14 File di dati 7: '...\PROVA04.DBF' mancante
Impatto: Alcuni oggetti nella tablespace EXAMPLE potrebbero non essere disponibili
Mi dice che manca un file non di sistema e pertanto potrei aprire il file senza quel datafile mettendolo offline.
Le informazioni relative a blocchi corrotti posso essere estratti anche dalla vista seguente.
select * from V$database_block_corruption;
SQL> alter database datafile 7 OFFLINE;
Modificato database.
SQL> alter databse open;
I dati non sono coerenti, mancano le info contenute nel datafile 7.
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5109064
2 5109064
3 5109064
4 5109064
5 5109064
6 5109064
7 0
8 5109064
9 5109064
Per rimittere il datafile online.
SQL>alter database datafile 7 ONLINE;
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5109064
2 5109064
3 5109064
4 5109064
5 5109064
6 5109064
7 5109052
8 5109064
9 5109064
SQL>alter system checkpoint;
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 5113634
2 5113634
3 5113634
4 5113634
5 5113634
6 5113634
7 5113634
8 5113634
9 5113634
Ritorniamo al caso in cui il database non è open, con il datafile 7 cancellato.
Il comando seguente esegue in automatico il restore e il recover del datafile 7.
RMAN> ADVISE FAILURE;
....
Descrizione correzione opzione
------ ------------------
1 Ripristinare e recuperare il file di dati 7
Strategia: La correzione comprende il recupero completo dei metadati senza perdita di dati
Script di correzione: .......\diag\rdbms\orcl\orcl\hm\reco_1648021552.hm
Descrizione correzione opzione
------ ------------------
1 Ripristinare e recuperare il file di dati 7
Strategia: La correzione comprende il recupero completo dei metadati senza perdita di dati
Script di correzione: ....diag\rdbms\orcl\orcl\hm\reco_1648021552.hm
contenuto dello script di correzione:
# restore and recover datafile
restore datafile 7;
recover datafile 7;
Si è certi di voler eseguire la correzione riportata sopra (immettere YES o NO)?
scrivere YES
...
.....
Si è certi di voler aprire il database (immettere YES o NO)?
Scrivere YES
database open