Explorer nos fichiers Redo Logs et Archive Logs

Nous allons dans cet article explorer les fichiers d’enregistrement des transactions grâce à l’outil logminer. Dans quel but ?

  • repérer l’heure exacte d’exécution d’une commande
  • identifier les commandes passées
  • générer un script permettant de passer l’inverse des commandes sans passer par une restauration incomplète
  • répertorier l’ensemble des instructions passées dans une même transaction
  • calculer des statistiques d’accès aux objets
  • trouver l’origine de la génération d’un gros volume de redo logs

Sommaire

  1. Quels moyens ?
  2. Historique
  3. Implémentation
  4. Fonctionnalités
  5. Exemples d’utilisation par les packages
  6. Pour aller plus loin…

1 – Quels moyens ?

Par l’outil « LogMiner », implémenté au travers des packages standards DBMS_LOGMNR et DBMS_LOGMNR_D, le résultat est obtenu par l’interrogation de la vue V$LOGMNR_CONTENTS. LogMiner existe maintenant sous forme graphique.

2 – Historique de logminer

L’outil LogMiner arrivé en version 8i, il a été ensuite amélioré en version 9i avec l’arrivée d’un outil graphique et de nouvelles fonctionnalités. En version 11g, il a été intégré à la console d’administration graphique.

En version 9i, la version graphique de LogMiner apparaissait dans la console java. Cette console était d’ailleurs toujours livrée avec la version 10g en complément de Database Control. En version 11g,  LogMiner a été intégré à Database Control et la console java n’existe plus.

3 – Implémentation

  • Packages DBMS_LOGMNR et DBMS_LOGMNR_D (toutes les versions)
  • Vues  Principales: V$LOGMNS_CONTENTS, V$LOGMNR_DICTIONARY, V$LOGMNR_LOGS, V$LOGMNR_PARAMETERS.
  • Console java (en versions 9i et 10g). On ne le trouve pas dans la console démarrée en « Standalone Server », il faut se connecter à la console « With Management Server ».
  Dans le menu « Tools », « Database Applications ».
  • Database Control (en version 11g)
  Onglet « Availability » puis « View and Manage Transactions»
  • LogMiner est également utilisé dans Oracle Data Guard et Oracle Streams.

4 – Fonctionnalités

Généralités

LogMiner permet d‘interpréter le contenu des fichiers redo logs et de leurs archives afin d’y récupérer les informations suivantes (liste partielle) :

  • Date et heure de l’instruction
  • Instruction SQL
  • Instruction SQL inverse qui serait à passer pour défaire ce qui a été enregistré dans le redo log.
  • Identifiant de la transaction

Pour fonctionner LogMiner a besoin d’un dictionnaire de données lui permettant de traduire l’identifiant d’objet en nom d’objet. Ce dictionnaire peut être stocké sous forme de fichier plat externe à la base.
D’autre part, pour certaines fonctionnalités il est nécessaire d’activer le stockage dans les redo logs d’informations complémentaires comme récupérer les PK, suivi des lignes chaînées et migrées, récupération des ordres du DDL … Alors que ces informations étaient stockées par défaut dans les versions antérieures à la 9.2.

Logminer 9i

Depuis la version 9i, les principales fonctionnalités ajoutées sont :

  • Les ordres du DDL sont tracés et ne sont plus vus comme des ordres de mise à jour des tables internes du dictionnaire de données (ajout de la colonne OPERATION dans la vue V$LOGMNR_CONTENTS)..
  • Le dictionnaire de données peut être stocké dans les redo logs (gourmand en place) ou bien il est possible d’utiliser un dictionnaire en ligne ou encore de maintenir à niveau le dictionnaire avec les objets créés depuis la création du dictionnaire LogMiner.
  • Ne voir que les instructions faisant partie de transactions validées.
  • Montrer la Primary Key au lieu de ne montrer que le ROWID.

Logminer 10g

Avec la version 10g, les principales fonctionnalités ajoutées sont :

  • Détermination automatique de la liste des fichiers à analyser à partir d’un intervalle de temps.
  • Fonctionne en environnement multithread sans intervention manuelle
  • Couvre les modifications effectuées dans les IOTs.
  • Supporte plus de types de données (CLOB et NCLOB multi-byte, LONG et LONG RAW, BINARY_FLOAT et BINARY_DOUBLE).
  • Options CONTINUOUS_MINE utilisable dès le premier fichier et jusqu’à un moment du futur.
  • A la base du FLASHBACK TRANSACTION QUERY

Logminer 11g

Et en version 11g, les principales fonctionnalités ajoutées sont :

  • Intégration à la console d’administration graphique Database Control.
  • Flashback Transaction BACKOUT

5 – Exemples d’utilisation par les packages : DBMS_LOGMNR et DBMS_LOGMNR_D

ATTENTION ! Toutes ces commandes sont à lancer dans la même session.
1 – Activer la collecte d’informations supplémentaires dans la base (n’est plus actif par défaut depuis la version 9.2).

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;

2 -Indiquer l’emplacement de stockage du fichier du dictionnaire.

Dans le fichier de paramètres d’instance INIT.ORA ou SPFILE:
Positionner la variable UTL_FILE_DIR (ex : UTL_FILE_DIR=c:cours)

3 – Créer le fichier plat contenant le dictionnaire pour LogMiner dans le fichier « test_logmnr.ora ».

execute DBMS_LOGMNR_D.BUILD('test_logmnr.ora',
                            'c:cours',
                            DBMS_LOGMNR_D.STORE_IN_FLAT_FILE)

4 – Initialiser la liste des redo logs à analyser.

execute DBMS_LOGMNR.ADD_LOGFILE('c:coursdba1datadisk3redo0101.log',
                                DBMS_LOGMNR.NEW)

5 – Ajouter à la liste d’autres fichiers redo logs ou archive logs à analyser.

execute DBMS_LOGMNR.ADD_LOGFILE('c:coursdba1datadisk3redo0201.log',
                                DBMS_LOGMNR.ADDFILE)

6 – Lancer l’analyse de tous les fichiers de la liste.

execute DBMS_LOGMNR.START_LOGMNR(dictfilename=>'c:courstest_logmnr.ora')

7 – Consulter le résultat de l’analyse.

SET LINESIZE 1000
SELECT username,
       TO_CHAR(timestamp,'dd-mon-YYYY:hh24:mi:ss'),
       SUBSTR(sql_undo,1,300) sql_undo
FROM   V$LOGMNR_CONTENTS
WHERE  LOWER(sql_redo) LIKE 'delete%emp%'
/

8 – Arrêter l’analyse

execute DBMS_LOGMNR.END_LOGMNR

6 – Pour aller plus loin…

Documentation :

My Oracle Support :