mardi 6 octobre 2015

Les redo logs

Les fichiers redo logs permettent à la base de garder une trace de toutes les altérations de données, ainsi en cas de crash de la base, ils permettent de rejouer les modifications apportées à la base. Ces fichiers doivent être au moins au nombre de deux et nécessitent une attention toute particulière tant au niveau de la sauvegarde que de l'optimisation des accès.
En mode ARCHIVELOG, les redo logs sont archivés afin de garder une trace de toutes les modifications apportées et non pas seulement dans la limite de la taille des fichiers de redo log.
Les fichiers de redo log écrivent sur le disque le contenu de la mémoire lorsque le redo log buffer est plein. Il parait alors évident que la taille des fichiers de redo log doivent être au moins égale à celle du redo log buffer (paramètre log_buffer). Il n'y a pas vraiment de règles pour déterminer la taille adéquate des fichiers de redo.
Néanmoins il convient de garder en tête que plus le fichier est gros, moins vite il sera archivé et inversement, plus il est petit plus vite il sera archivé. Le nombre d'archives générées doit être environ de deux par heure (du moins, c'est cette règle que j'applique ), effectivement il faut limiter le nombre d'archives écrites puisque les accés disques sont couteux en performance. De plus, les fichiers doivent être, dans la mesure du possible, partagés entre plusieurs disques afin d'améliorer les temps d'accès et augmenter la sécurité, et surtout, sur un disque différent de la base de données.
Ainsi, si les disques de la base de données sont altérés et que les redo logs sont dessus, ils seront eux aussi altérés, rendant impossible la restauration de la base.
Voici quelques requêtes relatives aux redo logs:
Pour voir l'état des archives logs :
 
Sélectionnez
ARCHIVE LOG LIST;
SELECT name, log_mode FROM v$database;
SELECT archiver FROM v$instance;
Pour voir les informations sur les groupes de redo log :
 
Sélectionnez
SELECT groups, current_group#, sequence# FROM v$thread;
Pour voir des informations sur les groupes et les membres :
 
Sélectionnez
SELECT group#, sequence#, bytes, members, status FROM v$log;
Le status redo logs peut-être : UNUSED : jamais écrit CURRENT : en ligne et en cours d'écriture ACTIVE : en ligne et en cours d'archivage INACTIVE : en ligne, archivé et non utilisé Pour voir des informations sur les fichiers de redo :
 
Sélectionnez
SELECT * FROM v$logfile;
Pour forcer le switch de groupe de redo log :
 
Sélectionnez
ALTER SYSTEM SWITCH LOGFILE;
Cette commande permet d'archiver le redo log courant et d'activer le redo log suivant.
 
Sélectionnez
ALTER SYSTEM CHECKPOINT;
Cette commande permet d'archiver le redo log courant.
Pour ajouter un groupe de fichier de redo log :
 
Sélectionnez
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\REDO03.LOG' size 10M;
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\REDO04.LOG' size 10M;
Pour supprimer un groupe de fichier de redo log :
 
Sélectionnez
ALTER DATABASE DROP LOGFILE GROUP 2;
Pour supprimer un membre d'un fichier redo log ONLINE :
 
Sélectionnez
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';
Pour déplacer le fichier de redo log ONLINE :
Ici nous allons illustrer comment utiliser les commandes précédentes. Imaginons le scénario suivant : nous avons deux groupes de fichiers (le groupe 1 et le 2) avec chacun deux fichiers de redo logs.
 
Sélectionnez
SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 ACTIVE
         2 CURRENT
         2 INACTIVE
  1. Créer un fichier de redo temporaire de la taille des redo logs :
     
    Sélectionnez
    ALTER DATABASE ADD LOGFILE GROUP 3 'g:\oracle\oradata\orafrance\REDO05.LOG' size 10M;
    
  2. Positionner le redo courrant sur ce nouveau fichier :
     
    Sélectionnez
    ALTER SYSTEM SWITCH LOGFILE;
    ALTER SYSTEM SWITCH LOGFILE;
    
    SELECT group#, status FROM v$log;
    
        GROUP# STATUS
    ---------- ----------------
             1 INACTIVE
             1 INACTIVE
             2 INACTIVE
             2 ACTIVE
             3 CURRENT
    
  3. Supprimer les fichiers de redo logs et les recréer dans le nouveau répertoire :
     
    Sélectionnez
    ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO01.LOG';
    ALTER DATABASE ADD LOGFILE GROUP 1 'g:\oracle\oradata\orafrance\redo\REDO01.LOG' size 10M;
    ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';
    ALTER DATABASE ADD LOGFILE GROUP 1 'g:\oracle\oradata\orafrance\redo\REDO02.LOG' size 10M;
    ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO01.LOG';
    ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\redo\REDO03.LOG' size 10M;
    ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';
    ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\redo\REDO04.LOG' size 10M;
    
    SELECT group#, status FROM v$log;
    
        GROUP# STATUS
    ---------- ----------------
             1 UNUSED
             1 UNUSED
             2 UNUSED
             2 UNUSED
             3 CURRENT
    
  4. Penser à supprimer les fichiers g:\oracle\oradata\orafrance\REDOxx.LOG rendus inutiles.
  5. Activer tous les groupes et supprimer le redo log temporaire :
 
Sélectionnez
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 INACTIVE
         2 INACTIVE
         2 CURRENT
         3 INACTIVE

ALTER DATABASE DROP LOGFILE GROUP 3;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 INACTIVE
         2 INACTIVE
         2 CURRENT
Penser à supprimer le fichier g:\oracle\oradata\orafrance\REDO05.LOG rendu inutile.

0 commentaires:

Enregistrer un commentaire

Nombre total de pages vues