Ricreazione del Controlfile e missing datafiles

martedì 8 luglio 2008 alle 08:51 | Pubblicato su Backup and Recovery | Lascia un commento
Tag: , ,

Studiando per la certificazione (e si sono un po’ lungo)  ho scoperto un’altra cosa nuova. Se ricreo il controlfile e dimentico di mettere qualche datafile nello script di creazione, Oracle al momento dell’apertura del database fa un controllo incrociato tra le informazioni del controlfile e quelle del dizionario dati, in questa fase può essere che appunto trovi nel dizionario dati dei datafile che nel controlfile non ci sono. In questo caso quello che accade è ben descritto nell’alert.log:

“Tablespace ‘USERS16K’ #5 found in data dictionary,
but not in the controlfile. Adding to controlfile.
File #5 found in data dictionary but not in controlfile.
Creating OFFLINE file ‘MISSING00005’ in the controlfile.

Questa situazione è facilmente riscontrabile se si ricrea il controlfile usando lo script creato con l’istruzione “ALTER DATABASE BACKUP CONTROLFILE TO TRACE” mentre una o più tablespace sono in modalità “READ ONLY”: in questo caso Oracle non include nello script di creazione del controlfile i datafile appartenenti alla tablespace in modalità READ ONLY. Questo comportamente pare dovuto al fatto che oracle ritenga che essendo la tablespace in modalità  READ ONLY non abbia bisogno di recovery …

In ogni caso, nel mio ambiente di test (10.2.0.4) nel trace compare anche

ALTER DATABASE OPEN RESETLOGS;
— Files in read-only tablespaces are now named.
ALTER DATABASE RENAME FILE ‘MISSING00004’
TO ‘/opt/oracle/oradata/test102/users01.dbf’;
— Online the files in read-only tablespaces.
ALTER TABLESPACE “USERS” ONLINE;
— Commands to add tempfiles to temporary tablespaces.
— Online tempfiles have complete space information.
— Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD
TEMPFILE ‘/opt/oracle/oradata/test102/temp01.dbf’
SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360 ;

Facendo questo questi test mi sono trovato di fronte ad un’altra situazione interessante: ho simulato la perdita completa del database, e disponevo solo di un backup completo del database stesso fatto con RMAN  e di tutti gli archived logs. Inizialmente pensavo di poter ricreare i controlfile con lo script generato con il trace, ma non è così, infatti:

SQL> CREATE CONTROLFILE  DATABASE “TEST102” RESETLOGS  ARCHIVELOG
2      MAXLOGFILES 16
3      MAXLOGMEMBERS 3
4      MAXDATAFILES 100
5      MAXINSTANCES 8
6      MAXLOGHISTORY 292
7  LOGFILE
8    GROUP 1 ‘/opt/oracle/oradata/test102/redo01.log’  SIZE 50M,
9    GROUP 2 ‘/opt/oracle/oradata/test102/redo02.log’  SIZE 50M,
10    GROUP 3 ‘/opt/oracle/oradata/test102/redo03.log’  SIZE 50M
11  — STANDBY LOGFILE
12  DATAFILE
13    ‘/opt/oracle/oradata/test102/system01.dbf’,
14    ‘/opt/oracle/oradata/test102/undotbs01.dbf’,
15    ‘/opt/oracle/oradata/test102/sysaux01.dbf’,
16    ‘/opt/oracle/oradata/test102/users01.dbf’,
17    ‘/opt/oracle/oradata/test102/users16k01.dbf’
18  CHARACTER SET AL32UTF8
19  ;
CREATE CONTROLFILE  DATABASE “TEST102” RESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file ‘/opt/oracle/oradata/test102/system01.dbf’
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

Quindi ho capito perchè in automatico RMAN quando viene fatto il backup della tablespace SYSTEM include anche il controlfile.

Si tratta di cose che per chi è esperto possono essere banali, ma i dettagli e le situazioni che si possono presentare sono talmente tanti che qualcosa può sempre sfuggire. Per conto mio ho sempre cercato di essere superprevidente nelle mie politiche di backup, quindi vi è sempre un backup esplicito del controlfile. Anche perchè in 9i mi pare non vi fosse il modo (almeno documentato) di registrare un backup sul control file se questo era stato ricreato. Quindi perdendo il control file  si perdevano anche le info dei backup (a meno di non usare un recovery catalog come consigliato da Oracle). In 10g, anche ricreando un controlfile o ripristinandone uno vecchio, è possibile registrare i backup fatti e quindi utilizzarli. Ripeto: preferisco essere iperprevidente ed evitare di trovarmi in situazioni simili.

Lascia un commento »

RSS feed for comments on this post. TrackBack URI

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: