Quando un database Oracle va in crash, la priorità assoluta è minimizzare il downtime e recuperare i dati. Oracle Recovery Manager (RMAN) è lo strumento fondamentale per eseguire backup e ripristini efficienti e affidabili. Comprendere a fondo le sue funzionalità è cruciale per ogni DBA, specialmente in ambienti enterprise dove un guasto può paralizzare intere operazioni. Ho gestito numerosi scenari di ripristino, da semplici errori utente a disastri hardware completi su infrastrutture con centinaia di VM e migliaia di endpoint, e ogni volta la preparazione e la conoscenza di RMAN hanno fatto la differenza. Questo articolo ti guiderà attraverso i passaggi critici per ripristinare un database Oracle utilizzando RMAN, partendo dall’analisi del guasto fino al recupero completo o point-in-time, fornendo comandi pratici e consigli basati sull’esperienza diretta.
Testato su: Oracle Database 19c · RMAN 19.0 · Ottobre 2026
Prerequisiti / Ambiente di test
Per seguire questa guida, avrai bisogno di un’installazione funzionante di Oracle Database (anche una versione Express o Standard Edition è sufficiente per test) e di Oracle Recovery Manager configurato per eseguire backup regolari. È fondamentale avere a disposizione backup recenti del database, inclusi datafiles, control file e archivelogs. Idealmente, dovresti testare queste procedure su un ambiente di staging o sviluppo che replichi il più fedelmente possibile la tua infrastruttura di produzione. Assicurati di avere accesso al server Oracle con i privilegi SYSDBA o un utente con i ruoli SYSBACKUP o SYSOPER.
Prima di toccare qualcosa: capire cosa si è perso
Il primo passo, e spesso il più trascurato in momenti di panico, è capire l’entità del danno. Non agire d’impulso. Controlla l’alert log del database (alert_), i trace files e i messaggi di errore specifici. Questo ti darà indicazioni preziose sul tipo di guasto (corruzione di un datafile, perdita del control file, crash dell’istanza, ecc.) e sul punto di ripristino più adatto. Leggi anche: Oracle DBA: Controlli Quotidiani con Output Reali
Un buon DBA sa che il recupero inizia con la diagnosi. Usa i comandi lsnrctl status per controllare il listener e sqlplus / as sysdba per tentare di connetterti all’istanza e verificare il suo stato. Se l’istanza non si avvia, l’alert log è la tua migliore fonte di informazioni. Se il database è in stato MOUNT o NOMOUNT, potresti avere problemi con il control file o i datafiles.
Verificare che i backup siano utilizzabili (LIST e VALIDATE)
Prima di iniziare qualsiasi operazione di ripristino, è essenziale verificare l’integrità e la disponibilità dei tuoi backup. Un backup corrotto o mancante può trasformare un semplice ripristino in un disastro. RMAN offre comandi specifici per questa verifica.
Per listare un riepilogo dei backup disponibili:
runcfg { ALLOCATE CHANNEL ch00 TYPE DISK; }
rman target /
LIST BACKUP SUMMARY;
Questo comando ti mostrerà tutti i backup registrati nel repository di RMAN (il control file o il recovery catalog). Assicurati che i backup recenti siano presenti e completi. Successivamente, per validare l’integrità dei blocchi all’interno dei backup, puoi eseguire un’operazione di RESTORE ... VALIDATE.
rman target /
RESTORE DATABASE VALIDATE;
Questo comando simula un’operazione di ripristino senza effettivamente scrivere i dati, verificando che tutti i blocchi necessari siano leggibili e non corrotti. Leggi anche: Oracle DBA: Controlli Quotidiani con Output Reali
Ripristinare il control file dall’autobackup
La perdita del control file è uno degli scenari più comuni e critici, poiché senza di esso RMAN non ha le informazioni necessarie per localizzare i backup e ripristinare il database. Fortunatamente, se hai configurato l’autobackup del control file (altamente raccomandato), il ripristino è relativamente semplice.
Per ripristinare il control file da un autobackup:
rman target /
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
Il comando STARTUP NOMOUNT avvia l’istanza Oracle ma senza montare il database. RESTORE CONTROLFILE FROM AUTOBACKUP cerca e ripristina l’ultimo autobackup del control file. Una volta ripristinato, ALTER DATABASE MOUNT permette a RMAN di leggere le informazioni dai datafiles e procedere con il ripristino del database.
Restore e recover completo del database
Una volta che il control file è stato ripristinato e il database è in stato MOUNT, puoi procedere con il ripristino completo dei datafiles e l’applicazione dei redo logs.
rman target /
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
RESTORE DATABASE: Questo comando recupera tutti i datafiles dal backup più recente disponibile nel repository di RMAN. Se hai configurato la retention policy, RMAN selezionerà automaticamente il backup più appropriato.RECOVER DATABASE: Dopo il ripristino dei datafiles, questo comando applica i redo logs archiviati (archivelogs) e, se necessario, i redo log online per portare il database allo stato più recente possibile, o a un punto specifico (come vedremo).ALTER DATABASE OPEN RESETLOGS: Una volta completato ilRECOVER, il database deve essere aperto con l’opzioneRESETLOGS. Questo comando crea una nuova sequenza di redo logs e resetta la sequenza di archivelog, indicando che il database è stato ripristinato da un backup. È un passaggio cruciale che deve essere eseguito una sola volta dopo un ripristino completo o point-in-time. Non usarlo se non è strettamente necessario, in quanto invalida tutti i backup precedenti.
Recover fino a un momento preciso (point-in-time)
Ci sono situazioni in cui non vuoi ripristinare il database allo stato più recente, ma a un momento specifico prima di un errore logico (ad esempio, un’eliminazione accidentale di dati). Questo è noto come Point-in-Time Recovery (PITR) o incomplete recovery. Richiede che il database sia in modalità ARCHIVELOG.
Per eseguire un PITR fino a un’ora specifica:
rman target /
RUN
{
SET UNTIL TIME "TO_DATE('2026-10-01 14:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
Sostituisci '2026-10-01 14:00:00' con la data e l’ora desiderate. RMAN ripristinerà i datafiles da un backup precedente a quel momento e applicherà gli archivelogs fino a quella specifica data/ora. Dopo il recover, è sempre necessario aprire il database con RESETLOGS.
Ripristinare un solo datafile senza fermare tutto
In alcuni casi, la corruzione o la perdita riguarda un solo datafile o tablespace, e non è necessario ripristinare l’intero database. RMAN permette il ripristino di singoli datafiles o tablespace, idealmente mentre il resto del database rimane online (online datafile recovery). Tuttavia, il tablespace contenente il datafile corrotto dovrà essere messo offline.
Esempio per ripristinare un datafile specifico (tablespace offline):
-- Identifica il nome del datafile e il tablespace
SELECT file_name, tablespace_name FROM dba_data_files WHERE file_id = <file_id>;
-- Metti offline il tablespace
ALTER TABLESPACE <tablespace_name> OFFLINE IMMEDIATE;
rman target /
RESTORE DATAFILE <file_id>;
RECOVER DATAFILE <file_id>;
-- Metti online il tablespace
ALTER TABLESPACE <tablespace_name> ONLINE;
Questo approccio è meno invasivo e riduce il downtime per il resto del database. È particolarmente utile in ambienti di produzione con SLA stringenti. Leggi anche: Oracle RMAN: Backup e Recovery in Produzione (Guida 2026)
Aprire il database con RESETLOGS: quando serve
Il comando ALTER DATABASE OPEN RESETLOGS è fondamentale dopo un ripristino completo o incompleto (PITR). Il suo scopo è invalidare tutti i redo log successivi al punto di ripristino e creare una nuova generazione di redo log. Questo assicura che non vengano applicati log obsoleti o inconsistenti. Tuttavia, ha delle implicazioni:
- Invalidazione dei backup: Tutti i backup eseguiti prima del
RESETLOGSdiventano inutilizzabili per ripristinare il database a un punto successivo all’operazione. È quindi essenziale eseguire un nuovo backup completo del database immediatamente dopo aver aperto conRESETLOGS. - Nuova incarnazione del database: Dal punto di vista di RMAN, il database dopo un
RESETLOGSè considerato una nuova incarnazione. Questo è gestito automaticamente da RMAN, ma è importante esserne consapevoli.
Non utilizzare RESETLOGS se hai solo recuperato un datafile online o se hai eseguito un RECOVER senza un precedente RESTORE (ad esempio, dopo un crash dell’istanza). In questi casi, ALTER DATABASE OPEN è sufficiente.
Provare il ripristino prima di averne bisogno
La teoria è importante, ma la pratica è ciò che conta davvero in un momento di crisi. Ho visto troppe organizzazioni scoprire che i loro piani di Disaster Recovery erano incompleti o addirittura non funzionanti solo quando un disastro si è verificato. Eseguire test regolari dei ripristini è un’attività non negoziabile.
Idealmente, dovresti avere un ambiente di test dedicato dove puoi simulare diversi scenari di guasto (perdita di un datafile, perdita del control file, perdita dell’intero server) e praticare le procedure di ripristino. Documenta ogni passaggio, i tempi di esecuzione e gli eventuali problemi riscontrati. Questo non solo convalida i tuoi backup, ma addestra anche il team a reagire efficacemente sotto pressione. Considera di automatizzare i test di ripristino dove possibile, ad esempio con script Ansible o Python, per garantire coerenza e frequenza. Leggi anche: Ansible: Automatizzare l’Inventario Dinamico da VMware vCenter
Errori comuni e troubleshooting
Durante le operazioni di ripristino, è facile commettere errori o incontrare problemi. Ecco alcuni dei più comuni:
- Control file non sincronizzato: Se il control file nel repository di RMAN non è aggiornato, potresti avere problemi a localizzare i backup. Assicurati che l’autobackup del control file sia abilitato e funzionante.
- Archivelogs mancanti: Per un
RECOVERcompleto o point-in-time, tutti gli archivelogs tra il backup e il punto di ripristino desiderato devono essere disponibili. Se mancano, RMAN non potrà completare l’operazione. Verifica la retention policy degli archivelogs e la loro disponibilità. - Spazio insufficiente: Durante un
RESTORE, RMAN ha bisogno di spazio sufficiente per ripristinare i datafiles. Assicurati che i dischi abbiano capacità adeguata. - Permessi errati: L’utente che esegue RMAN deve avere i permessi corretti per leggere i backup e scrivere i datafiles nella loro posizione. Controlla i permessi a livello di filesystem.
- Database non in ARCHIVELOG mode: Il Point-in-Time Recovery non è possibile se il database non è in modalità ARCHIVELOG. Se il tuo database è in
NOARCHIVELOGmode, puoi solo ripristinarlo allo stato del backup completo più recente (cold backup).
FAQ — Domande Frequenti
Qual è la differenza tra RESTORE e RECOVER in RMAN?
RESTORE è l’operazione che recupera i datafiles, i control files o gli SPFILE dai backup. In pratica, copia i file dal backup al disco. RECOVER, invece, applica i redo logs archiviati (archivelogs) e, se necessario, i redo log online ai datafiles ripristinati per portarli allo stato desiderato, sia esso il più recente possibile o un punto specifico nel tempo. Sono due fasi distinte ma complementari di un’operazione di ripristino.
È obbligatorio un backup completo dopo un RESETLOGS?
Sì, è fortemente raccomandato e in molti contesti obbligatorio. L’operazione ALTER DATABASE OPEN RESETLOGS invalida tutti i backup eseguiti prima di quel momento. Senza un nuovo backup completo, non avresti un punto di partenza valido per futuri ripristini. Eseguire un backup completo immediatamente dopo il RESETLOGS garantisce che la tua strategia di backup sia coerente e affidabile per la nuova incarnazione del database.
Cosa succede se perdo il control file e non ho l’autobackup?
Se non hai un autobackup del control file, la situazione è più complessa ma non disperata. Puoi tentare di ripristinare un control file da un backup completo del database, specificando il tag o la data del backup. In casi estremi, potresti dover ricreare manualmente il control file, ma questa è una procedura avanzata e rischiosa che dovrebbe essere evitata mantenendo sempre l’autobackup abilitato.
Posso ripristinare un database su un server diverso?
Sì, RMAN supporta il ripristino (o duplicazione) di un database su un server diverso, anche con nomi di directory e percorsi diversi. Questa operazione è comune per il Disaster Recovery o per la creazione di ambienti di test/sviluppo. Richiede la configurazione di un’istanza ausiliaria e l’utilizzo del comando DUPLICATE DATABASE o RESTORE/RECOVER con le opzioni SET NEWNAME per i datafiles.
Quanto tempo ci vuole per un ripristino completo?
Il tempo necessario dipende da molti fattori: la dimensione del database, la velocità dello storage (sia per i backup che per i datafiles), la quantità di archivelogs da applicare, la banda di rete (se i backup sono remoti). In un ambiente enterprise, un ripristino di un database da 1 TB con un buon storage può richiedere da 1 a 4 ore. I test regolari sono l’unico modo per avere stime realistiche per il tuo ambiente specifico.
Conclusioni con takeaway operativi
Ripristinare un database Oracle dopo un guasto è una delle responsabilità più critiche di un DBA. La chiave del successo non è solo la conoscenza dei comandi RMAN, ma una strategia proattiva che include la verifica costante dei backup, la simulazione degli scenari di disastro e una profonda comprensione delle implicazioni di ogni operazione. L’esperienza mi ha insegnato che i minuti risparmiati in fase di ripristino si traducono direttamente in milioni di euro risparmiati in potenziale perdita di business. Non aspettare che accada il peggio: investi tempo nella preparazione e nei test. Solo così potrai garantire la continuità operativa anche di fronte agli imprevisti più gravi.
Fonti
Aggiornato: Ottobre 2026