Rechercher sur arkzoyd.com

27 décembre 2006

Développement Oracle OLAP (Section 2/2)

Après avoir créer un espace analytique dans la section précédente "Développement Oracle OLAP (Section 1/2)", vous allez maintenant développer une première application Java OLAP avec une interface graphique HTML. Avant de continuer, il est préférable, mais pas obligatoire, d'avoir suivi la première section. D'autre part, si vous avez besoin d'un exemple plus complet, il y a un exemple très bien expliqué sur OTN.

Ce test a été réalisé avec :
Etape préliminaire - Installation de l'environnement de démonstration

Oracle fournit un exemple d'Analytic Workspace appelé "Global Schema 10.2.0.3". Cet exemple est bien plus riche et complet que la section précédente et vous allez vous en servir dans ce qui suit :
  • Télécharger cet exemple nommé Global Schema sur OTN
  • L'installer en lançant le script "install_complete_global.sql" depuis SQL*Plus. Le script suppose que vous êtes connecté en direct et vous demande le mot de passe SYSTEM. Il crée un utilisateur global_aw dont le mot de passe est global_aw.
  • Une fois le script exécuté, utiliser AWM (global_aw/global_aw) pour se connecter à l'espace analytique GLOBAL du schéma GLOBAL
Pour réaliser ce qui suit, il faut installer les composants suivants :
  • Oracle JDeveloper 10.1.2.2 (Build 1929), Cette version est obligatoire et la version 10.1.0.3.1 n'est pas encore supportée. Vous verrez à la fin de cette section comment déployer vos applications avec les dernières versions. Téléchargez simplement le logiciel et décompressez-le dans le répertoire de votre convenance.
  • Oracle BiBeans 10.1.2.2. Pour installer cette version des BIBeans dans JDeveloper 10.1.2.2, téléchargez simplement le fichier ".zip" et décompressez-le en gardant les informations de répertoire dans le même répertoire que JDeveloper. Ecrasez les fichiers BiBeans qui existent déjà dans JDeveloper.
Etape 1 - Créer un projet et se connecter à un espace analytique

Vous allez d'abord lancer JDeveloper et créer un projet Java. Pour cela, il faut :
  • Lancer Jdeveloper grâce à l'exécutable jdevw.exe sous windows ou jdev.sh sous Linux/Unix dans le répertoire "jdev/bin" de votre installation JDeveleoper
  • Créer un nouvel "Application Workspace" en sélectionnant le menu "File | New... | General | Application Workspace"
  • Le nommer "bidemo" et sélectionner "No Template [All Technologies]"
  • Cliquer sur le bouton "OK"
  • Un projet nommé "Project" est créé dans le workspace
Ajoutez ensuite une connexion vers votre base de données qui contient l'espace analytique, comme ceci :
  • Sélectionner le menu "View | Connections Navigator" de JDeveloper
  • Sélectionner le répertoire Database et avec le menu contextuel, Sélectionner "New Database Connections..."
  • Créer une connexion nommée "Olap10203" avec les propriétés suivantes :
    • username : global_aw
    • password : global_aw
    • case à cocher "Deploy Password" sélectionnée
    • les informations d'URL JDBC-Thin pour se connecter à la base de données (e.g. localhost:1521:ORCL)
Enfin, vous allez créer un objet du type BI Designor dans le projet créé précédemment comme suit :
  • Sélectionner le menu "View | Applications Navigator"
  • Sélectionner le projet "Project"
  • Sélectionner "File | New... | Business Intelligence Beans | Business Tier for OLAP | Designor " puis cliquez sur le bouton "OK"
  • A l'étape 1 de l'assistant, laissez le répertoire par défaut pour le fichier .xml que vous nommerez, par exemple, MyBIDesigner.xml
  • A l'étape 2, sélectionnez la source Olap10203 créée précédemment
  • A l'étape 3, laissez le répertoire par défaut où vos objets BI seront sauvegardés
  • Cliquez sur fin, les fichiers qui décrivent la connexion à la base de données ainsi que les objets BI que vous allez ensuite définir sont créés dans le projet.
Etape 2 - Créer un graphique interrogeant le cube

Pour créer un graphique qui interroge le cube, il suffit d'effectuer ce qui suit :
  • Sélectionner l'objet "MyBIDesignor : Bi Designor" dans le navigateur d'applications
  • Sélectionner "New Graph..." dans le menu contextuel
  • A l'étape 1 de l'assistant, puis mettez à jour les attributs du graphique puis cliquer sur "Suivant" :
    • What Type of Presentation do you want to create ? "Chart"
    • Presentation Location and Name "ProgressionVentesParCanal"
    • Description "Graphique de la progression des ventes par canal"
  • A l'étape 2 de l'assistant, sélectionner le type de graphique "Ligne" et le sous-type de graphique "Ligne", puis cliquer sur "Suivant"
  • A l'étape 3 de l'assistant, Sélectionner l'indicateur "Sales". L'ensemble des dimensions est sélectionné avec l'indicateur. Dé-sélectionner la case à cocher "Ajoutez/Enlevez automatiquement les dimensions". Retirer la dimension "Customer". Cliquer sur "Suivant".
  • A l'étape 4, utiliser les glissez/déposer les élements comme ci-dessous et cliquer sur "Suivant" :
    • Afficher les éléments de page : "Coché"
    • Eléments de page : "Product"
    • Courbes : "Indicateurs" puis "Channel"
    • Groupes : "Time"
  • A l'étape 5, sur la dimension "Time", sélectionner toutes les années de 1998 à 2004 en les mettant dans la zone de liste des éléments "Selectionné", puis tapez sur "Suivant".
  • A l'étape 6, sur la dimension "Product", sélectionner toutes les 3 éléments "Total Product", "Hardware" et "Software/Other" en les mettant dans la zone de liste des éléments "Selectionné", puis tapez sur "Suivant".
  • A l'étape 7 sélectionner les 3 canaux en les mettant dans la zone de liste des éléments "Selectionné", puis tapez sur "Suivant".
  • A l'étape 8, sélectionnez le style par défaut et cliquez sur "Fin"
L'objet "ProgressionVentesParCanal : Graph" est ajouté au catalogue local de MyBIDesigner


Etape 3 - Modifier les propriétés du graphique

Il est possible de modifier les propriétés des objets BI grâce au "Property Inspector". Par exemple, vous allez modifier la taille du graphique en effectuant les étapes ci-dessous :
  • Sélectionner le panneau de structure à l'aide du menu "View | Structure"
  • Sélectionner le "Property Inspector" à l'aide du menu "View | Property Inspector"
  • Cliquer sur le graphique, puis sélectionner la racine de l'arbre "ProgressionVentesParCanal" dans le panneau de structure
  • Dans le "Property Inspector", modifier la propriété ImageSize en la passant à la valeur "600, 400"
Etape 4 - Créer une JSP qui contient le graphique précédent

Pour cette étape, vous devez sélectionnez le projet "Project" dans l'"Applications Navigator" et effectuez les opérations qui suivent :
  • Sélectionner le menu "File | New... | Business Intelligence Beans | Web Tier | Java Server Pages (JSP ) | Empty BI JSP Page"
  • Donner un nom à la JSP, par exemple "bidemo.jsp" et définir un id pour la session BI, par exemple "bisession". Cliquer sur le bouton "OK"
  • Sélectionner le graphique "ProgressionVentesParCanal" dans le navigateur des applications et le glisser sur la page JSP en dessous de la balise "InitBITags"
Le graphique apparait sur la page JSP. comme sur l'écran ci-dessous :


Etape 5 - Exécuter la JSP dans OC4J embarqué dans JDeveloper

Pour exécuter la page JSP depuis JDeveloper, Sélectionnez simplement la page "bidemo.jsp" et avec dans le menu contextuel, sélectionnez "Run...". La page est chargée comme dans le graphique ci-dessous :


Biensûr, tout cela est très simple (C'est justement pour l'illustrer que cette section est utile). Il faut maintenant faire évoluer l'interface en fonction de vos besoins. Peut-être écrirai-je une section 3/2 un peu plus tard. D'ici là, regardez l'exemple très bien expliqué sur OTN.

GarK!

Développements Oracle OLAP (Section 1/2)

Dans cette première section nous allons créer un espace analytique à partir des tables du schéma d'exemple d'Oracle 10g nommé SH. L'objectif de cette section n'est pas d'expliquer comment répondre à des besoins fonctionnels mais bien de décrire la démarche technique de création d'un espace d'analyse. Le document "Olap Application Developer's Guide - 10g Release 2 (10.2.0.3) Part Number B14349-03" va bien plus loin que ce qui suit. Il présente en particulier, à travers un exemple, comment définir les objets d'une application OLAP.

Vous pouvez récupérer l'ensemble des logiciels permettant de réaliser cette première section sur OTN et Metalink. La configuration utilisée est la suivante :
  1. Oracle 10.2.0.3
  2. Oracle Analytic Workspace Manager 10.2.0.3 (AWM)
Lorsque vous créez la base de données vérifiez que l'option OLAP ainsi que les schémas d'exemples sont bien inclus !

Etape 1 - Créer un utilisateur

L'utilisateur AW est propriétaire de l'espace d'analyse (Analytic Workspace). Il a les droits en lecture sur le schéma d'exemple SH (Sales History) et les rôles qui lui permettent de créer les objets OLAP. Exécutez les opérations qui suivent :

oracle $ export ORACLE_SID=ORCL
oracle $ sqlplus / as sysdba
SQL> create user aw
identified by aw
default tablespace users
temporary tablespace temp;
SQL> grant connect, resource to aw;
SQL> grant olap_user to aw;
SQL> grant select on sh.customers to aw;
SQL> grant select on sh.products to aw;
SQL> grant select on sh.times to aw;
SQL> grant select on sh.sales to aw;

Etape 2 - Connectez-vous avec Analytic Workspace Manager (AWM)
Lancez AWM et connectez vous à la base de données sous le compte AW. Pour cela :
  • Sélectionnez le menu contextuel "Ajoutez une base de données à l'arborescence..." avec le bouton droit de la souris sur le répertoire base de données
  • Remplissez les champs "Description" et "Information de connexion" à votre convenance puis valider.
  • Cliquez sur le signe (+) à gauche de la base de données que vous venez de créer et connectez-vous sous l'utilisateur "aw"

Etape 3 - Créer un espace analytique

Effectuez les opérations suivantes :
  • Développer l'arbre de navigation à gauche de AWM jusqu'à voir sous le schéma SH_AW, un répertoire intitulé "Espaces de travail analytiques".
  • Sélectionner le dossier précédemment développé et sélectionner le menu contextuel, "Créez espace de travail analytique..."
  • Appelez votre espace analytique "VENTES"
Etape 4 - Créer des dimensions, niveaux, hierarchies, attributs

Les dimensions sont formées d'un ensemble de valeurs qui permettent de découper les données. Elles forment les axes des cubes. Les dimensions peuvent contenir des niveaux, des hierarchies et des attributs.

Pour créer une dimension à partir d'AWM, effectuez les opérations ci-dessous :
  • Développer le dossier "VENTES"
  • Sélectionnez le dossiers "Dimensions"
  • Dans le menu contextuel, sélectionner "Créer Dimension"
  • Compléter les champs, par exemple :
    • Nom : CLIENT
    • Libellé Abrégé : Client
    • Libellé Long : Client, Ville
    • Description : Dimension des clients
    • Type de Dimension : Dimension Utilisateur
    • Détail d'Implementation (dernier onglet) : Générer des clés de substitution dans l'espace de travail analytique
  • Créer également la dimension "TEMPS" en invoquant de nouveau l'assistant :
    • Nom : TEMPS
    • Libellé Abrégé : Temps
    • Libellé Long : Temps
    • Description : Temps
    • Type de Dimension : Dimension temps
    • Détail d'Implementation (dernier onglet) : Générer des clés de substitution dans l'espace de travail analytique
  • Créer enfin la dimension "PRODUIT" en invoquant de nouveau l'assistant :
    • Nom : PRODUIT
    • Libellé Abrégé : Produit
    • Libellé Long : Produit
    • Description : Produit
    • Type de Dimension : Dimension Utilisateur
    • Détail d'Implementation (dernier onglet) : Générer des clés de substitution dans l'espace de travail analytique
Vous pouvez ensuite créer une hierarchie avec 2 niveaux sur la dimension CLIENT, sous la forme client et ville. Pour cela, effectuez ce qui suit :
  • Sélectionner le répertoire Niveaux dans la dimension CLIENT et créer successivement 4 niveaux nommés VILLE et CLIENT
  • Sélectionner le répertoire Hiérarchies dans la dimension CLIENT et créer une hierarchie VILLE dont les niveaux sont, dans l'ordre VILLE et CLIENT
Ensuite, vous allez créer les objets suivants :
  • Sur la dimension PRODUIT, créer les niveaux PRODUIT et CATEGORIE, puis créer une hierarchie CATEGORIE avec ces 2 niveaux
  • Sur la dimension TEMPS, créer les niveaux JOUR, MOIS, TRIMESTRE et ANNEE, puis créer une hierarchie CALENDRIER avec l'ensemble de ces niveaux.
Etape 5 - Créer un cube et les indicateurs

Un cube contient un ensemble de mesures selon des dimensions communes et qui ont vocation à être gérées de la même manière. Pour créer un cube :
  • Sélectionner le répertoire "Cube" sous "VENTES"
  • Dans le menu contectuel, sélectionner "Créer cube..."
  • Nommer le "MONANALYSE" ; laisser l'ensemble des options par défaut
  • Ajoutez les dimensions "CLIENT", "PRODUIT" et "TEMPS" à votre cube
  • Cliquer sur le bouton "Créer"
Définissez ensuite les niveaux d'aggrégation dans le cube :
  • Sélectionner MONANALYSE
  • Sélectionner l'onglet "Recapituler Dans" puis sélectionner les niveaux qui vous intéressent, par exemple :
    • Sur la dimension TEMPS, le niveau MOIS
    • sur la dimmention PRODUIT, le niveau CATEGORIE
    • sur la dimension CLIENT, le niveau VILLE
Créez ensuite les indicateurs (ou mesures) qui vous intéressent :
  • Sélectionner le répertoire "Indicateurs" sous "MONANALYSE"
  • Dans le menu contextuel, sélectionner "Créer indicateur..."
  • Donnez lui le nom "CA" et laissez toutes les options par défaut puis cliquer sur "Créer"
  • Créer ensuite un second indicateur nommé QUANTITE de la même manière.
Etape 6 - Mettre en relation les objets et les données

Vous allez maintenant mettre en relation les objets créés dans les étapes 4 et 5 et les données relationnelles. Pour cela, effectuer ce qui suit :
  • Sélectionner le répertoire "VENTES"->"Dimensions"->"CLIENT"->"Correspondances"
  • 2 présentations possibles des correspondances entre la dimension "CLIENT" et les données, soit graphique (sélectionner le bouton "Vue des correspondance graphique") soit tabulaire (sélectionner "Vue des correspondance de tables")
  • Selectionner la vue graphique et sélectionner la tables SH.CUSTOMERS. Glisser la sur le panneau de droite
  • Indiquez que le schéma est un schéma en étoile
  • Mettez en correspondance les colonnes de la table et les attributs de la dimension comme dans la copie d'écran ci-dessous :

Mettez ensuite en correspondance les dimensions TEMPS, PRODUIT et enfin le cube MONANALYSE. Utilisez les copie d'écran ci-dessous pour mettre à jour correctement les champs.




Etape 7 - Utiliser le "Sparsity Advisor"

La structure de stockage du cube est importante pour (1) les perfomances et (2) l'espace occupé. Il faut que le cube soit suffisamment dense et éventuellement créer des partitions. Oracle 10.2.0.3 offre un nouvel assistant le "Sparsity Advisor" qui peut vous aider à structurer votre cube de sorte que les données non dense soient compressées, que l'ordre des dimensions soient optimales et que le partitionnement du cube soit utilisé si nécessaire. Pour utiliser ce conseiller, faîtes ce qui suit :
  • Sélectionner le répertoire "MONANALYSE"
  • Dans le menu contectuel, sélectionner "Sparsity Advisor..."
  • Lancer l'assistant
  • Visualiser le résultat du conseiller ainsi que la structure précédente.
  • Accepter ou refuser l'implémentation proposée en cliquant sur "Recreate Cube" ou "Annuler". Il est possible de modifier la structure avant de l'implémenter.
Etape 8 - Charger et mettre à jour les données

L'avant dernière étape de la création du cube consiste à lancer l'assistant de maintenance des données qui charge les dimensions et le cube avant de l'utiliser :
  • Sélectionner le répertoire "MONANALYSE"
  • Dans le menu contectuel, sélectionner "Mettre à jour MONANALYSE..."
  • Sélectioner les obtions de votre choix et Lancer l'assistant en cliquant sur "Fin"
Etape 9 - Interroger les données

Vous pouvez explorer directement les données depuis Analytic Workspace Manager.
  • Sélectionner le répertoire "MONANALYSE"
  • Dans le menu contectuel, sélectionner "Visualiser les données MONANALYSE..."
  • Vous pouvez manipuler vos données comme ci-dessous :

Voilà en quelques étapes comment créer un Analytic Workspace pour commencer à développer une application OLAP. Dans la section 2/2, disponible ici, vous verrez comment utiliser Java pour manipuler ce cube à travers une première interface HTML très simple. Vous utiliserez JDeveloper et les BiBeans.

GarK!

Oracle Austin Datacenter

Une nouvelle animation flash présente des aspects insoupçonnés d'un des datacenters les plus importants au monde avec plus de 10 000 serveurs et 2,5 PetaOctets de données.
Oracle Austin Data Center est également une référence pour de nombreux fournisseurs comme NetApp ! Intéressant, non ?

GarK!

24 décembre 2006

Standby physique et Recovery Manager /*+Data Guard*/

Créer une standby physique et configurer le Broker Data Guard est très simple. Si vous n'aimez pas Enterprise Manager et sa console web, vous trouverez ci-dessous l'ensemble des étapes nécessaires pour effectuer cette opération manuellement avec Recover Manager (RMAN).

Pour les besoins de cette explication, voici quelques précisions quant à l'environnement de test utilisé pour rédiger ce qui suit :
  • La base de données et l'instance primaire s'appellent ORCL
  • L'instance de standby s'appellera GARK
  • La base de données Oracle est la version 10.2.0.3 sur Oracle Enterprise Linux (A peu prêt RHEL 4).
  • Les bases de données primaire et standby sont sur la même machine (dans le même ORACLE_HOME). La procédure est similaire avec 2 bases de données sur des machines différentes.
  • Le serveur s'appelle "arkzoyd"
  • Le stockage utilisé est ASM. L'ensemble des fichiers résident dans le diskgroup +DATA.
Voici les 10 étapes qui vous permettront d'arriver à une configuration

Etape 1 - Passer la base de données primaire en mode Archivelog

La standby physique est une copie de la base de données primaire. Elle est mise à jour grâce à un process de "Redo Apply", c'est à dire un recover des fichiers de Redo Logs sur cette base de données. Il faut transmettre les Archive/Redo Logs sur la machine de standby. Pour cela, il faut s'assurer que la base de données primaire est en mode Archivelog et que les opérations sont journalisées. Pour cela, effectuez les opérations qui suivent :

oracle$ export ORACLE_SID=ORCL
oracle$ sqlplus / as sysdba
SQL> select dbid, name, log_mode, force_logging
from v$database;
DBID NAME LOG_MODE FOR
---------- --------- ------------ ---
1137540194 ORCL NOARCHIVELOG NO

si la base de données n'est pas en mode archivelog, il faut passer l'instance en mode mount pour activer ce mode pour la base de données. Vérifiez également que les paramètres des archivelogs sont bien définis (i.e. les paramètres log_archive_dest_n , log_archive_dest_state_1 et log_archive_format). On supposera que l'on utilise ASM et que les archivelogs sont stockés dans un diskgroup noté +BACKUP. Pour cela, effectuez les opérations qui suivent :

SQL> alter system set log_archive_dest_1='LOCATION=+BACKUP' scope=both;
SQL> alter system set log_archive_dest_state_1=enable scope=both;
SQL> alter system set log_archive_format='%t_%s_%r.dbf' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> alter system archive log current;
SQL> set lines 120
SQL> col name format a80
SQL> select sequence#, name
from v$archived_log
order by sequence#;
SQL> alter system archive log current;
SQL> select sequence#, name
from v$archived_log
order by sequence#;

Forcez la base de données à journaliser toutes les opérations, y compris les opérations déclarées comme NOLOGGING, comme peut l'être la création d'une table avec la commande qui suit.
SQL> alter database force logging;
SQL> select dbid, name, log_mode, force_logging
from v$database;
DBID NAME LOG_MODE FOR
---------- --------- ------------ ---
1137540194 ORCL ARCHIVELOG YES


Remarque :

Si la création d'une table n'est pas journalisée, la table ne pourra pas être créée dans la base de données standby. On voit ici une des limites des bases de données standby ! Cette limite peut être dépassée, sur des environnement de type data warehouse, par exemple, en fusionnant régulièrement des sauvegardes incrémentales sur une copie distante de la base de données. Et c'est une autre histoire...

Etape 2 - Configurer le service et le fichier de password de la standby

Sous Linux, mettez à jour le fichier /etc/oratab. Sous Windows, il faut utiliser le fichier l'utilitaire "oradim". Voici un exemple de mise à jour du fichier oratab :
oracle$ echo GARK:/u01/oracle/product/10.2.0/db_1:N >>/etc/oratab
oracle$ cat GARK:/u01/oracle/product/10.2.0/db_1:N >>/etc/oratab


Il faut ensuite créer le fichier de mot de passe. On supposera que le mot de passe de SYS est "manager1". Pour cela, tapez la ligne ci-dessous :
oracle$ $ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapwGARK \
password=manager1 entries=5 force=y
Attention
le nom et l'emplacement du fichier de mot de passe dépend de la plateforme. Sous windows, il s'agit d'%ORACLE_HOME%/database/PWDGARK.ORA.

Etape 3 - Créer un fichier spfile pour démarrer l'instance standby.

Nous allons partir du spfile de l'instance primaire, générer un init.ora et le modifier
oracle$ export ORACLE_SID=ORCL
oracle$ sqlplus / as sysdba
SQL> create pfile='/tmp/initGARK.ora' from spfile;
SQL> exit;

Poussez le fichier sur la seconde machine dans /tmp/initGARK.ora et modifiez-le comme indiqué ci-dessous :
  • Modifiez l'ensemble des paramètres qui pointent vers des répertoires de sorte qu'ils pointent vers une structure qui conviennent à votre base de données de standby (e.g. audit_file_dest, background_dump_dest, core_dump_dest, user_dump_dest) puis créer l'arborescence correspondante comme dans l'exemple ci-dessous :
    oracle$ mkdir -p /u01/admin/GARK/adump
    oracle$ mkdir -p /u01/admin/GARK/bdump
    oracle$ mkdir -p /u01/admin/GARK/cdump
    oracle$ mkdir -p /u01/admin/GARK/udump
    oracle$ mkdir -p /u01/admin/GARK/pfile
  • Modifiez le paramètre control_files pour qu'il pointe vers un fichier différent (ou dans le cas de ASM, un alias comme +DATA/GARK/CONTROLFILE/control01.dbf)
  • Ajoutez le paramètre db_unique_name='GARK'.
  • Positionnez les paramètres db_file_name_convert, log_file_name_convert, log_archive_config et standby_file_management pour permettre la translation des arborescences de ORCL vers GARK et déclarer toutes les bases qui font parties de la configuration. Si vous utilisez ASM, ce n'est pas utile de changer les paramètres *_file_name_convert, sauf si vous voulez changer la base de données de diskgroup. Voici, ci-dessous un exemple de paramétrage possible :
    db_file_name_convert='ORCL','GARK'
    log_file_name_convert='ORCL','GARK'
    log_archive_config='DG_CONFIG=(GARK,ORCL)'
    standby_file_management='AUTO'
  • Paramètrez l'endroit où seront stockés les fichiers d'archives envoyés sur la standby :
    standby_archive_dest='+BACKUP'
  • Mettez en place les paramètres fal_client et fal_server de résolution des GAP dans les fichiers archivelogs :
    fal_client='GARK'
    fal_server='ORCL'
  • Paramétrez les destinations des archives sur le système de fichiers et sur un service distant avec les paramètres log_archive_dest_1 et log_archive_dest_2 :
    log_archive_dest_1='LOCATION=+BACKUP VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=GARK'
    log_archive_dest_2='SERVICE=ORCL LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'

Démarrez l'instance GARK sur la seconde machine sur le spfile :
oracle$ export ORACLE_SID=GARK
oracle$ sqlplus / as sysdba
SQL> startup nomount pfile='/tmp/initGARK.ora';
SQL> create spfile from pfile='/tmp/initGARK.ora';
SQL> shutdown abort;
SQL> startup nomount;

Etape 4 - Créer une copie "FOR STANDBY" du controlfile et une sauvegarde de la base de données

Dans un premier temps, créez un répertoire accessible depuis la machine primaire pour stocker la sauvegarde de la base de données ainsi que la copie du controlfile "FOR STANDBY" :
oracle$ mkdir -p /u01/backups/ORCL

Ensuite faîte une copie du controlfile "FOR STANDBY" avec RMAN :
oracle$ export ORACLE_SID=ORCL
oracle$ rman target=/ nocatalog
RMAN> configure default device type to disk;
RMAN> configure device type disk backup type to compressed backupset;
RMAN> configure channel device type disk format '/u01/backups/ORCL/%U';
RMAN> copy current controlfile for standby to '/u01/backups/ORCL/control01.dbf';


Enfin faîtes une sauvegarde de la base de données toujours aver Recovery Manager
RMAN> backup database plus archivelog;

Attention
il faut faire un recover de la standby jusqu'à un SCN supérieur au SCN du moment de la constitution de la copie du controlfile "FOR STANDBY". Si vous prévoyez d'utiliser un backup existant (sur disque ou bande), effectuez un switch du log courant, effectuer une sauvegarde des archivelog et mettez-le à disposition sur la machine de standby.

Etape 5 - Créer les alias TNS pour les 2 instances :

Il faut déclarer les instances de manière statique dans les listeners afin de pouvoir accéder aux instances même lorsque les instances ne sont pas démarrées.

Pour cela, ajoutez dans le fichier listener.ora de la première machine (si le listener s'appelle LISTENER). Si le fichier n'existe pas, vous pouvez utiliser netmgr (Network Manager) :
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=ORCL)
(ORACLE_HOME=/u01/oracle/product/10.2.0/db_1)
(SID_NAME=ORCL)
)
)


Ajoutez dans le fichier listener.ora de la deuxième machine (si le listener s'appelle LISTENER) :
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=GARK)
(ORACLE_HOME=/u01/oracle/product/10.2.0/db_1)
(SID_NAME=
GARK)
)
)


Si vous utilisez le même listener dans les 2 cas, mettez simplement les 2 SID_DESC dans le paramètre SID_LIST. Ensuite, il faut créer les alias TNS. Utilisez le même nom pour les alias et les instances. Ajoutez sur TOUTES les machines ou dans une configuration centralisée des chaînes de connexion semblables à celles ci-dessous :
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = arkzoyd)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORCL)
)
)

GARK =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = arkzoyd)(PORT = 1521))
)
(CONNECT_DATA =
(SID = GARK)
)
)


Etape 6 - Instancier la base de données standby à partir des sauvegardes RMAN

Il faut pousser les fichiers de sauvegarde jusqu'à la machine de standby de sorte que les fichiers soient disponibles pour la restauration et le recover depuis la machine de standby. Vous pouvez utiliser pour cela la méthode de votre choix : FTP, SCP ou même un umount/mount si vos disques sont partagés.

Ensuite utiliser la commande RMAN qui suit sur la machine primaire :
oracle$ export ORACLE_SID=ORCL
oracle$ rman target=/ auxiliary=sys@gark
RMAN> run
{
duplicate target database for standby
nofilenamecheck
dorecover;
}
Pour éviter les erreurs, vous pouvez utiliser la commande "SET UNTIL SEQUENCE" pour préciser jusqu'à quel archivelog vous voulez effectuer le recover.

Etape 7 - Modifier les paramètres de l'instance primaire

Sur l'instance primaire vous pouvez modifier les paramètres dynamiques comme ce qui suit :
oracle$ export ORACLE_SID=ORCL
oracle$ sqlplus / as sysdba
SQL> alter system set fal_server='GARK' scope=both;
SQL> alter system set fal_client='ORCL' scope=both;
SQL> alter system set log_archive_config='DG_CONFIG=(GARK,ORCL)' scope=both;
SQL> alter system set standby_file_management='AUTO' scope=both;
SQL> alter system set log_archive_dest_2='SERVICE=GARK LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=GARK' scope=both;

Dans cette section en particulier, en plus de décrire les bases de données qui font parties de la configuration, vous indiquez à l'instance qu'elle doit désormais envoyer ses archivelogs sur l'instance standby.


Etape 8 - Démarrer le processus d'Apply sur la base de données Standby

Pour cela, connectez-vous à l'instance de standby et tapez ce qui suit :
oracle$ export ORACLE_SID=GARK
oracle$ sqlplus / as sysdba
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Etape 9 - Tester que les archives sont envoyées et appliquées sur la base de données standby

Pour cela, connectez-vous à l'instance primaire et effectuez 2 ou 3 switch de log :
oracle$ export ORACLE_SID=ORCL
oracle$ sqlplus / as sysdba
SQL>
alter system archive log current;
SQL> alter system archive log current;

Vous pouvez vérifier que les archive logs ont été générées :
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;


Enfin, connectez-vous à l'instance standby pour vérifier que les fichiers ont été receptionnés et correctement appliqués sur la standby :
oracle$ export ORACLE_SID=GARK
oracle$ sqlplus / as sysdba
SQL>
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;


Si ce n'est pas le cas, vérifiez dans les fichiers alert.log des 2 instances ORCL et GARK la raison pour laquelle les fichiers ne sont pas acheminés ou appliqués.

Etape 10 - Démarrer le Broker Data Guard et créer la configuration

Si la première instance de base de données, vous pouvez démarrer le process DMON qui sert à gérer l'infrastructure distribuée du Broker. Pour cela, effectuez ce qui suit :
oracle$ export ORACLE_SID=ORCL
oracle$ sqlplus / as sysdba
SQL> alter system set dg_broker_start=true scope=both;
SQL> exit;

Effectuez la même opération sur l'instance de standby :
oracle$ export ORACLE_SID=GARK
oracle$ sqlplus / as sysdba
SQL> alter system set dg_broker_start=true scope=both;
SQL> exit;

Ensuite, connectez-vous au broker Data Guard en mode ligne de commande
dgmgrl
DGMGRL> connect /

Créez la configuration Data Guard en décrivant la configuration de la primaire comme ceci :
DGMGRL> CREATE CONFIGURATION 'DEMO' AS
PRIMARY DATABASE IS 'ORCL'
CONNECT IDENTIFIER IS ORCL;


Ajoutez les informations nécessaires pour ajouter la standby à la configuration :
DGMGRL> ADD DATABASE 'GARK' AS
CONNECT IDENTIFIER IS GARK
MAINTAINED AS PHYSICAL;

Enfin, activez la configuration :
DGMGRL> enable configuration;

La configuration prend quelques minutes pour être complètement activée. Vous pouvez valider que l'opération s'est correctement déroulée en tapant la commande ci-dessous :
DGMGRL> show configuration;

Si une opération ne se déroule pas comme attendu et que le résultat de l'activation de la configuration n'est pas SUCCESS, vous pouvez visualiser les message d'erreurs sur chacune des deux bases de données à l'aide de la commande suivante :
DGMGRL> show database 'ORCL' 'LatestLog';
DGMGRL> show database 'GARK' 'LatestLog';

... Et voilà, si votre base de données primaire est déjà en archivelog et qu'elle utilise un fichier SPFILE, l'ensemble de cette configuration s'effectue sans aucune indisponibilité et en quelques minutes (ou heures si vous déplacer des tera-octets). Avec un peu d'entraînement (et/ou avec Perl), vous créerez des standby à la chaîne ! Mais c'est une autre histoire et, surtout, plus la mienne...

GarK!

23 décembre 2006

Capacité I/O à votre disposition ?

ORION (ORacle IO Numbers) est un utilitaire très intéressant que vous pouvez récupérer avec sa documentation sur OTN à l'adresse qui suit : http://www.oracle.com/technology/software/tech/orion/index.html. Il permet de calibrer les capacités IO à votre disposition. La documentation explique, en outre comment faire le lien entre les statistiques obtenues par ORION et les statistiques des IO effectuées par des instances Oracle.

Pour l'utiliser, c'est très simple, il faut procéder comme suit (J'ai fait le test sur une machine virtuelle avec Oracle Enterprise Linux sur mon Laptop) :

1°- Poussez le binaire ORION sur la machine et décompressez le avec la commande ci-dessous :
$ gunzip orion10.2_linux.gz
$ chmod +x orion10.2_linux

2°- Créez un fichier test.lun (Dans ce las, ne nom de votre test est nommé "test") avec les raw devices (ou les fichiers) que vous voulez tester, par exemple, tapez la commande qui suit :
$ cat >test.lun << eof
/dev/raw/raw3
/dev/raw/raw4
EOF

3°- Vérifiez que vous avez bien accès aux dits RAW ou fichiers. Par exemple, sous Linux, vous pouvez utiliser la commande dd, comme ceci :
$ dd if=/dev/raw/raw3 of=/dev/null bs=32k count=1024
$ dd if=/dev/raw/raw4 of=/dev/null bs=32k count=1024

4°- Vérifiez que la librairie qui permet d'effectuer des IO Asynchrones libaio.so est installée et peut être invoquée par ORION. Puis lancer le test grâce à une commande comme celle qui suit :
$ ./orion10.2_linux -run simple -testname test -num_disks 1

5°- Plusieurs fichiers sont générés :
  • test_summary.txt est une synthèse du résultat
  • test_mbps.csv est la courbe du taux de transfert IO (en Mo/secondes) selon leur taille
  • test_iops.csv est la courbe du nombre d'IO par secondes selon leur taille
  • test_tal.csv est la courbe de la latence des IO selon leur taille
  • test_trace.txt qui est un fichier de tracez de l'exécution d'ORION
Voici le type de résultat envoyés par ORION (Une catastrophe dans une VM sur mon laptop !)
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:, 0
Large Columns:, 0, 1, 2
Total Data Points: 8

Name: /dev/raw/raw3 Size: 2056320000
Name: /dev/raw/raw4 Size: 2418232320
2 FILEs found.

Maximum Large MBPS=21.96 @ Small=0 and Large=2
Maximum Small IOPS=89 @ Small=5 and Large=0
Minimum Small Latency=13.36 @ Small=1 and Large=0

Pour conclure, selon vos besoins, utiliser des laptops comme serveur de bases de données peut être une mauvaise idée... Si vous n'en aviez pas encore la certitude

GarK!

Firewall et bases Oracle /*+restriction port*/

Vous avez peut-être été confronté à des équipes sécurité qui restreignent les ports accessibles sur leurs machines de base de données avec des pare-feux. Si c'est le cas, ou que vous travaillez avec des DMZ, n'utilisez pas une configuration Shared Server (aka MTS), ce n'est pas fait pour ça ! Vous pouvez biensûr utiliser une configuration Shared Server, et pour d'autres raisons.

Le protocole TCP permet d'utiliser des sockets qui dialoguent sur le même port, coté serveur, que le port sur lequel le programme est initialement en LISTEN. A priori Oracle utilise cette possibilité sur Unix et Linux. J'ai vérifié sur Oracle Enterprise Linux (ou Redhat Enterprise Linux 4), c'est bien le cas ! Si votre listener utilise le port 1521, tapez :

$ netstat -a |grep 1521

Vous verrez les connexions client/serveur avec les bases de données. Sous Windows, par défaut, ce n'est pas le cas. Si vous voulez activer cette possibilité, il faut modifier la base des registres comme suit :

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]
"USE_SHARED_SOCKET" = "TRUE"

où HOME0 le repertoire correpondant au bon ORACLE_HOME du Listener ! Biensûr ce paramétrage n'est pas dynamique.

GarK!

21 décembre 2006

Où sont les fichiers dans ASM ?

Comme si c'était différent avec un système de fichiers ! Vous avez probablement eu cette question : "Où sont les fichiers dans ASM ?". Comme si savoir où sont situés les fichiers changeait quelque chose !

Connecté à ASM, vous pouvez trouver l'ensemble des fichiers dans ASM grâce aux scripts ci-dessous :

column full_alias_path format a50
column file_number format 99999999999

select concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path, file_number
from ( select b.name gname, a.parent_index pindex, a.name aname,
a.reference_index rindex , a.system_created, a.alias_directory,
c.type file_type, a.file_number
from v$asm_alias a, v$asm_diskgroup b, v$asm_file c
where a.group_number = b.group_number
and a.group_number = c.group_number(+)
and a.file_number = c.file_number(+)
and a.file_incarnation = c.incarnation(+)
)
start with (mod(pindex, power(2, 24))) = 0
and rindex in
( select a.reference_index
from v$asm_alias a, v$asm_diskgroup b
where a.group_number = b.group_number
and (mod(a.parent_index, power(2, 24))) = 0
and a.name = '&DATABASENAME'
)
connect by prior rindex = pindex
/
Enter value for databasename: ORCL
old 17: and a.name = '&DATABASENAME'
new 17: and a.name = 'ORCL'

FULL_ALIAS_PATH FILE_NUMBER
-------------------------------------------------- ------------
+DATA/ORCL 4294967295
+DATA/ORCL/spfileORCL.ora 266
+DATA/ORCL/DATAFILE 4294967295
+DATA/ORCL/DATAFILE/SYSTEM.256.609759359 256
+DATA/ORCL/DATAFILE/SYSAUX.257.609759359 257
+DATA/ORCL/DATAFILE/UNDOTBS1.258.609759361 258
+DATA/ORCL/DATAFILE/USERS.259.609759361 259
+DATA/ORCL/DATAFILE/EXAMPLE.265.609759545 265
+DATA/ORCL/TEMPFILE 4294967295
+DATA/ORCL/TEMPFILE/TEMP.264.609759505 264
+DATA/ORCL/PARAMETERFILE 4294967295
+DATA/ORCL/PARAMETERFILE/spfile.266.609759985 266
+DATA/ORCL/CONTROLFILE 4294967295
+DATA/ORCL/CONTROLFILE/Current.260.609759459 260
+DATA/ORCL/ONLINELOG 4294967295
+DATA/ORCL/ONLINELOG/group_1.261.609759469 261
+DATA/ORCL/ONLINELOG/group_2.262.609759477 262
+DATA/ORCL/ONLINELOG/group_3.263.609759479 263

18 rows selected.

Une fois que vous avez le numéro du fichier (ici 259), effectuez la requête qui suit :

select DISK_KFFXP,AU_KFFXP,PXN_KFFXP,XNUM_KFFXP,LXN_KFFXP
from x$kffxp
where GROUP_KFFXP=1
and NUMBER_KFFXP=259;

DISK_KFFXP AU_KFFXP PXN_KFFXP XNUM_KFFXP LXN_KFFXP
---------- ---------- ---------- ---------- ----------
0 402 0 0 0
1 401 1 1 0
0 403 2 2 0
1 402 3 3 0
0 404 4 4 0
1 403 5 5 0

Il y a un excellent article pour en savoir (beaucoup) plus sur ASM ici !

GarK!

17 décembre 2006

SQL Developer 1.1 est "dehors" !

Une très bonne nouvelle ! Je vais de nouveau pouvoir écrire du SQL en mode graphique, comme avec Forms 5.0 et le Query Builder de l'époque; je n'ai pas encore trouvé comment faire une auto-jointure, mais j'y travaille !


La liste des nouveautés est dans la Release Notes. Sérieusement, quelques améliorations importantes pour les DBA : la capacité d'ajouter des droits et rôles à un utilisateur, le support de commandes SQL*Plus comme autotrace, un meilleur support de la prise de statistiques, etc...

Enfin, je retiens surtout qu'il y aura une version de moins à attendre avant de pouvoir utiliser depuis cet outil magique AWR, ADDM et les Advisors SQL. Non pas que je n'aime pas Enterprise Manager ! Et puis en attendant, je vais enregistrer mes scripts dans les "Snippets"

GarK!

16 décembre 2006

Créer des tables pour faire des calculs ?

La tentation d'utiliser des tables pour stocker des calculs et de faire plusieurs passes avec des ordres DML (Insrt/Update et Delete) pour sortir un résultat est grande... Ca permet :
  1. d'utiliser des ordres SQL pour modifier en n étapes des jeux de données très important
  2. de ne pas gérer les problèmes d'allocation de la mémoire (le malloc en C) et si vous n'avez pas assez d'espace, l'instance est capable de gérer les débordements sur disques sans que les développeurs s'en soucie !
Seulement voilà... avec une base de données Oracle (classique, oublions TimesTen !), ce genre d'approche peut poser des problèmes de montée en charge et notamment parce qu'Oracle 10g (9i, 8i, 8 et 7) journalise a priori l'ensemble des ordres DML ; Elle génère des redologs ! Si 50 utilisateurs font ce type de traitements simultanément, vous aurez probablement une forte contention sur les I/O d'autant plus que vos jeux de données sont importants. En outre, si votre base de données est en archivelog, vous en génèrerez autant d'archives. Enfin, cette approche est, par nature séquentielle !

Ci-dessous vous trouverez plusieurs réflexions, si vous voulez utiliser ce type d'approche malgré tout ou simplement pour essayer d'atténuer d'éventuels problèmes liés au fait que quelqu'un a trouvé que c'est une bonne idée ! mais d'abord, vous aurez compris, même si ça simplifie le développement, ce n'est pas forcément une brillante idée ! Enfin, pour ce que j'en sais au moins jusqu'en 10.2... Qui sait avec la 11 ?

Pour limiter la génération de redologs, vous pouvez préférer des tables temporaires aux autres type de tables. Dans ce cas, les données ne sont pas partagées entre sessions et l'activité Undo reste journalisée. LogMiner ou les traces des RedoLogs permettent de bien visualiser ce dernier phénomène.

Les tables temporaires n'ont donc pas d'influence sur les delete et ne réduisent que de 50% environ l'activité des Redo sur les updates (il garde le ROWID et l'image avant de la colonne modifiée : Biensûr si la colonne est NULL, je vous laisse faire les calculs). Si vous voulez encore limiter les effets de ces ordres, il y a quelques astuces :
  • Vous pouvez ne plus faire de delete : utilisez Truncate... si c'est possible et mêm si ça a d'autres inconvénients puisque vous ne pouvez pas mettre de clauses WHERE, ça génère des enqueues (Sur des tables temporaire, chaque session ayant son segment, c'est moins grave) et ça génère une sérialisation dans le cas de RAC jusqu'en 10g (au moins) ! Vous pouvez également utiliser des table temporaires "on commit delete rows"
  • Vous pouvez ne plus faire d'Updates ! Utilisez "Insert (select)" dans une autre table temporaire ou même dans une vrai table en NOLOGGING pour permettre de partager les données entre des sessions et réduire malgré tout l'activité des Redo
  • Gardez la même session n'a pas que des inconvénients. Si vous utilisez RAC, ça assure l'affinité à un noeud pour votre batch; Ca facilite l'identification d'un batch et donc les traces et la supervision des activités. Pour partager les données, avec d'autres sessions terminez vos calculs par un insert (select) dans une table normale. Si vous voulez, pour cette opération aussi ne pas générer de redologs, vous pouvez mettre votre table de résultat en nologging et utilisez le hint /*+append*/
Quoiqu'il en soit (c'est toujours vrai)... faites des tests de performances de vos applications ! C'est plus facile à dire qu'à faire, d'accord mais il faut développer dans l'optique de tester.

Avant de conclure, un petit mot sur des alternatives qui peuvent s'avérer redoutable, dans un sens comme dans l'autre... (1) faîtes des "select", ça changera votre vie et (2) ne montez pas des usines à gaz avec plusieurs bases de données ou alors utilisez des moteurs dédiés sur des serveurs d'applications comme Timesten et (3) si vous voulez conserver les données dans des objets PL/SQL, attention à la consommation de la mémoire (ils ne sont pas comme des tables stockés dans des tablespaces en cas de problème d'espace en mémoire), enfin (4) les fonctions de tables permettent d'intégrer des calculs très complexes (en PL/SQL) dans un select (n'oubliez pas le (1))

GarK!

12 décembre 2006

Pour le suivi et diagnostique des performances des bases 8i et 9i

Si les aspects performance vous intéressent : il y a 2 sessions retiendront votre attention dans la liste des sessions d'Openworld 2006 :
  • (S281231) Sifting Through the ASHes: Advanced Database Performance Tuning Using Active Session History by Graham Wood et sa présentation
  • (S281975) Using ADDM, AWR, ASH, and Database Metrics with Oracle9i and Oracle8i Database by Arun Kumar, Cingular Wireless & John Kanagaraj, DBSoft Inc. avec sa présentation et son white-paper. Cette présentation explique entre-autre comment "back-porter" les approches de la 10g sur des 8i et 9i
Les connexions sont toujours les mêmes (cboracle/oraclec6). En outre le blog de Chris Foot est une mise d'informations http://www.dbazine.com/blogs/blog-cf/chrisfoot/

GarK!

10 décembre 2006

Désormais facile à suivre /* RSS */

Avec 7 changements d'ordinateurs portables en 6 mois, on peut dire que j'ai appris quelques trucs sur l'art d'être volatile ! Marre d'échanger des fichiers OPML entre mes versions de Thunderbird et de recréer les arborescences, j'ai basculé mes RSS sur Google Reader avec un vrai intérêt (et quand même un bug! Enfin, rien d'insupportable).

Parmi les petits plus qu'offre ce site web, la capacité de me copier. Regardez simplement l'URL : http://www.google.com/reader/shared/08211405406693932079

-GarK!

09 décembre 2006

Introduction à Oracle Recovery Manager (RMAN) /*+Tutorial ou Pas à pas*/

/** Ce qui suit a été testé sur une version 10.2.0.3 et est fourni à
** des fins d'informations uniquement !
** Testez et ne faites pas ce qui est écrit sans réfléchir; par exemple,
** quand il est demandé de brûler votre machine et votre baie de
** stockage, réfléchissez d'abord aux conséquences sur
** l'environnement... */

Oracle Recover Manager (RMAN) est "L'"outil de sauvegarde des bases de données Oracle. Vous pouvez faire autrement, et... Ca sera peut-être moins bien ! vous trouverez ci-dessous un scénario simple d'utilisation d'Oracle Recovery Manager et quelques réflexions quant à l'intérêt liés à son utilisation....

Avant d'utiliser RMAN

Une base de données Oracle est constituée de "fichiers" :

  • Le fichier de contrôle et ses copies (controlfiles) contiennent l'ensemble de l'information sur les fichiers de la base de données, leur état et bien d'autres aspects
  • Les fichiers de données (datafiles) contiennent l'ensemble des données. A moins que la base de données ait été arrêtée "proprement", les données dans les fichiers de données sont incohérentes. Plusieurs versions des données peuvent être contenues ces "datafiles" ; ce sont les images avant contenues dans les UNDO.
  • Les fichiers journaux (redologs) contiennent les ordres qui ont modifiés la base de données. Oracle garantit que si les ordres ont été validés par un "commit", ces ordres sont stockés dans les redologs. Les redologs cyclent, c'est à dire qu'une fois le dernier redologs utilisé, Oracle réutilise le premier redolog.
  • Les fichiers journaux archivés (archivelogs) sont des copies des redologs. En effet, les instances utilisent les redologs pour garantir qu'en cas de crash, les données nécessaires pour rendre de nouveau le système opérationnel seront bien disponibles. Les transactions ne sont pas forcément toutes historisées. Garder une copie des fichiers redologs (les archivelogs) permet donc de rejouer les transactions après avoir restaurer une base de données. Activer le mode "Archivelog" permet de remonter une base de données à tous les moments de sa vie et permet d'effectuer des sauvegardes la base de données étant ouverte.

Une base de données est gérée par une ou plusieurs (en RAC) instances. Les instances sont consitituées de process et d'une mémoire partagée (la SGA). Elles offrent une image cohérente de la base de données. Elles permettent de résoudre les ordres SQL de manière efficace, les accès concurrents, etc. Pour démarrer une instance, il faut un fichier de paramètres des instances (le SPFILE) !

Des idées répandues et fausses

Lorsqu'on fait une sauvegarde d'une base de données sans passer par Recovery Manager, il faut éviter le phénomène de "split block". Autrement dit, il faut que chaque bloc écrit dans les fichiers de données soit copiés de manière cohérente... Il ne faut pas que les blocs soient corrompus dans la sauvegarde sous peine que la restauration aboutisse à un ensemble inutilisable. Pour cette raison, toutes les techniques de sauvegardes qui n'utilisent pas une lecture directe de la base de données par des processus RMAN nécessite de change le comportement de la base de données par l'ordre ALTER DATABASE BEGIN BACKUP. Lorsque vous finissez votre sauvegarde par un "cp", un "split-mirror" ou par un "backup proxy", il faut que la commande ALTER DATABASE BEGIN BACKUP soit effectuée sur toutes les instances qui gèrent votre base de données.

Plusieurs idées répandues et fausses sont que cette commande "BEGIN BACKUP" empêche les "split blocks", qu'elle fige les I/O sur les datafiles ou même qu'elle passe les tablespaces en lecture seule. En fait, les comportements des instances sont modifiés et, entre autre mais guère plus, les blocs modifiés sont stockés dans les redologs. Ainsi, si pendant une restauration, un "split block" se produit, le processus de recover des transactions pourra reconstituer les blocs altérés par la sauvegarde. Pour en savoir plus quant à ce phénomène de split block, vous trouverez un document intéressant à l'URL qui suit :http://www.speakeasy.org/~jwilton/oracle/hot-backup.html
Lorsque vous utilisez RMAN (en dehors du cas particulier du backup proxy), les split blocks sont tout simplement prévenus du fait que RMAN est capable de les détecter et de les résoudre. Il n'est donc pas besoin de changer le comportement des instances pendant les sauvegardes RMAN.

Recovery Manager permet d'effectuer des sauvegardes, base de données arrêtée et base de données en mode "noarchivelog". En fait, l'idée contraire relativement répandue elle aussi vient du fait que RMAN à besoin d'une instance pour être utilisé et d'un fichier de contrôle pour sauvegarder les datafiles. C'est le controlfile qui contient les informations d'où se situent les datafiles ; toute méthode qui utilise un autre fichier est à bien valider.

Sauvegarde RMAN

Une fois une base de données créée, il faut effectuer une sauvegarde (avec RMAN, par exemple !). Dans ce qui suit,
  • Vous effectuerez la sauvegarde sur disque mais une sauvegarde sur bande n'est pas beaucoup plus compliquée. Il faut alors utiliser un Media Manager (Netbackup, Data Protector, TSM, Oracle Secure Backup, Time Navigator...) et un agent Oracle (la librairie "libobk") pour permettre à RMAN d'envoyer directement les sauvegardes au Media Manager.
  • Vous stockerez les informations des sauvegardes dans le controlfile ce qui évite de créer une base de données "catalogue" pour les sauvegardes. Cette méthode a de nombreux intérêts (plus grande rétention, plus grande facilité de restauration en cas de perte du controlfile, reporting global, ...). Pour notre test, utiliser le controlfile est plus rapide et permet de toute façon de montrer comment s'en sortir quand on a TOUT perdu
  • Selon le type de d'erreur contre lesquelles, vous voulez se prémunir, l'endroit où vous stockerez les sauvegardes aura de l'importance. Si vous voulez vous prémunir d'une erreur du stockage, évitez de conserver des sauvegardes dans le même environnement de stockage que la base de données. Pour le test, nous voulons nous prémunir d'un ordre "rm -rf oradata" et nous laisserons les sauvegardes dans une autre arborescence du système de fichiers.
1) La première étape de la sauvegarde consiste à paramétrer les options RMAN grâce à la commande CONFIGURE comme ci-dessous.

Il faut d'abord se connecter, avec RMAN, à la base de données (on devrait dire instance mais dans le cas de RAC, on peut lancer les sauvegardes sur plusieurs instances). Pour cela, vous paramétrez les variables d'environnement ORACLE_HOME et ORACLE_SID, ou vous utilisez une chaine de connexion réseau avec un passwordfile. Pour utilisez RMAN, il faut se connecter SYSDBA... voici donc un exemple de connexion RMAN sous Unix ou Linux depuis le compte "oracle" du serveur de base de données. Vous remarquerez que le DBID est affiché si l'instance de base de données est montée sur le controlfile.
$ . oraenv
ORACLE_SID = [ORCL] ?
$ rman target=/ nocatalog
Recovery Manager: Release 10.2.0.3.0 - Production on Sam. Déc.
connecté à la base de données cible : ORCL (DBID=1136510590)
utilisation du fichier de controle de la base de données cible au lieu du catalogue de récupération

Une fois connecté à RMAN, vous allez configurer plusieurs option par défaut de la sauvegarde et en particulier, vous allez indiquer que les sauvegardes par défaut son mise sur les disques en tapant la commande qui suit :
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;

Ensuite, vous allez paramétrer la sauvegarde automatique des fichiers de contrôle et des spfiles et vous allez indiquer que ces fichiers sont sauvegardés avec le format généré par RMAN (%F) dans l'arborescence qui vous convient sur le disque :
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/oracle/backups/%F';
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

Et puis, vous allez définir l'arborescence dans laquelle vos sauvegardes seront conservées (%U, permet de laisser à RMAN nommer les fichiers de sauvegarde selon ses règles de nommage). On peut également définir certaines propriétés quant aux sauvegardes. Dans ce qui suit, vous indiquerez que les sauvegardes sont compressées par RMAN et que deux process effectuent la sauvegarde, ce qui permet du parallèlisme.
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/oracle/backups/%U';
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 2;

Enfin, vous pouvez visualiser l'ensemble de la configuration RMAN en utilisant la commande SHOW ALL comme ceci :
RMAN> SHOW ALL;

2) Une fois RMAN correctement configuré, il suffit de lancer la sauvegarde de la base de données. Par exemple, si vous êtes en mode ARCHIVELOG, il faut saisir la commande suivante pour effectuer une sauvegarde à chaud :

RMAN> backup database plus archivelog delete input;
Cette commande effectue les opérations suivantes (vérifiez en regardant les log RMAN)
  • Elle sauvegarde les archivelogs non encore supprimé et les supprime
  • Elle sauvegarde l'ensemble de datafiles
  • Elle archive le/les redolog(s) courant(s) puis sauvegarde l'ensemble des archivelogs générées depuis le premier point. Cette dernière étape est cruciale puisqu'elle permet d'assurer qu'il y a sur disque un ensemble d'archivelogs qui permettra de restaurer et de faire le recover de la base de données, i.e. toutes les transactions jouées pendant la sauvegarde à chaud sont dans les sauvegardes pour permettre un recover jusqu'à la fin de la sauvegarde des datafiles. Les archivelogs sont ensuite supprimées.
  • Si vous êtes en "controlfile autobackup on", ce qui est largement recommandé, les fichiers de contrôle et SPFILE sont ensuite sauvegardés
3) Par ailleurs pour supprimer les anciennes sauvegardes rendues obsolètes par votre nouvelle sauvegarde et ainsi conserver de l'espace disque, vous pouvez utiliser la commande qui suit. Le résultat de cette commande dépend de la politique de rétention des sauvegardes que vous avez choisie (cf "CONFIGURE RETENTION POLICY TO")

RMAN> delete obsolete;

4) Pour vérifiez vos sauvegardes, utilisez la commande list backup, comme ceci :

RMAN> list backup;
ou
RMAN> list backup summary;
ou tout autre option que vous trouverez utile.

5) Sortez de la ligne de commande d'Oracle Recovery Manager :

RMAN> exit;

Ce qui peut vous arriver de pire (quoique...)

Supposons maintenant que vous ayez tout perdu sur vos disques de production, c'est à dire :
  1. les datafiles
  2. les redo logs
  3. les controlfiles
  4. les archivelogs
  5. le spfile
  6. les tempfiles
  7. le passwordfile
  8. la configuration réseau stockée sur la machine
  9. la distribution Oracle
  10. le système d'exploitation (et donc Windows le Service Oracle, Sous Unix/Linux le fichier oratab)
  11. d'éventuels fichiers annexes à la configuration de la base de données comme l'OCR ou les fichiers de configuration du Broker Data Guard
Bref, Il ne vous reste plus qu'un espace de stockage avec les fichiers de sauvegarde qui par chance était sur une autre baie (ou dans votre Media Manager... je n'ose plus dire bande puisque maintenant la plupart des architectures ont des espaces tampon sur disques). Pour simuler ce problème, le mieux est de brûler votre machine de test et les baies de production (Je rigole, ne le faîte pas... Si c'est un p595, ça se discute !). Idéalement pour que votre test soit représentatif, il faut faire, une CROSS RESTAURATION, c'est à dire une restauration sur une autre machine. En particulier lorsque vous utilisez un Media Manager. Pour certains outils, il faut en effet préciser le nom de la machine d'origine dans les paramètres d'allocation des canaux SBT_TAPE RMAN.

Pour effectuer un test représentatif sur la même machine, arrêtez l'instance (et le service sous Windows) et enlevez tous les fichiers de 1 à 11 et toutes les arborescences.

Si c'est juste pour vous entrainer et pas pour valider vos restaurations :
  • enlevez tous les fichiers de 1 à 8,
  • supprimez la ligne de l'instance dans le fichier oratab (ou sous windows, le service de l'instance grâce à l'utilitaire en ligne de commande "oradim")
  • supprimez les fichiers dr1.dat et dr2.dat si vous utilisez le boker Data Guard
  • supprimez toutes les arborescences (e.g. si vous êtes en OFA : $ORACLE_BASE/oradata/{DB_NAME}, $ORACLE_BASE/admin/{DB_NAME}, etc) en cas de problème, il faudra les recréer !

Encore un conseil : avant de supprimer un quelconque fichier réfléchissez au moins 2 fois aux pires conséquences possibles, si votre restaure ne fonctionne pas. Si vous n'avez pas de problème d'espace, préférez toujours renommer les fichiers plutôt que les supprimer !

Restauration complète


Imaginons toujours le pire des cas... vos collègues vous ont bien préparé le terrain et vous ne savez absolument rien sur la base de données que vous devez restaurer. Laissez tomber et préparez-vous à passer un sale quart d'heure ! Rappelez-vous du célèbre dicton : "les absents ont toujours tord". En fait, il faut connaître plusieurs choses et notamment (on suppose qu'on n'a pas de catalogue, sinon, c'est plutôt plus simple) :
  • La version de la base de données que vous voulez restaurer
  • L'endroit où sont stockées les sauvegardes
  • l'identifiant de la base de données à restaurer (le DBID)
    • Pour ce dernier, si vous avez de la chance, vous pouvez le retrouver... En effet les formats de sauvegardes par défaut de l'autobackup du controlfile est c-IIIIIIIIII-YYYYMMDD-QQ où la zone IIIIIIIIII est le DBID. Si vous ne mettez pas toutes les sauvegardes de vos 500 base de données au même endroit, avec quelques essais, vous arriverez à identifier le bon DBID.
1) Vous allez maintenant restaurer le SPFILE. Pour cela, il faut que vous ayez réinstallé le logiciel Oracle... vous allez ensuite créer une instance pour utiliser RMAN :
  • Créez un fichier init.ora pour votre instance temporaire. Si, comme moi, vous êtes un fan de OFA, voici ce que peut-être votre init.ora.
db_name=GARK
sga_target=120M
processes=50
pga_aggregate_target=80M
  • Créez un répertoire admin dans ORACLE_BASE qui contient les répertoires
{DB_NAME}/adump
{DB_NAME}/bdump
{DB_NAME}/cdump
{DB_NAME}/udump
{DB_NAME}/pfile
  • Indiquez dans le fichier oratab votre instance temporaire comme dans l'exemple ci-dessous (Si vous connaissez le nom de l'instance, utilisez le nom à la place de "GARK", sinon, vous pouvez changer le nom de l'instance... Si votre réseau Oracle utilise une notation JDBC Thin du type host:port:SID ou si vous utilisiez le mots ORACLE_SID dans vos alias TNS où qu'ils soient stockés, vous retrouverez le nom de l'instance, sinon, vous utilisez des services... C'est très bien continuez ! et le nom de l'instance importe peu) :
GARK:/u01/app/oracle/product/10.2.0/db_1:N
ou sous Windows avec l'utilitaire oradim, indiquez l'instance
C:\> oradim -new -sid GARK
  • Démarrez l'instance avec SQL*Plus comme dans le script shell ci-dessous
$ . oraenv
ORACLE_SID = [GARK] ?
$ sqlplus / as sysdba
$ startup nomount pfile='/tmp/init.ora';
où l'init est celui que vous venez de créer
  • Ensuite, vous allez vous connecter à l'instance avec RMAN comme ceci :
$ . oraenv
ORACLE_SID = [GARK] ?
$ rman target=/ nocatalog
  • Vous allez indiquer l'emplacement des fichiers de sauvegarde ainsi que le DBID de la base de données que vous voulez restaurer puis simplement demander de restaurer le SPFILE depuis l'autobackup
RMAN> set DBID 1136510590;
RMAN> run {
2> set CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\u01\oracle\product\10.2.0\backup\%F';
3> restore spfile from autobackup;
4> }

2) Démarrer sur le SPFILE
  • Avant d'arrêter l'instance et de démarrer l'instance sur le SPFILE, créez un fichier d'init.ora avec le SPFILE restauré (dans $ORACLE_HOME/dbs sous Unix et %ORACLE_HOME%\database sous Windows). Pour cela, vous pouvez vous connectez à l'instance avec SQL*Plus et utiliser la commande ci-dessous :
$ . oraenv
ORACLE_SID = [GARK] ?
$ sqlplus / as sysdba
SQL> create pfile='/u01/app/oracle/product/10.2.0/admin/GARK/pfile/initGARK.ora' from
2 spfile='/u01/app/oracle/product/10.2.0/db_1/dbs/spfileGARK.ora';
  • L'étape précédente vous permet retrouver l'ensemble de l'arborescence utile pour démarrer l'instance sur le SPFILE. Regardez dans l'init.ora ainsi créé l'ensemble des paramètres qui indiquent des fichiers et répertoires et particulièrement les paramètres suivants :
control_files
audit_file_dest
background_dump_dest
core_dump_dest
user_dump_dest
db_create_file_dest
db_create_online_log_dest_n
db_recovery_file_dest
log_archive_dest, log_archive_duplex_dest ou log_archive_dest_n
standby_archive_dest
Vous pouvez maintenant recréer une partie suffisante de l'arborescence pour restaurer le(s) controlfile(s)
  • Il faut ensuite créer un fichier de mot de passe si nécessaire. Visualisez la valeur du paramètre remote_login_passwordfile. Si la valeur est à shared ou exclusive, il faut créer un fichier de mot de passe avec l'utilitaire orapwd. Sous windows dans %ORACLE_HOME%\database et sous Unix/Linux sous $ORACLE_HOME/dbs.
    sous Windows dans le répertoire du fichier de mot de passe (Attention le nom est PWD.ORA)
    orapwd file=PWDGARK.ORA password=manager entries=5 force=y
    sous Unix/Linux dans le répertoire du fichier de mot de passe (Attention le nom est orapw)
    orapwd file=orapwGARK password=manager entries=5 force=y
  • Il faut enfin effectuer la configuration réseau. En particulier, les paramètres local_listener et remote_listener indique, si le LISTENER n'est pas configuré sur le port 1521 sur la machine locale pointent éventuellement sur des alias TNS qui doivent exister. Il faut également regarder les configurations client et positionner un listener en conséquence.
  • Ensuite vous pouvez arrêter votre instance et démarrer sur le spfile comme ci-dessous :
$ . oraenv
ORACLE_SID = [GARK] ?
$ sqlplus / as sysdba
SQL> shutdown abort
SQL> startup nomount

3) Restaurer le controlfile
  • Pour restaurer le dernier controlfile, il suffit d'utiliser la commande ci-dessous en remplacent le DBID et le répertoire de sauvegarde par ceux qui conviennent :
$ . oraenv
ORACLE_SID = [GARK] ?
$ rman target=/ nocatalog
RMAN> set DBID 1136510590;
RMAN> run {
2> set CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\u01\oracle\product\10.2.0\backup\%F';
3> restore controlfile from autobackup;
4> }

4) Restaurer les datafiles et effectuer le recover
  • Avant de restaurer les fichiers de la base de données, il convient de valider que l'arborescence convien pour effectivement les restaurer. Pour celà, on monte l'instance sur le controlfile restauré précédemment. Il est possible de le faure directement depuis RMAN avec la lignde commande qui suit :
RMAN> alter database mount;
RMAN> exit;
  • ensuite, vous pouvez interroger les vues dynamiques du dictonnaire de données pour retrouver les arborescences
    $ . oraenv
    ORACLE_SID = [GARK] ?
    $ sqlplus / as sysdbaSQL> select name from v$datafile;
    SQL> select name from v$tempfile;
    SQL> select member from v$logfile;
  • enfin vous pouvez restaurer puis faire le recover de votre base de données grâce à RMAN. Puisque vous avez déjà restauré le controlfile, il n'est plus nécessaire de gérer la configuration RMAN qui est stockée dans ce fichier... sauf si parce que vous restaurer sur une autre machine, ces paramètres ne sont plus valides. Le script de restauration et de recover est le suivant :
$ . oraenv
ORACLE_SID = [GARK] ?
$ rman target=/ nocatalog
RMAN> run {
2> restore database;
3> recover database;
4> }
  • Il y a une erreur... bien sur ! Comme vous l'avez compris vous n'êtes pas capable de restaurer toutes les transactions. Les données dans les redologs sont perdus (à moins qu'ils n'est été, eux, multiplexés dans 2 baies). Le message doit ressembler à ce qui suit :
journal d'archivage introuvable
journal d'archivage thread=1 séquence=10
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: Echec de la commande recover à 12/09/2006 xxxxxxxx
RMAN-06054: la récupération après défaillance matérielle requiert un journal inconnu : thread 1 séquence 10 lowscn 586

5) Ouvrir la base de données
  • A partir du moment où vous repartez d'une sauvegarde du controlfile, il faut remettre à jour le controlfile et donc ouvrir la base de données en mode resetlogs. Vous pouvez utiliser RMAN pour ouvrir la base de données :
RMAN> alter database open resetlogs;

6) Encore un petit effort, quoique...
  • En 10g, 2 bonnes nouvelles :
    • après une restauration et un open resetlogs, pas besoin de refaire un backup. Il faut toutefois que les archivelogs aient en paramètre (dans log_archive_format) un %r qui indique le SCN de réincarnation
    • après l'ouverture de la base de données, les fichiers temporaires sont recréés alors qu'en 9i, la procédure est manuelle (vérifiez que c'est le cas)
  • Que faut-il faire me direz-vous ? Et bien tester !
    • Vous devez vous connecter sous un compte utilisateur classique et effectuer quelques requêtes pour valider que ça semble fonctionner. Le faire en local et via le réseau. Si vous utilisez un passwordfile, vérifiez que vous arrivez à vous connecter SYSDBA avec un alias réseau
    • Vous devez vérifier l'alert.log pour vérifier qu'il n'y a pas de problème particulier
    • Idéalement, il faudrait demander aux administrateurs de l'application de faire une recette de la base de données et rester à disposition le temps que les tests soient terminés. Enfin, si vous en êtes arrivé là, peut-être que la situation n'était déjà pas idéale.
Intérêts de RMAN

Vous me direz, ça n'a pas l'air si simple... et pourtant, passez-y 1 journée et vous trouverez ça tellement confortable que vous vous demanderez pourquoi certains font autrement. En particulier et depuis le début, ce qui est simple c'est de restaurer les données ! il faut dire que ce qui précède correspond à un cas déjà compliqué : vous avez perdu toute votre machine et remontez la base de données sur une autre machine. Pourtant la reconstitution de votre environnement tient en 2 pages? Alors, pourquoi utiliser Recovery Manager ?
  • La restauration et le recover sont simples (pas besoin de trouver les fichiers, tout est référencé)... et ceci depuis la 8i ; je n'ose pas dire la 8, j'en ai tellement souffert !
  • C'est l'outil standard de sauvegarde des bases de données Oracle; il est installé sur vos configurations; il est inclus dans la licence de la base de données et plus de 60% des DBA Oracle le connaissent bien. Par exemple, les certifications Oracle sont basées uniquement sur RMAN
  • RMAN valide les blocs et permet ainsi que garantir la bonne santé de vos bases de données. Si vous n'utilisez pas RMAN, if faut faire des DB Verify ou des exports de manière régulière pour valider l'intégrité des structures de fichiers Oracle
  • RMAN est capable de monter en charge. Ca peut sembler facile d'avoir un système de sauvegarde capacle de monter en charge et pourtant... C'est moins fréquent que vous l'imaginez. Mettre en place une architecture capable de sauvegarder 3 TB à l'heure sur des bandes n'a rien d'un challenge insurmontable. Théoriquement et pratiquement, vous vous appercevrez qu'il n'y a pas de contention. Si vous ajoutez plus de matériel, vous aurez plus de puissance. C'est d'autant plus vrai que vous utiliserez ASM pour répartir vos données sur plusieurs baies de stockages de manière homogène.
  • L'utilisation d'un catalogue permet une gestion centralisée de toutes les sauvegardes. Il simplifie encore la restauration et permet des stratégies évoluées comme les offload backup : sauvegardes sur une base de données standby ou sur un BCV et référencement des éléments dans l'environnement de production
  • RMAN est capable de synchroniser ses informations avec celle du Media Manager et des disques. Si vous supprimez une sauvegarde, RMAN peut mettre à jour son référentiel en conséquence grâce à la commande CROSSCHECK
  • RMAN permet de définir des politiques de rétention et donc de conserver 2 sauvegarde ou 10 jour en arrière. Les commandes PURGE prennent en compte vos engagements vis à vis des projets
  • RMAN a une connaissance intime de la base de données. Il permet d'effectuer des sauvegardes incrémentale et donc de gagner en espace de sauvegarde. Il peut utiliser le fichier "Block Change Tracking File" et donc ne lire que les données modifiées depuis la dernière sauvegarde. Les temps de sauvegarde sont alors très rapide. Enfin pour accélerer les restauration, vous pouvez fusionner les sauvegardes incrémentales dans une copie de la base de données et ainsi garantir des temps de restauration très rapide
  • RMAN est utilisé et intégré à de nombreuses autres technologies d'Oracle 10g :
    • la Flashback database et les flashback logs peuvent être utilisés depuis RMAN. Vous pouvez alors (1) Revenir en arrière et, (2) si vous être allé trop loin effectuer un recover...
    • DataGuard, vous pouvez instancier une standby sans aucune indisponibilité grâce à RMAN. Vous pouvez sauvegardé une standby physique au lieu de la base de données primaire
    • RAC, RMAN est capable de "loadbalancer" la charge des sauvegardes sur plusieurs noeuds d'un RAC
    • RMAN permet de manipuler et déplacer des fichier dans ASM (Automatic Storage Management)
    • Les Tablespaces Transportables peuvent être pilotés depuis RMAN
    • Cross Platform Tablespace Transportable. RMAN permet de changer l'endianess des fichiers et migre d'une plateforme Big Endian à Small Endian un tablespace complet
  • RMAN permet de faire du TSPITR (Tablespace Point In Time Recovery). Si vous utilisez des bases de données mutualisées, vous pouvez garantir le retour en arrière d'une partie de la base de données sans impacts pour les autres parties (sous réserve que les tablespaces soient "self content")
  • RMAN permet de restaurer 1 bloc corrompu, c'est le Block Media Recovery, sans autre indisponibilité pour le service que ce bloc
  • RMAN est utilisé par la Flash Recovery Area pour automatiser les sauvegardes disques et optimisation la gestion de l'espace des sauvegardes
  • RMAN permet une des techniques de restauration/recover les plus rapides. Grâce à la commande SWITCH, vous pouvez basculer d'une base de données de production à une sauvegarde "copie" de la base sur disque très rapidement et sans aucune intervention système.
  • En 10g, RMAN gère les réincarnations. Si vous faîtes un OPEN RESETLOGS, vous n'êtes plus obligé de faire une sauvegarde avant de ré-ouvrir le service. Toutes les autres techniques nécessite une prise d'image de la production après le recover
  • Recovery Manager et Advanced Security Option (ASO) permettent le chiffrement des fichiers de sauvegardes sur les disques.
  • Recovery Manager bénéficie de sa connaissance de la base de données pour optimiser les temps de sauvegardes ou le volume d'I/O. Il ne sauvegarde pas les blocs vides de la base de données et est capable de générer des fichiers de sauvegarde compressés
  • Recovery Manager peut être utilisé pour construire des clones des bases de données. La commande "DUPLICATE" renomme la base de données, l'arborescence automatiquement et peut enregistrer la nouvelle base de données dans le catalogue des sauvegardes
  • Oracle Enterprise Manager Grid Control offre une interface graphique à Recovery Manager
  • RMAN permet des stratégies très évoluées. Il peut, avec la commande "PROXY" piloter le Media Manager, et dans le cas de TiNa par exemple, piloter des Split Mirror Backup via des BCV et TimeFinder. Il s'intègre dans l'interface BR*Backup de SAP et permet, si vous utilisez des bases Oracle, une intégration complète et des techniques évoluées sans utiliser BackInt.
J'en oublie sûrement (les archives de tablespaces, ...) ! Sans compter que la 11 va, elle aussi, apporter son lot de nouveautés. Peut-être RMAN assurera lui-même le transfort des fichiers entre les machines, qui sait ?

Les limites de RMAN

Vous auriez du mal à croire qu'il n'y a pas quelques limites à l'utilisation de Recovery Manager. Il y en a probablement quelques unes, quoique...
  • D'abord RMAN ne sauvegarde que des bases de données Oracle et après 8i (pour simplifier). Oracle Secure Backup complète le dispositif mais si vous voulez sauvegarder des systèmes complexes en terme d'I/O comme d'autres bases de données, OSB n'est surement pas très adapté utilisé seul. Cela étant, les mécanismes de sauvegarde des bases de données sont très dépendant de leur architecture. Des produits capables de sauvegarder plusieurs SGBD (le plus connu étant sans doute SQL*Backtrack) ont donc des stratégies très différentes pour sauvegarder un SGBD ou un autre. Seule l'interface est identique mais les comportements mathématiques (entendez bugs) seront eux très différents.
  • En mode classique, RMAN utilise la bande I/O des serveurs de base de données et le réseau pour envoyer les données sur un Media Manager. Plusieurs choses vont sans doute changer cette contrainte... la convergence des réseaux avec le SAN-IP ou Infiniband, l'enrichissement et l'utilisation de Oracle Secure Backup. Mais c'est vrai que connecter directement le Media Manager dans le SAN peut apporter une vrai capacité à absorber des charges I/O quand RMAN trouve ses limites.
  • On reporte ici ou là quelques autres faiblesses. Par exemple, le taux de compression de RMAN en 10g serait-il moins bon que celui d'autres produits ?

Conclusion

Recovery Manager est un outil très puissant qui aide de nombreuses entreprises utilisatrices d'Oracle. L'ignorer encore, parce qu'on a eu des difficultés il y a 6 ou 8 ans, c'est sans doute se priver d'un potentiel intéressant tant en terme de fiabilisation de systèmes que de souplesse pour créer ou migrer des environnements. Je souhaite que ce document vous soit utile pour découvrir ou vous faire une nouvelle opinion.

GarK!