Oracle NOLOGGING. Quando il backup è "Success" ma il Restore è inutilizzabile

Questo articolo descrive un caso tipico in cui il software di backup (in questo caso specifico Rubrik, ma valido per molti altri) completa con successo il backup del database Oracle, ma il dato risulta successivamente inutilizzabile.

L'Incident

Questo caso tocca un punto dolente, molto comune. Rubrik considerava corretti i backup Oracle; tuttavia un test di restore dell’ambiente ha mostrato che, dopo il recover PITR, il database segnalava una serie di blocchi corrotti:

ORA-01578: ORACLE data block corrupted (file # .., block # ..)
ORA-01110: data file 4: '*DISKGROUP/…'
ORA-26040: Data block was loaded using the NOLOGGING option

Una volta aperto il database, l’accesso a determinate tabelle generava errori e il restore risultava inutilizzabile.

La causa

Quando compaiono insieme gli errori ORA-01578 (o ORA-28304, se è abilitata la TDE) e ORA-26040, siamo in presenza di una corruzione “controllata”: l’applicativo ha eseguito operazioni in modalità NOLOGGING, che non generano redo e sono quindi, di fatto, volutamente non recuperabili.

Che un’operazione generi redo oppure no dipende dalla combinazione di tre impostazioni: modalità di logging della tabella, tipo di insert (direct-path con hint APPEND o convenzionale) e modalità di archiviazione del database. La tabella riassume i casi possibili quando non è attivo il FORCE LOGGING:

Table Mode Insert Mode ArchiveLog Mode Result
LOGGING APPEND ARCHIVE LOG Redo generated
NOLOGGING APPEND ARCHIVE LOG No redo (Critical)
LOGGING No append ARCHIVE LOG Redo generated
NOLOGGING No append ARCHIVE LOG Redo generated
LOGGING APPEND NoArchiveLog No redo
NOLOGGING APPEND NoArchiveLog No redo
LOGGING No append NoArchiveLog Redo generated
NOLOGGING No append NoArchiveLog Redo generated

 

Esempio classico: il database è in ARCHIVELOG, la tabella è in modalità NOLOGGING e viene lanciata una insert direct-path con hint /*+ APPEND */. I dati caricati non generano REDO: l’operazione è veloce, ma non è recuperabile in caso di media recovery.

Di norma il DBA (database administrator), d’accordo con il team applicativo, può impostare la modalità NOLOGGING a livello di:

  • tablespace
  • tabella
  • indice
  • partizione
  • sottopartizione

A livello di singola istruzione, invece, possono essere eseguite in NOLOGGING:

  • INSERT direct-path (hint APPEND)
  • CREATE TABLE … AS SELECT (CTAS)
  • CREATE INDEX
  • ALTER TABLE … MOVE
  • ALTER INDEX … REBUILD

Di per sé questa opzione è una funzionalità utile, se usata consapevolmente, ma diventa un enorme problema se usata massicciamente su dati non ricaricabili.

La remediation

Se non si ha il controllo sul codice, si può attivare il FORCE LOGGING a uno di questi livelli:

  • database
  • pluggable database (PDB)
  • tablespace

in modo che si estenda a tutti gli oggetti che contengono.

Con il FORCE LOGGING attivo, Oracle genera redo anche per le operazioni NOLOGGING, che quindi non creano più problemi nei ripristini PITR o nei recover da snapshot.

 

Come diagnosticare la “corruzione silenziosa”

Verificare se i propri backup contengono blocchi corrotti da operazioni NOLOGGING è fondamentale, perché la corruzione non emerge durante il backup, ma solo dopo il ripristino, quando si accede ai dati.

Esistono due metodi principali di verifica:

1. Test di restore funzionale (metodo empirico)

Il metodo più sicuro è pianificare test di restore periodici. Attenzione: non basta che il restore termini con successo e che il database si apra (OPEN). Bisogna leggere davvero i dati delle tabelle critiche, con query che ne scansionino tutti i blocchi, oppure eseguire test applicativi: l’errore ORA-01578 compare solo quando si accede a un blocco corrotto. Una semplice SELECT COUNT(*) può non bastare, perché Oracle può risolverla leggendo un indice senza toccare i blocchi della tabella; meglio forzare la scansione completa, per esempio con SELECT /*+ FULL(t) */ COUNT(*) FROM nome_tabella t;

2. Validazione tecnica con RMAN

Per un controllo più rapido e mirato, senza test applicativi manuali, si può usare RMAN direttamente sul database appena ripristinato (dopo il recover PITR). La procedura varia a seconda della versione di Oracle:

  • A) Oracle 12.2 e versioni successive – su un database ripristinato (dopo il recover PITR), eseguire il comando dedicato: RMAN> VALIDATE DATABASE NONLOGGED BLOCK;

Questo comando scansiona i datafile e popola la vista dinamica v$nonlogged_block. Per vedere i risultati, interrogare la vista via SQL: SELECT * FROM v$nonlogged_block;

  • B) Versioni precedenti alla 12.2 – la sintassi dedicata non è disponibile, quindi si usa il comando di validazione generico: RMAN> VALIDATE DATABASE;

Successivamente, bisogna interrogare la vista che registra i blocchi corrotti:

Per Oracle 11g e 12.1
SELECT * FROM v$database_block_corruption 
WHERE CORRUPTION_TYPE = 'NOLOGGING';

Per versioni precedenti alla 11g (i blocchi NOLOGGING risultano come corruzione LOGICAL)
SELECT * FROM v$database_block_corruption 
WHERE CORRUPTION_TYPE = 'LOGICAL';

È fondamentale capire che i software di backup (come Rubrik, Veeam ecc.) non segnaleranno mai questo errore. Per RMAN, e quindi per il software di backup, un blocco marcato come NOLOGGING non è una corruzione fisica: è un blocco formalmente valido e coerente, di cui Oracle ha scelto di non registrare le modifiche nel redo. Di conseguenza, una dashboard di backup “verde” non garantisce l’assenza di questo problema.

Ti è piaciuto quanto hai letto? Iscriviti a MISPECIAL, la nostra newsletter, per ricevere altri interessanti contenuti.

Iscriviti a MISPECIAL
Contenuti simili
DIGITAL ENTERPRISE
Infrastructure as Code (IaC) con AWS, Terraform e Ansible
lug 15, 2024

Infrastructure as Code (IaC) si riferisce alla pratica di gestire e automatizzare l'infrastruttura IT, utilizzando codice anziché interventi manuali. Con IaC, le risorse infrastrutturali come server, reti e database vengono definite e gestite tramite codice, consentendo un provisioning rapido, consistente e ripetibile dell'infrastruttura.

DIGITAL ENTERPRISE
mag 15, 2026

Software-Defined Network (SDN) e Tecnologia eBPF superano i limiti dei firewall tradizionali in Kubernetes. Un case study pratico su Cilium, Zero-Trust e Network Observability