Fichier de Contrôle : Administration

Les fichiers de contrôle 8/8i/9i/10g

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. 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.

II. Multiplexage des fichiers de contrôle

Pour afficher les noms des fichiers de contrôle on utilise :

 
Sélectionnez
SHOW PARAMETER CONTROL_FILES

Ou

 
Sélectionnez
SELECT VALUE FROM V$PARAMETER WHERE NAME='control_files';

II-A. 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

     
    Sélectionnez
    SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
  • Arrêter la base

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Modifier le paramètre CONTROL_FILES dans le fichier initSID.ora

     
    Sélectionnez
    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

 
Sélectionnez
cp /disk1/oradata/BASE/ctrlBASE01.ctl  /disk3/oradata/BASE/ctrlBASE03.ctl
  • Démarrer la base
 
Sélectionnez
STARTUP

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.

II-B. Multiplexage des fichiers de contrôle en utilisant le spfile

  • Ajouter le nouveau fichier de contrôle /disk3/oradata/BASE/ctrlBASE03.ctl dans le paramètre CONTROL_FILES en utilisant

     
    Sélectionnez
    ALTER SYSTEM SET CONTROL_FILES =
    ('/disk1/oradata/BASE/ctrlBASE01.ctl','/disk2/oradata/ BASE /ctrlBASE2.ctl',
    '/disk3/oradata/ BASE /ctrlBASE03.ctl') SCOPE=SPFILE;
  • Arrêter la base

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Copier le fichier de contrôle en utilisant les commandes OS.

Sous Unix

 
Sélectionnez
cp /disk1/oradata/BASE/ctrlBASE01.ctl  /disk3/oradata/BASE/ctrlBASE03.ctl
  1. Démarrer la base
 
Sélectionnez
STARTUP

III. Sauvegarde du fichier de contrôle

Il y a deux façons de sauvegarder le fichier de contrôle :

 
Sélectionnez
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 :

 
Sélectionnez
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.

IV. 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

IV-A. 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.

 
Sélectionnez
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

 
Sélectionnez
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

IV-B. La vue V$CONTROLFILE_RECORD_SECTION

La vue V$CONTROLFILE_RECORD_SECTION contient plusieurs informations sur le fichier de contrôle.

 
Sélectionnez
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

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
Select sid, event, total_waits from v$session_event where event='control file sequential read';

V. 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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Sinon vous pouvez utiliser les vues suivantes :

 
Sélectionnez
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.

  • Arrêter la base

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Sauvegarder tous vos fichiers de données et journaux
  • Démarrer la base en mode nomount

     
    Sélectionnez
    STARTUP NOMOUN
  • 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 :

 
Sélectionnez
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 :

  1. Appartient à une autre instance ou
  2. Le numéro de groupe est erroné dans CREATE CONTROLFILE ou
  3. 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;

VI. 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

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Déplacer les fichiers de contrôle

     
    Sélectionnez
    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

     
    Sélectionnez
    control_files = (u01/oracle/mabase/control01.ctl, 
    u02/oracle/mabase/control02.ctl,u04/oracle/mabase/control03.ctl )
  • Démarrer la base
 
Sélectionnez
STARTUP

VII. 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

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Modifier le paramètre CONTROL_FILES dans le fichier initSID.ora si vous utilisez le pfile

     
    Sélectionnez
    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

     
    Sélectionnez
    rm u01/oracle/mabase/control03.ctl
  • Démarrer la base
 
Sélectionnez
STARTUP

VIII. 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

     
    Sélectionnez
    SHUTDOWN IMMEDIATE
  • Copier le fichier de contrôle valide en écrasant le fichier corrompu

     
    Sélectionnez
    cp u01/oracle/mabase/control01.ctl  u03/oracle/mabase/control03.ctl
  • Démarrer la base

     
    Sélectionnez
    STARTUP

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 Bouyao. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.