Kosmous beyond the clouds: Sviluppo, Formazione e Consulenza Informatica

Oracle DBA 9i - Cap. 4

Il Control File (CF) è, come dice il termine stesso, il file di controllo dell’intero database.
Il CF è uno solo, ma è possibile avere dei mirror (copie identiche, aggiornate , fino ad un massimo di 8. Oracle consiglia vivamente di tenerne almeno 2, su dischi diversi. Se infatti si danneggiano tutti i CF, il database non sarà più funzionante, ed occorrerà ricrearlo, operazione particolarmente delicata e pericolosa. Per questo è bene farne delle copie di backup, anzi si consiglia di farne un backup dopo ogni modifica strutturale al database (come l’aggiunta di files, tablespaces etc.).

Al suo interno sono registrate le seguenti informazioni:
  • nome db
  • timestamp di creazione del db
  • DF: nome, path, stato (online/offline)
  • RLF: nome, path
  • Informazioni sullo stato archive
  • nome tablespaces
  • LSN (Log Sequence number) corrente
  • info sul Checkpoint più recente
  • inizio e fine degli Undo segments
  • informazioni di BackUp di RMAN
La dimensione del CF è legata al valore dei seguenti parametri:
  • MAXLOGFILES
  • MAXLOGMEMBERS
  • MAXLOGHISTORY
  • MAXDATAFILES
  • MAXINSTANCES
Il CF viene aggiornato dai seguenti processi:
  • Processo Server (aggiunta di files al db)
  • LGWR (scrive LSN corrente)
  • CKPT
  • ARCn (LSN e nome file archiviati)


4.1 MIRROR

Per mirrorare il CF esistente devo distinguere due casi, a secondo se il database è avviato con PFILE o con SPFILE:

Database avviato con PFILE
  1. Eseguire lo Shutdown del database.

  2. Eseguire, da Sistema Operativo, la copia del CF originale (o di uno qualunque dei CF esistenti se ne ho più di uno).
  3. Modificare il parametro CONTROL_FILES indicando anche la posizione del nuovo CF ( Es:
    CONTROL_FILES = "C:oracleoradataORCLcontrol01.ctl", 
    		"C:oracleoradataORCLcontrol02.ctl", 
    		"C:oracleoradataORCLcontrol03.ctl")
  4. Riavviare il database (STARTUP)

Database avviato con SPFILE
  1. Lanciare da SQLPLUS il comando:
  2. SQL> ALTER SYSTEM SET CONTROL_FILES = 
    	"C:oracleoradataORCLcontrol01.ctl", 
    	"C:oracleoradataORCLcontrol02.ctl", 
    	"C:oracleoradataORCLcontrol03.ctl" 
    	SCOPE=SPFILE;
  3. Eseguire lo Shutdown del database.
  4. Eseguire, da Sistema Operativo, la copia del CF originale (o di uno qualunque dei CF esistenti se ne ho più di uno).
  5. Riavviare il database (STARTUP)


4.2 CREAZIONE DI NUOVI CF

La creazione di un nuovo CF è un’operazione delicata che va eseguita solo in alcuni casi:
  • Tutti i CF esistenti sono danneggiati o non più disponibili.
  • Si vuol cambiare il nome del Database.
  • Si vogliono cambiare alcune delle clausole che ne determinano la dimensione, come MAXLOGFILES o MAXDATAFILES

1) Devo preparare il comando per la creazione del CF. Il comando dovrà contenere l’elenco completo di tutti i files del database (DF ed RLF). Nella sezione successiva vedremo come fare ad estrarre il comando dal database attivo.

2) Eseguire lo shutdown del database.

3) Avviare solo l’istanza (STARTUP NOMOUNT)

4) Eseguire il comando:

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 'C:ORACLEORADATAORCLREDO01.LOG'  SIZE 10M,
  GROUP 2 'C:ORACLEORADATAORCLREDO02.LOG'  SIZE 10M,
  GROUP 3 'C:ORACLEORADATAORCLREDO03.LOG'  SIZE 10M
DATAFILE
  'C:ORACLEORADATAORCLSYSTEM01.DBF',
  'C:ORACLEORADATAORCLUNDOTBS01.DBF',
  'C:ORACLEORADATAORCLDRSYS01.DBF',
  'C:ORACLEORADATAORCLINDX01.DBF',
  'C:ORACLEORADATAORCLTOOLS01.DBF',
  'C:ORACLEORADATAORCLUSERS01.DBF',
  'C:ORACLEORADATAORCLXDB01.DBF',
  'C:ORACLEORADATAORCLUSERS2.ORA'
CHARACTER SET WE8MSWIN1252
;
NB: il CF verrà creato basandosi sul valore di CONTROL_FILES presente nel PFILE o SPFILE, dipende dal metodo con il quale ho attivato l’istanza.

5) Infine si apre il database che è già nello stato NOMOUNT (ALTER DATABASE OPEN)

Prima di lanciare il comando CREATE CONTROLFILE conviene sempre fare una copia a freddo (con database chiuso) di tutti i files del database. Se ci si dimentica di elencare un DF ( o si sbaglia la sua Path), quando si apre il database, il sistema andrà in modalità RECOVERY, perché il timestamp del CF sarà diverso dal timestamp degli altri file. Quindi cercherà di ripristinare la completa operatività del database verificando (e modificando) i file esistenti. Se il file mancante appartiene ad un tablespace esso, con tutti i dati ivi memorizzati, non sarà più disponibile.
In questo caso dovrò eseguire delle operazioni di media recovery per ripristinarne il contenuto. O ppure dovrò ripetere l’operazione, ma non potrò farla con i files attuali, in quanto sono stati modificati dal RECOVERY, bensì dovrò ripristinare i file che ho precedentemente copiato prima di lanciare il comando CREATE CONTROLFILE.


Per generare in automatico il comando CREATE CONTROLFILE del Db corrente posso usare il comando:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
che creerà un file (orcl_ora_nnnn.trc) nella directory UDUMP (quella definita dal parametro USER_DUMP_DEST).
Oppure posso usare un altro comando il cui contenuto è in formato binario:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO ‘’ REUSE;



4.3 Ricavare informazioni sui CF.

Per avere informazioni sullo stato dei CF, posso utilizzare alcune viste:

V$CONTROLFILE
La colonna STATUS indica lo stato del corrispondente file. Se viene indicato INVALID significa che il CF non è disponibile (potrebbe essere danneggiato).
SQL> SELECT * FROM V$CONTROLFILE;

STATUS  NAME
------- ------------------------------------------------
        C:ORACLEORADATAORCLCONTROL01.CTL
        C:ORACLEORADATAORCLCONTROL02.CTL
        C:ORACLEORADATAORCLCONTROL03.CTL
		
Oppure:
SQL> show parameter control_files

NAME           TYPE     VALUE
-----          -------  ------------------------------
control_files  string   C:ORACLEORADATAORCLCONTROL01.CTL,
                        C:ORACLEORADATAORCLCONTROL02.CTL, 
                        C:ORACLEORADATAORCLCONTROL03.CTL
Per avere informazioni sul contenuto del CF, posso fare query sulla vista V$CONTROLFILE_RECORD_SECTION:

SQL> SELECT * FROM V$CONTROLFILE_RECORD_SECTION;

TYPE                 RECORD_SIZE RECORDS_TOTAL RECORDS_USED
-------------------- ----------- ------------- ------------
DATABASE                     192             1            1
CKPT PROGRESS               4084             4            0
REDO THREAD                  104             1            1
REDO LOG                      72             5            3
DATAFILE                     180           100            8
FILENAME                     524           116           12
TABLESPACE                    68           100            9
TEMPORARY FILENAME            56           100            2
RMAN CONFIGURATION          1108            50            0
LOG HISTORY                   36           226          199
OFFLINE RANGE                 56           145            0
ARCHIVED LOG                 584            13            0
BACKUP SET                    40           204            0
BACKUP PIECE                 736           210            0
BACKUP DATAFILE              116           211            0
BACKUP REDOLOG                76           107            0
DATAFILE COPY                660           210            1
BACKUP CORRUPTION             44           185            0
COPY CORRUPTION               40           204            0
DELETED OBJECT                20           408            0
PROXY COPY                   852           210            0
BACKUP SPFILE                 36           226            0
DATABASE INCARNATION          56           145            1




Vi invitiamo ad inviarci commenti, eventuali segnalazioni di errore e quant'altro.



Questo documento non è un documento ufficiale della Oracle Corporation. Oracle detiene tutti i diritti sulla propria documentazione. Alcuni termini usati sono trademarks registrati. In caso di dubbi o incertezze consultate la documentazione ufficiale di Oracle o contattate il Customer Support di Oracle.
<< Capitolo 3 Capitolo 5 >>
Commenti (0)2005-02-21