Fichier de Contrôle : Administration
Date de publication : le 04 Avril 2005
Par
Bouyao Les fichiers de contrôle 8/8i/9i/10g
1. Description du fichier de contrôle
2. Multiplexage des fichiers de contrôle
2.1. Multiplexage des fichiers de contrôle en utilisant le pfile
2.2. Multiplexage des fichiers de contrôle en utilisant le spfile
3. Sauvegarde du fichier de contrôle
4. Informations sur les fichiers de contrôle
4.1. La vue V$CONTROLFILE
4.2. La vue V$CONTROLFILE_RECORD_SECTION
5. Création d'un fichier de contrôle
6. Déplacement d'un fichier de contrôle
7. Suppression d'un fichier de contrôle
8. Restauration d'un fichier de contrôle corrompu à partir d'un autre fichier valide
1. Description du fichier de contrôle
Le fichier de contrôle est un fichier binaire ; il contient des informations sur la structure physique de la base. Il est créé pendant la création de la base et il est modifié en permanence.
Ce fichier doit être toujours disponible car il est consulté; et modifié fréquemment par le serveur oracle. Et il est indispensable pour la restauration de la base.
Le fichier de contrôle contient les informations suivantes :
- Informations sur la base
- Historique des fichiers de journalisation archivés
- Informations sur les tablespaces et les fichiers de données (nom de fichier, checkpoints du fichier de données, statut lecture/écriture, en ligne ou non)
- Les journaux en ligne
- Date et heure de création de la base
- Le nom de la base
- Le mode d'archivage actuel
- Les numéros de séquence (de chaque journal)
- Informations sur RMAN
- Information Flashback (10g)
- Informations sur les blocs corrompus
- L'ID de la base
On peut utiliser un seul fichier de contrôle mais Oracle en préconise au minimum deux sur des disques différents. Perdre tous les fichiers de contrôle rend difficile la restauration de la base.
La taille du fichier de contrôle dépend en principe de la valeur des paramètres MAXDATAFILES, MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, et MAXINSTANCES définis pendant la création de la base.
2. Multiplexage des fichiers de contrôle
Pour afficher les noms des fichiers de contrôle on utilise :
SHOW PARAMETER CONTROL_FILES |
ou
SELECT VALUE FROM V$PARAMETER WHERE NAME='control_files'; |
2.1. Multiplexage des fichiers de contrôle en utilisant le pfile
Pour multiplexer les fichiers de contrôle, il suffit de copier un des fichiers dans un autre emplacement et de l'indiquer dans le paramètre CONTROL_FILES du fichier d'initialisation initSID.ora
Supposons qu'on a deux fichiers de contrôle /disk1/oradata/ctrlBASE01.ctl et /disk2/oradata/ctrlBASE02.ctl et qu'on veut ajouter un troisième fichier /disk3/oradata/ctrlBASE03.ctl
- Visualiser les fichiers de contrôle existants
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files'; |
- Modifier le paramètre CONTROL_FILES dans le fichier initSID.ora
CONTROL_FILES = ('/disk1/oradata/BASE/ctrlBASE01.ctl','/disk2/oradata/ BASE /ctrlBASE2.ctl',
'/disk3/oradata/ BASE /ctrlBASE03.ctl') |
- Copier le fichier de contrôle en utilisant les commandes OS
Sous Unix
cp /disk1/oradata/BASE/ctrlBASE01.ctl /disk3/oradata/BASE/ctrlBASE03.ctl |
Oracle met à jours les fichiers de contrôle en même temps, mais seul le premier fichier cité dans le paramètre CONTROL_FILES est consulté.
En oracle9i vous pouvez multiplexer jusqu'à 8 copies de fichiers de contrôle.
2.2. Multiplexage des fichiers de contrôle en utilisant le spfile
- 1. Ajouter le nouveau fichier de contrôle /disk3/oradata/BASE/ctrlBASE03.ctl dans le paramètre CONTROL_FILES en utilisant
ALTER SYSTEM SET CONTROL_FILES =
('/disk1/oradata/BASE/ctrlBASE01.ctl','/disk2/oradata/ BASE /ctrlBASE2.ctl',
'/disk3/oradata/ BASE /ctrlBASE03.ctl') SCOPE=SPFILE; |
- 3. Copier le fichier de contrôle en utilisant les commandes OS.
Sous unix
cp /disk1/oradata/BASE/ctrlBASE01.ctl /disk3/oradata/BASE/ctrlBASE03.ctl |
3. Sauvegarde du fichier de contrôle
Il y a deux façons de sauvegarder le fichier de contrôle :
ALTER DATABASE BACKUP CONTROLFILE TO nom_du_fichier |
Cette commande sauvegarde le fichier de contrôle en un fichier binaire.
L'autre façon est :
ALTER DATABASE BACKUP CONTROLFILE TO TRACE; |
Cette commande crée un fichier en format texte dans le répertoire USER_DUMP_DEST, qu'on peut modifier pour reconstruire un nouveau fichier de contrôle.
Oracle recommande de sauvegarder le fichier de contrôle à chaque modification de la structure de la base comme le fait d'ajouter, renommer ou supprimer un fichier de données ou un fichier journal.
4. Informations sur les fichiers de contrôle
Les vues suivantes affichent des informations sur les fichiers de contrôle :
- V$DATABASE
- V$CONTROLFILE
- V$CONTROLFILE_RECORD_SECTION
- V$PARAMETER
4.1. La vue V$CONTROLFILE
La vue V$CONTROLFILE affiche tous les noms des fichiers de contrôle et leur statut qui peut être NULL ou INVALID.
SELECT * FROM V$CONTROLFILE;
STATUS NAME
/ora01/oradata/MYDB/ctrlMYDB01.ctl
/ora02/oradata/MYDB/ctrlMYDB02.ctl
/ora03/oradata/MYDB/ctrlMYDB03.ctl
3 rows selected. |
On peut visualiser ces informations avec la commande
show parameter control_files
NAME TYPE VALUE
control_files string H:\Oracle9i\oradata\or90\CONTROL01.CTL,
H:\Oracle9i\oradata\or90\CONTROL02.CTL,
H:\Oracle9i\oradata\or90\CONTROL03.CTL |
4.2. La vue V$CONTROLFILE_RECORD_SECTION
La vue V$CONTROLFILE_RECORD_SECTION contient plusieurs informations sur le fichier de contrôle.
select * from v$controlfile_record_section;
TYPE RECORD RECORDS RECORDS FIRST LAST LAST
SIZE TOTAL USED INDEX INDEX RECID
DATABASE 192 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 104 8 1 0 0 0
REDO LOG 72 16 3 0 0 9
DATAFILE 180 100 5 0 0 18
FILENAME 524 149 9 0 0 0
TABLESPACE 68 100 6 0 0 2
TEMPORARY FILENAME 56 100 1 0 0 1
RMAN CONFIGURATION 1108 50 0 0 0 0
LOG HISTORY 36 454 29 1 29 29
OFFLINE RANGE 56 292 0 0 0 0
ARCHIVED LOG 584 28 0 0 0 0
BACKUP SET 40 409 0 0 0 0
BACKUP PIECE 736 200 0 0 0 0
BACKUP DATAFILE 116 282 0 0 0 0
BACKUP REDOLOG 76 215 0 0 0 0
DATAFILE COPY 660 223 1 1 1 1
BACKUP CORRUPTION 44 371 0 0 0 0
COPY CORRUPTION 40 409 0 0 0 0
DELETED OBJECT 20 818 1 1 1 1
PROXY COPY 852 249 0 0 0 0
BACKUP SPFILE 36 454 0 0 0 0
DATABASE INCARNATION 56 292 4 1 4 4
FLASHBACK LOG 84 2048 0 0 0 0
RECOVERY DESTINATION 180 1 1 0 0 0
INSTANCE SPACE RESERVATION 28 63 1 0 0 0
REMOVABLE RECOVERY FILES 32 1000 0 0 0 0
RMAN STATUS 116 141 0 0 0 0
THREAD INSTANCE NAME MAPPING 80 8 8 0 0 0
MTTR 100 8 1 0 0 0
DATAFILE HISTORY 568 57 0 0 0 0
31 rows selected |
On'a
- TYPE : Type de la section
- RECORD_SIZE : Taille d'une entrée en bits
- RECORDS_TOTAL : Nombre d'entrées allouées pour la section (qu'elles soient occupées ou non)
- RECORDS_USED : Nombres d'entrées utilisées dans la section
- FIRST_INDEX : Index de la première entrée
- LAST_INDEX : Index de la dernière entrée
- LAST_RECID : Id de la dernière entrée
C'est dans cette vue qu'on trouve les valeurs de MAXLOGFILES, MAXDATAFILES, MAXINSTANCES, MAXINSTANCES et MAXLOGHISTORY
Type RECORDS_TOTAL
REDO LOG 16 MAXLOGFILES
DATAFILE 100 MAXDATAFILES
REDO THREAD 8 MAXINSTANCES
LOG HISTORY 454 MAXLOGHISTORY |
Pour afficher la valeur de MAXLOGMEMBERS on utilise la vue X$KCCDI :
select dimlm from x$kccdi; |
Il existe des vues qui lisent directement dans le fichier de contrôle au lieu de lire dans le dictionnaire de données comme :
V$ARCHIVED_LOG, V$BACKUP, V$BACKUP_DATAFILE, V$BACKUP_PIECE, V$BACKUP_REDOLOG, V$BACKUP_SET, V$DATABASE, V$DATAFILE, V$DATAFILE_COPY, V$DATAFILE_HEADER, V$LOG, V$LOGFILE, V$THREAD
On peut vérifier les accès au fichier de contrôle de ces vues par :
Select sid, event, total_waits from v$session_event where event='control file sequential read'; |
5. Création d'un fichier de contrôle
Il est nécessaire de créer les fichiers de contrôle:
- Si tous les fichiers de contrôle sont perdus ou corrompus
- En cas de changement du nom de la base
- En cas de modification de certains paramètres en dur comme MAXDATAFILES, MAXLOGFILES, MAXLOGHISTROY, ...
- Si vous voulez déplacer la base sur une autre machine et que l'emplacement des fichiers de données et des fichiers journaux est différent des emplacements originaux.
Le fichier de contrôle initial est créé pendant la création de la base. Son nom est spécifié dans le paramètre d'initialisation CONTROL_FILES et voici un exemple :
CONTROL_FILES = (/u01/oracle/mabase/control01.ctl,
/u02/oracle/mabase/control02.ctl,
/u03/oracle/mabase/control03.ctl) |
Si vous utilisez OMF vous n'avez pas besoin de spécifier le fichier de contrôle dans le fichier d'initialisation. Oracle prend en compte l'emplacement du fichier de contrôle suivant ces paramètres dans l'ordre : DB_CREATE_ONLINE_LOG_DEST_n, DB_CREATE_FILE_DEST et DB_RECOVERY_FILE_DEST
Même si le paramètre CONTROL_FILES n'est pas spécifié dans le fichier d'initialisation, oracle le crée automatiquement dans le répertoire par défaut de l' OS. Le fichier crée n'est pas un OMF.
Il faut avoir le privilège sysdba pour créer un fichier de contrôle.
Si le paramètre REMOTE_LOGIN_PASSWORDFILE =EXCLUSIVE, oracle signale une erreur. Il faut donc affecter à ce paramètre la valeur SHARED ou créer un nouveau fichier de mot de passe.
Si le fichier de contrôle existe déjà, il faut utiliser CONTROLFILE REUSE au lieu de CONTROLFILE SET dans la clause CREATE DATABASE, et si la taille de l'ancien fichier est différente du nouveau on ne peut pas utiliser l'option REUSE.
On peut créer un nouveau fichier de contrôle en utilisant CREATE CONTROLFILE et voici un exemple :
CREATE CONTROLFILE
SET DATABASE mabase
LOGFILE GROUP 1 ('/u01/oracle/mabase/redo01_01.log',
'/u01/oracle/mabase/redo01_02.log'),
GROUP 2 ('/u01/oracle/mabase/redo02_01.log',
'/u01/oracle/mabase/redo02_02.log'),
GROUP 3 ('/u01/oracle/mabase/redo03_01.log',
'/u01/oracle/mabase/redo03_02.log')
NORESETLOGS
DATAFILE '/u01/oracle/mabase/system01.dbf' SIZE 3M,
'/u01/oracle/mabase/rbs01.dbs' SIZE 5M,
'/u01/oracle/mabase/users01.dbs' SIZE 5M,
'/u01/oracle/mabase/temp01.dbs' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG; |
Il faut faire très attention pendant la création du fichier de contrôle car il peut endommager les fichiers de données et les fichiers journaux. Et le fait d'oublier de mentionner un fichier de données pendant la création du fichier de contrôle peut causer la perte de ce fichier et même la perte de la base entière. Il faut encore faire attention si vous utilisez le mode FORCE LOGGING.
Les étapes à suivre pour créer un nouveau fichier de contrôle :
- Lister tous les fichiers de données et de journaux en ligne
Soit en utilisant le fichier trace lancé par la commande :
ALTER DATABASE BACKUP CONTROLFILE TO TRACE; |
Sinon vous pouvez utiliser les vues suivantes :
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'CONTROL_FILES'; |
Si vous n'avez pas ces informations vous ne pouvez pas ouvrir la base.
- Sauvegarder tous vos fichiers de données et journaux
- Démarrer la base en mode nomount
- Créer le nouveau fichier de contrôle en utilisant CREATE CONTROLFILE
Si vous avez perdu l'un des groupes de fichiers journaux ou si vous avez renommé la base, utilisez l'option RESETLOGS, sinon utilisez l'option NORESETLOGS.
Quand on utilise l'option NORESETLOGS, oracle compare le numéro de groupe spécifié dans CREATE CONTROLFILE et l'entête du fichier journal. Si la comparaison échoue on aura le message suivant :
01224, 00000, "group number in header %s does not match GROUP %s"
// *Cause: Group number specified at CREATE CONTROLFILE does not match the
// group number stored in the header. Most likely the specification
// is wrong.
// *Action: Omit the GROUP option or give the correct one. |
Ce qui veut dire que le fichier journal :
- Appartient à une autre instance ou
- Le numéro de groupe est erroné dans CREATE CONTROLFILE ou
- Est une copie ancienne
- Sauvegarder le nouveau fichier de contrôle
- Modifier le fichier d'initialisation pour indiquer les nouveaux fichiers de contrôle et si vous renommez la base n'oubliez pas de le mentionner dans le paramètre DB_NAME.
- Si la restauration de la base n'était pas nécessaire vous pouvez ouvrir la base avec ALTER DATABASE OPEN;
Si le nouveau fichier de contrôle est créé avec l'option NORESETLOGS vous pouvez restaurer la base complètement, et s'il est crée avec l'option RESETLOGS vous devez utiliser USING BACKUP CONTROL FILE et ouvrir la base avec ALTER DATABASE OPEN RESETLOGS;
6. Déplacement d'un fichier de contrôle
Supposons qu'on'a trois fichiers de contrôle :
u01/oracle/mabase/control01.ctl,
u02/oracle/mabase/control02.ctl,
u03/oracle/mabase/control03.ctl
et on veut déplacer le fichier control03.ctl dans u04/oracle/mabase/control03.ctl.
- Arrêter la base normalement
- Déplacer les fichiers de contrôle
mv u03/oracle/mabase/control03.ctl u04/oracle/mabase/control03.ctl |
- Modifier le paramètre CONTROL_FILES dans le fichier initSID.ora si vous utilisez le pfile
control_files = (u01/oracle/mabase/control01.ctl,
u02/oracle/mabase/control02.ctl,u04/oracle/mabase/control03.ctl ) |
7. Suppression d'un fichier de contrôle
Supposons qu'on'a trois fichiers de contrôle :
u01/oracle/mabase/control01.ctl,
u02/oracle/mabase/control02.ctl,
u03/oracle/mabase/control03.ctl
et on veut supprimer control03.ctl.
- Arrêter la base normalement
- Modifier le paramètre CONTROL_FILES dans le fichier initSID.ora si vous utilisez le pfile
control_files = (u01/oracle/mabase/control01.ctl,
u02/oracle/mabase/control02.ctl) |
- N'oubliez pas de supprimer le fichier de contrôle avec votre système d'exploitation
rm u01/oracle/mabase/control03.ctl |
8. Restauration d'un fichier de contrôle corrompu à partir d'un autre fichier valide
Supposons qu'on'a trois fichiers de contrôle :
u01/oracle/mabase/control01.ctl,
u02/oracle/mabase/control02.ctl,
u03/oracle/mabase/control03.ctl
et que le fichier control03.ctl est corrompu.
- Arrêter la base normalement
- Copier le fichier de contrôle valide en écrasant le fichier corrompu
cp u01/oracle/mabase/control01.ctl u03/oracle/mabase/control03.ctl |
 
|