Multiplexer les fichiers de journalisation (Redo Logs) sous Oracle

Les Redo Logs (fichiers de journalisation) enregistrent tout ce qui se passe sur une base Oracle. Ils sont indispensables lors d’une restauration de l’instance après un crash ou une perte de données.

La problématique

Les fichiers de journalisation sont organisés en groupe, composé de un ou plusieurs membres. Tous les membres d’un groupe contiennent exactement les même informations, écrites de manière simultanées par le processus LGWR. Lors de la perte d’un membre du groupe, s’il reste au moins un membre valide, le fonctionnement d’Oracle n’est pas perturbé. Par contre si vous perdez tous les membres d’un groupe, vous risquez de perdre des données.

Pour éviter cela, il vaut donc mieux toujours avoir au moins deux membres par groupe, chacun sur un disque différent. C’est ça qu’on appelle mutliplexer les fichiers de journalisation.

Multiplexer les fichiers de journalisation (Redo Logs)

Voici notre configuration actuelle :

sqlplus> SELECT group#, member FROM v$logfile ORDER BY group#;
GROUP#     MEMBER
---------- ----------------------------------------
        1   /u01/app/oracle/oradata/labo/redo01.log
        2   /u01/app/oracle/oradata/labo/redo02.log
        3   /u01/app/oracle/oradata/labo/redo03.log

Nous avons trois groupes, avec un seul membre par groupe. Notre but va être de rajouter un membre à chaque groupe.

sqlplus> ALTER DATABASE ADD LOGFILE MEMBER
       > '/u02/app/oracle/oradata/labo/redo01.log'
       > TO group 1;
sqlplus> ALTER DATABASE ADD LOGFILE MEMBER
       > '/u02/app/oracle/oradata/labo/redo02.log'
       > TO group 2;
sqlplus> ALTER DATABASE ADD LOGFILE MEMBER
       > '/u02/app/oracle/oradata/labo/redo03.log'
       > TO group 3;

On ré-interroge le dictionnaire de données pour vérifier que les changements ont bien été pris en compte :

sqlplus> SELECT group#, member, status FROM v$logfile ORDER BY group#, status DESC;
GROUP#     MEMBER                                   STATUS
---------- ---------------------------------------- -------
        1   /u01/app/oracle/oradata/labo/redo01.log
        1   /u02/app/oracle/oradata/labo/redo01.log INVALID
        2   /u01/app/oracle/oradata/labo/redo02.log
        2   /u02/app/oracle/oradata/labo/redo02.log INVALID
        3   /u01/app/oracle/oradata/labo/redo03.log
        3   /u02/app/oracle/oradata/labo/redo03.log INVALID

On voit que nos nouveaux membres ont bien été ajoutés, seulement ils ont le statut INVALID. C’est tout à fait normal et Oracle retirera ce statut dès lors que LGWR réécrira pour la première fois dans ce groupe. Si vous voulez forcer cette étape, vous pouvez effectuer un switch manuel :

sqlplus> ALTER SYSTEM SWITCH LOGFILE;

(ici vous devrez le faire trois fois pour qu’il repasse sur tous les groupes)

Conclusion

Voilà vos Redo Logs sont à présent multiplexés ! Si un jour l’un des membres d’un de vos groupes de logs devient INVALID, le fonctionnement de votre base ne sera pas perturbé.

Pour réparer un membre d’un groupe de logs, il faut simplement le supprimer, et le recréer. Tout cela est possible grâce au multiplexage :

sqlplus> ALTER DATABASE DROP LOGFILE MEMBER
       > '/u02/app/oracle/oradata/labo/redo01.log';
sqlplus> ALTER DATABASE ADD LOGFILE MEMBER
       > '/u02/app/oracle/oradata/labo/redo01.log'
       > TO group 1;

4 Responses to “Multiplexer les fichiers de journalisation (Redo Logs) sous Oracle”

  • karopoin

    vous m’aidé beaucoup dans ma recherche pour mon mémoir de fin d’étude! un grand merci! oracle c’est vraiment formidable!

    Répondre
  • Ahmad salah

    est ce que après l’opération de multiplexage le contenu est le même pour tous les fichiers même si cette opération n’est pas faite à l’installation de la base de données?

    Répondre
  • Laisser un commentaire