Una delle utility piu' potenti e piu' nascoste
dell'RBMS Oracle e' il DUL (Data UnLoader).
DUL consente di recuperare i dati da un database corrotto
e non piu' ripristinabile leggendo direttamente i dati in
binario dai datafile.
DUL viene utilizzato solo dal personale Oracle in casi estremi quando tutte le altre modalita' di recupero dei dati hanno fallito.
Questo e gli altri strumenti descritti o anche solo citati in questo documento sono particolamente complessi, potenzialmente molto dannosi e tutti proibiti.
DUL viene utilizzato solo dal personale Oracle in casi estremi
quando tutte le altre modalita' di recupero dei dati dal DB Oracle hanno fallito.
L'unico modo per usufruire di tale servizio e' contattare
la struttura Oracle di supporto ed aprire una SR (Service Request).
Data la gravita' dei casi in cui viene impiegato
e' importante conoscere come funziona in modo da poter
fornire velocemente tutti gli elementi necessari per
il recupero.
DUL e' praticamente non documentato nel sito di supporto Oracle (MOS),
cercando con attenzione si trovano solo alcune tracce del DUL...
quindi lo descrivamo in questa pagina!
Fondamentalmente DUL opera direttamente su datafile
di Oracle conoscendo la struttura interna dei blocchi
di dati e del data dictionary.
I parametri interni di configurazione della base dati
(dimensione del blocco dati, versione di database, ...) vanno
impostati in un file di configurazione.
E' inoltre necessario disporre dell'elenco dei datafile da recuperare.
Oltre a questo ogni ulteriore informazione e' utile.
Ad esempio: la struttura della base dati, versioni di dettaglio e patch,
quali sono gli utenti, la dimensione delle tabelle,
l'utilizzo di funzionalita' particolari quali LOB, TDE, partitioning, UDT, ...
Oracle distribuisce la semplice utility DBVerify
[NdE comando dbv] che consente il controllo di eventuali
blocchi corrotti.
Puo' essere utile per verificare la consistenza del danno.
Ma quando si utilizza il DUL siamo ben oltre alla semplice
corruzione di qualche blocco di dati o di indici.
Non funziona piu' nulla e la base dati non riparte.
Vediamo ora la pratica!
Determinare i datafile e' facile (la query funziona anche con un DB in stato di mount):
Lo script SQL genera il file control.dul che contiene i nomi di tutti i datafile.
Nel file init.dul vanno impostati i parametri fisici della base dati da analizzare. Questi dipendono dall'architettura e della configurazione (eg. COMPATIBLE e' la versione di Oracle). Alcuni sono difficili da trovare (eg. select dump(chartorowid('0.0.1')) from dual; -> osd_dba_file_bits), ma i default suggeriti sono quelli piu' comuni:
osd_big_endian_flag=false osd_dba_file_bits=10 osd_c_struct_alignment=32 osd_file_leader_size=1 osd_word_size = 32 dc_columns=2000000 dc_tables=10000 dc_objects=1000000 dc_users=400 dc_segments=100000 db_block_size=8192 export_mode=true COMPATIBLE=10 LDR_PHYS_REC_SIZE =0
Ora che tutte le impostazioni sono terminate e' possibile utilizzare interattivamente il DUL per estrarre i dati. I dati vengono estratti in formato .dmp o SQL*Loader. Naturalmente bisogna disporre di spazio sufficiente per l'estrazione e di una nuova base dati per ricaricare i dati.
Se tutto e' stato configurato correttamente l'utilizzo di DUL in modalita' interattiva non e' complesso:
L'attivita' di recupero dipende dal tipo di corruzione presente. Se il DUL riesce a recuperare il tablespace di SYSTEM allora accede al data dictionary e recupera in modo piu' semplice le strutture ed i dati. DUL puo' anche recuperare un singolo datafile indovinando i datatype delle colonne e recuperando cosi' comunque alcuni dati. Nei casi piu' gravi (eg. rottura fisica di un disco) e' opportuno incrociare i dati ottenuti dall'estrazione dai tablespace dei dati e di quelli degli indici per quantificare il numero di righe non piu' recuperabili.
Uno dei documenti piu' completi sul DUL rintracciabili in rete e scritto dall'autore del programma, e' questo.
Avete presente fsdb per i file system ed adb per gli eseguibili?
BBED e' l'analogo per Oracle:
un editor binario dei blocchi del database Oracle.
Oracle Block Browser and Editor tool (BBED) si compila facilmente su una 9i o una 10g di Oracle
e, copiando qualche file, anche su una 11g. Come? Basta vedere il sorgente...
BBED richiede una password fissa che si ricava facilmente con strings.
BBED ha un'interfaccia a carattere che consente di analizzare e modificare i blocchi oracle:
BBED puo' essere lanciato con un parfile in cui inserire parametri fissi:
blocksize=8192 listfile=/u01/app/oracle/oracle/product/10.2.0/demo/rdbms/lib/listfile.txt mode=browse
Nella modalita' BROWSE BBED va in sola lettura ed e' utile per studiare il formato dati di Oracle. I comandi piu' utilizzati sono DUMP, PRINT, MAP e FIND. Nella modalita' EDIT BBED scrive sui datafile e puo' corrompere facilmente i dati, in questo caso puo' essere utile per studiare gli strumenti di recovery ed il DB Verify. I comandi utilizzati per modificare i dati sono MODIFY, COPY, CORRUPT: tutti da utilizzare con cautela.
Con BBED si possono fare cose altrimenti impossibili: ripristinare righe cancellate, modificare gli SCN dei blocchi, copiare blocchi di dati, ... e distruggere irrimediabilmente una base dati.
Vediamo ora la pratica!
Una conoscenza profonda delle strutture dati Oracle e' fondamentale
per riuscire ad utilizzare BBED.
Per ottenere i riferimenti ai blocchi da controllare e'
utile la stored procedure ROWID_INFO. Ad esempio:
Ora che sappiamo cosa cercare e cosa sostituire lavoriamo sui datafile di un altro database con BBED:
Come si capisce chiaramente il comando PRINT riconosce le strutture dei blocchi Oracle ed accede ai sui puntatori. E' cosi' facile trovare le righe all'interno di un blocco (notate che sono scritte dal basso all'alto) ed puntare esattamente al byte dove si vogliono modificare i dati...
Vi sono una serie di programmi alternativi a DUL realizzati da terze parti. Tipicamente viene fornito il servizio di recupero dati o una licenza one-shot per un solo database e per un periodo limitato di tempo.
Naturalmente non vi e' nessuna garanzia che funzionino... ma nessuno puo' onestamente fornirla, neanche DUL.
Utilizzando programmi non forniti da Oracle
vanno tenuti in conto tutti gli aspetti relativi alla riservatezza dei dati ed al Copyright...
ODU (Oracle Database Unloader) e' un'alternativa al DUL distribuito da OracleODU. I suoi punti di forza sono: supporta l'ASM, e' disponibile una versione trial che consente di verificarne il funzionamento, i file di configurazione sono piu' semplici di quelli del DUL. ODU e' scritto in C e genera file caricabili con SQL*Loader: e' molto veloce.
Nel file control.txt vanno indicati i datafile, sul file asmdisk.txt vanno indicati gli eventuali dischi ASM. Il file config.txt contiene la configurazione, generalmente l'unica modifica necessaria e' quella del PATH su cui scaricare i dati. Il file oductl.dat e' in formato binario e viene fornito da OracleODU quando viene acquistata la licenza.
jDUL/DUDE (Database Unloading by Data Extraction) e' una nota versione Java di DUL.
Per evitare utilizzi non autorizzati e' necessario inviare i dati di dettaglio
della base dati da recuperare (probe), quindi si ottiene una copia del programma
in grado di operare solo sul sistema e sulla base dati analizzata.
Il probe della base dati si effettua configurando il file DUDE_PROBE.cfg con
i datafile da estrarre e lanciando il programma DUDE_PROBE.jar.
Il file ottenuto puo' essere inviato dal sito ORA-600 oppure via email e si ottiene in risposta il
programma definitivo (DUDE.tar).
Scaricato il programma per eseguirlo basta lanciare: java DUDE.
AUL(MyDUL) e' un'altra recente alternativa a DUL. AUL e' disponibile sulle principali piattaforme e, senza licenza, estrae 1GB dal tablespace di SYSTEM e 512MB dagli altri tablespace. Forse e' un poco piu' complesso da utilizzare degli altri tool... ma forse anche meno costoso!
DBRECOVER, chiamato in precedenza PRM-DUL e' un'altra versione in java del programma che e' anche disponibile su Sourceforge [NdA ma la versione pubblica e' limitata a 10.000 righe estratte].
Il DUL e' tenuto ben nascosto... anche nei siti di supporto Oracle. Se ne trovano tracce in: COLD RMAN backup fails: Ora-19602 even after SHUTDOWN IMMEDIATE and STARTUP MOUNT (Doc ID 373828.1), ...
DUL e' stato scritto da Bernard van Duijnen per Oracle. DUDE e' stato scritto da Kurt Van Meerbeeck di ORA-600. ODU e' stato scritto da Xiong Jun ed e' supportato da Cui Hua. I miei complimenti a tutti loro!
Un documento introduttivo alle problematiche di recupero dei dati su Oracle e' Attivita' di recovery sull'RDBMS Oracle.
Altri documenti di questo tipo su questa pagina
Titolo: DUL. Life is DUL without need of it
Livello: Hack
Data:
14 Febbraio 2014
Versione: 1.0.1 - 14 Febbraio 2015
Autore: mail [AT] meo.bogliolo.name