30 0 132KB
Mise en place d’une politique de sauvegarde avec RMAN
1 Présentation de RMAN
L’outil RMAN (Recovery Manager) est un utilitaire Oracle disponible en ligne de commande. RMAN est un outil puissant spécialisé dans les sauvegardes de base de données. Il dispose de multiples fonctionnalités qui permettent, entre autres, de réaliser des sauvegardes et restaurations de base de données. L’article s’appuie sur l’utilisation de RMAN sous Oracle 10g.
1.1 Le référentiel (Repository) RMAN utilise un référentiel pour stocker un certain nombre d’informations nécessaires à son utilisation. Dans ce référentiel on trouve : la configuration de RMAN la structure de la base de données cible les fichiers de journalisations l’historique des sauvegardes réalisées Ce référentiel est indispensable au bon fonctionnement de RMAN. Celui-ci peut être stocké : soit dans les fichiers de contrôles de la base de données cible, soit dans un catalogue de récupération.
Sauvegarde du référentiel dans les fichiers de contrôle L’utilisation du référentiel via les fichiers de contrôle engendre plusieurs contraintes: Les fichiers de contrôle deviennent extrêmement critiques dans ce type de configuration. En cas de perte des fichiers, vous ne disposerez plus d’informations relatives aux sauvegardes effectuées via l’utilitaire RMAN. La taille des fichiers de contrôle doit être surveillée régulièrement. Les informations concernant chaque sauvegarde étant enregistrées dans les fichiers de contrôle, ceux-ci ont tendance à grossir de façon notable. Le paramètre d’initialisation Oracle : CONTROL_FILE_RECORD_KEEP_TIME. Il permet de déterminer la durée de conservation des informations de sauvegarde. Plusieurs fonctionnalités de RMAN seront désactivées. Il vous sera entre autre impossible de stocker des scripts de sauvegarde ou de restauration pour la base cible. Malgré les contraintes évoquées ci-dessus, l’utilisation du référentiel via les fichiers de contrôle permet de ne pas gérer un schéma supplémentaire.
Sauvegarde du référentiel dans un catalogue de récupération.
Le référentiel peut être stocké dans un catalogue de récupération. Pour utiliser cette configuration, il est impératif de créer un nouveau schéma dans une base de données différente de la base de données cible.
Un catalogue de récupération peut stocker plusieurs référentiels de base de données. Cette infrastructure permet de centraliser la gestion des sauvegardes d’un système
d’information. En outre il permet de conserver les informations de sauvegarde, même en cas de perte des fichiers de contrôle de la base cible.
1.2 La Zone de récupération rapide (Flash Recovery Area) Il existe depuis la version 9i d’Oracle une fonctionnalité permettant de restaurer à un instant T une base de données. Cette fonctionnalité dite de « FlashBack » nécessite la mise en place d’une zone de stockage spécifique : la zone de récupération rapide. Nous verrons dans le chapitre dédié au flashback qu’il existe de nombreuses fonctionnalités disponibles dans la version 10g. Il est maintenant possible de réaliser des opérations de flashback à différents niveaux (ligne, table et base de données).
Sous RMAN il existe 2 modes pour réaliser les sauvegardes :
La copie d’image : ce mode réalise une copie parfaite du fichier, il équivaut à l’utilisation d’une fonction de copie au niveau du système d’exploitation. Le fichier est copié bit à bit. Le jeu de sauvegarde : ce mode permet de réaliser un jeu de sauvegarde, celui-ci contient un ou plusieurs fichiers. Par default RMAN ne crée qu’un seul élément de sauvegarde. Une taille maximum pour un élément peut être définie. Si la sauvegarde dépasse la taille, la sauvegarde contiendra plusieurs éléments. Sous ce mode il est possible de réaliser une compression de la sauvegarde (Oracle annonce une diminution de la taille par 5).
1.3 La commande RMAN La commande RMAN doit être exécutée dans un invité de commande. Pour réaliser des sauvegardes et restaurations il est important de connaître les principales options disponibles avec cette commande. Le tableau ci-dessous énumère les principales options.
SYNTAXE TARGET=chaîne
CATALOG=chaîne
LOG=logfile APPEND CMDFILE=fichier ou @fichier
DESCRIPTION Représente la chaîne de connexion à la base de données cible. Ex : TARGET SYS/password@mydatabase Représente la chaîne de connexion à la base de données contenant le catalogue de récupération. Si aucun catalogue n’est utilisé vous pouvez spécifier l’option NOCATALOG (option par défaut) Active l’écriture d’un fichier de log dans lequel est inscrit la sortie de RMAN Cette option permet d’ouvrir le fichier de log en ajout Indique le chemin d’un fichier contenant des instructions pour RMAN. Les instructions sont lues et executées de façon sequentielle
1.4 Configuration de RMAN Il existe plusieurs options de configurations dans RMAN, utilisées lors de l’exécution des commandes de sauvegarde, restauration …
Pour visualiser les options définies pour votre infrastructure vous pouvez taper la commande : SHOW ALL dans RMAN Configuration de la politique de rétention RMAN dispose d’une option permettant de définir le nombre de jours durant lesquels une sauvegarde sera en mesure de restaurer l’état initial des données. Une fois ce délai expiré, la sauvegarde sera marquée comme obsolète. Ex : RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAY; Cette commande définit un délai de 5 jours avant que les sauvegardes ne soient considérées comme obsolètes. En cas d’utilisation de la zone de récupération rapide, une gestion automatique des sauvegardes obsolètes s’opère. Si un manque d’espace disque est détecté, une suppression des sauvegardes obsolètes sera alors réalisée automatiquement. Une seconde option concernant la politique de rétention est disponible sous RMAN. Il s’agit de l’option permettant de définir le nombre de jeux de sauvegarde à conserver (par défaut il est défini à 1). Ex : RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY = 2; Au-delà du deuxième jeu de sauvegarde, les jeux seront marqués comme invalides. Pour revenir aux paramètres par défaut, utiliser la commande clear : CONFIGURE RETENTION POLICY CLEAR ; Configuration de la sauvegarde du fichier de contrôle Une option est disponible afin de sauvegarder automatiquement le fichier de contrôle après une sauvegarde. Cette option est particulièrement intéressante dans une configuration où le référentiel RMAN est sauvegardé dans les fichiers de contrôle. Pour activer cette option : CONFIGURE CONTROLFILE AUTOBACKUP ON ;
Par défaut le fichier sera sauvegardé au sein de la zone de récupération rapide. Si cette zone n’a pas été définie ou si vous souhaitez modifier la destination par défaut il vous faut modifier la valeur.
Modification du chemin : RMAN> CONFIGURE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘path’ Pour revenir aux paramètres par défaut utiliser la commande clear : CONFIGURE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR; Configuration des périphériques de stockage
Les sauvegardes réalisées par RMAN doivent être stockées sur un périphérique. La destination par défaut est la zone de récupération rapide. Si cette zone n’est pas définie une destination est choisie en fonction de votre plateforme.
Pour customiser vos sauvegardes, il faut définir une destination, un type de périphérique et les options de formatages de vos fichiers sauvegardés.
Définition du type de périphérique :
Pour les disques durs : RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK TO DISK; Pour les lecteurs de bandes : RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK TO SBT; Paralléliser les sauvegardes : Il est possible d’allouer plusieurs canaux de sauvegardes par type de périphériques. Pour déclarer plusieurs canaux : RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK PARALLELISM 2 ; RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT ‘/u02/backup/%U’ ; RMAN> CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT ‘/u02/backup/%U’; Définition de la destination et du format du fichier: RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/u02/backup/%U’ ; La commande FORMAT dispose de plusieurs variables afin de générer le nom du fichier de sauvegarde. Voici quelques-unes des variables les plus utiles :
%U : génère un nom de fichier unique. Sa nomenclature diffère en fonction du type de sauvegarde (copie d’image, jeu de sauvegarde, fichier de contrôle…) %c : numéro de l’élément de sauvegarde %d : nom de la base de données %e : numéro de séquence du fichier de journalisation archivé %f : numéro de fichier de donnée %I : identifiant de la base de données %N : nom du tablespace %t : date de la sauvegarde Le nom du fichier généré doit être unique, sinon RMAN procédera à l’écrasement du fichier qui porte le même nom. 2 Les sauvegardes
Il existe plusieurs types de sauvegarde disponibles sous RMAN :
sauvegarde complète de la base sauvegarde incrémentale sauvegarde d’une portion de la base de données
Le mode dans lequel votre base s’exécute impacte les procédures de réalisation des sauvegardes. Il existe deux modes disponibles sous Oracle : ARCHIVELOG et NOARCHIVELOG
En mode ARCHIVELOG les fichiers de journalisations de la base sont archivés avant d’être réutilisés. Pour connaître le mode dans lequel une base de données est exécutée, il est possible de consulter une vue du dictionnaire des données : V$DATABASE.
Si vous souhaitez modifier le mode vous pouvez taper la commande ci-dessous (votre base de données doit être montée pour réaliser cette opération) : SQL > ALTER DATABASE ARCHIVELOG ;
2.1 La commande BACKUP Les sauvegardes sous RMAN s’effectuent via l’utilisation de la commande BACKUP. L’utilisation de cette commande est disponible uniquement si votre base de données est montée ou ouverte. Attention, si votre base de données est en mode NOARCHIVELOG l’utilisation de la commande BACKUP est uniquement disponible base montée. Les principales options de BACKUP : AS COPY ou AS BACKUPSET : fixe le mode de sauvegarde à utiliser INCREMENTAL LEVEL n : indique si la sauvegarde est de type incrémental ARCHIVELOG : sauvegarde les fichiers de journalisation archivés CURRENT CONTROLFILE : sauvegarde du fichier de contrôle DATABASE : sauvegarde l’intégralité de la base de données DATAFILE : sauvegarde des fichiers de données FORMAT : permet de définir le format pour le fichier de sauvegarde TABLESPACE : sauvegarde les tablespaces TAG : permet de définir un nom à la sauvegarde SPFILE : sauvegarde le fichier de paramètre
Sauvegarde de la base de donnée complète : BACKUP DATABASE; Pour connaître les fichiers de la base de données et leur emplacement RMAN utilise le fichier de contrôle. Sauvegarde d’un tablespace : BACKUP TABLESPACE data; On peut spécifier plusieurs tablespaces avec la même commande :
BACKUP TABLESAPCE data, system; Comme pour une sauvegarde complète, RMAN utilise le fichier de contrôle pour connaître les fichiers de données qui composent le tablespace. Sauvegarde d’un fichier de données : BACKUP DATAFILE ‘/u01/oracle/oradata/datafile.dbf’; Comme pour les tablespaces, on peut spécifier plusieurs fichiers. Sauvegarde des fichiers de journalisations archivés : La sauvegarde de ces fichiers est cruciale. En cas de crash de la base de données, la restauration sera réalisée à partir de la dernière sauvegarde sur laquelle seront appliqués les fichiers de journalisations. Il est d’ailleurs conseillé de dupliquer ces fichiers sur plusieurs disques afin de disposer d’une infrastructure résistant à une panne matérielle. La commande BACKUP ARCHIVELOG est utilisée pour la sauvegarde. Il existe plusieurs options disponibles avec cette commande : ALL : sauvegarde tous les fichiers de journalisations archivés FROM TIME ‘date’ : sauvegarde les fichiers archivés depuis la date indiquée TIME BETWEEN : sauvegarde les fichiers archivés durant la période indiquée UNTIL TIME : sauvegarde les fichiers archivés avant la date indiquée
La sauvegarde du fichier de contrôle et du fichier de paramètre est aussi disponible via RMAN : BACKUP CURRENT CONTROLFILE ;
BACKUP SPFILE ;
2.2 Les sauvegardes incrémentales RMAN offre la possibilité de réaliser des sauvegardes incrémentales. La sauvegarde incrémentale a l’avantage de sauvegarder uniquement les blocs modifiés depuis la dernière sauvegarde. Cela vous permettra de diminuer la taille de vos fichiers de sauvegardes. Il existe pour les sauvegardes incrémentales 2 niveaux de sauvegarde :
le niveau 0 : correspond à une sauvegarde complète de la base. Cette sauvegarde est un pré-requis à une sauvegarde incrémentale de niveau 1. le niveau 1 : il existe deux options possibles pour les sauvegardes de niveau 1. Une sauvegarde différentielle (schéma 1) ou cumulative (schéma 2)
Schéma 1 Une sauvegarde différentielle de niveau 1 sauvegarde uniquement les blocs modifiés depuis la dernière sauvegarde de niveau 0 ou 1. On peut imaginer réaliser une sauvegarde de niveau 0 une fois par semaine puis exécuter chaque jour une sauvegarde différentielle de niveau 1.
Schéma 2 Une sauvegarde cumulative de niveau 1 sauvegarde les blocs modifiés depuis la dernière sauvegarde de niveau 0. La taille des sauvegardes et donc plus importante dans cette configuration. Les commandes pour réaliser les sauvegardes incrémentales sont les suivantes: Sauvegarde de niveau 0 : BACKUP INCREMENTAL LEVEL 0 DATABASE; Sauvegarde différentielle de niveau 1 : BACKUP INCREMENTAL LEVEL 1 DATABASE; Sauvegarde cumulative de niveau 1 :
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE; 3 La restauration
La restauration est une partie délicate. Les procédures varient en fonction de la configuration de votre base de données, du problème rencontré (fichier de données corrompu, fichier de contrôle absent …) et de la stratégie de sauvegarde que vous avez adoptée.
Le mode de fonctionnement de votre base de données (ARCHIVELOG ou NOARCHIVELOG) est crucial pour la restauration.
3.1 En mode NOARCHIVELOG Pour restaurer votre base de données, il vous faut appliquer la dernière sauvegarde que vous avez réalisée base fermée (à froid). Dans RMAN procéder à ces différentes étapes : Démarre l’instance : RMAN> STARTUP NOMOUNT ; Généralement les fichiers de contrôle sont multiplexés, cependant si celuici est manquant ou endommagé il faut procéder à une restauration : RMAN> RESTORE CONTROLFILE FROM ‘chemin_de_la_sauvegarde’ ; ou RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP (si vous utilisez la sauvegarde automatique de votre fichier de contrôle) Monter la base de données : RMAN> ALTER DATABASE MOUNT ; Restaurer la base de donnée (si vous utilisez des sauvegardes incrémentales, RMAN récupère la dernière sauvegarde de niveau 0) : RMAN> RESTORE DATABASE ; Si des sauvegardes de niveau 1 sont disponibles vous pouvez procéder à une récupération : RMAN> RECOVER DATABASE NOREDO; Ouvrir la base de données : RMAN> ALTER DATABASE OPEN RESETLOGS;
3.2 En mode ARCHIVELOG Pour la restauration complète d’une base de données (fichier de données): Monter la base de données : RMAN> STARTUP MOUNT;
Restaurer la base de données : RMAN> RESTORE DATABASE ; Récupérer la base de données : RMAN> RECOVER DATABASE ; Ouvrir la base de données : RMAN> ALTER DATABASE OPEN;
Restauration des différents fichiers de l’instance. Fichier de paramètre : Démarrer l’instance RMAN> STARTUP NOMOUNT Restaurer le fichier de paramètre RMAN> RESTORE SPFILE FROM ‘chemin_de_la_sauvegarde’ ; ou RMAN> RESTORE SPFILE FROM AUTOBACKUP (si vous utilisez la sauvegarde automatique de votre fichier de contrôle) Arrêt de l’instance : RMAN> SHUTDOWN Démarrer l’instance : RMAN> STARTUP
Tablespace :
Démarrer la base : RMAN> STARTUP NOMOUNT;
Passer offline le tablespace à restaurer : RMAN> SQL ‘ALTER TABLESPACE users OFFLINE’; Restaurer le tablespace : RMAN> RECOVER TABLESPACE users; Passer online le tablespace à restaurer : RMAN> SQL ‘ALTER TABLESPACE users ONLINE’;
Fichier de données: Démarrer la base : RMAN> STARTUP NOMOUNT; Passer offline le fichier de données à restaurer : RMAN> SQL ‘ALTER DATABASE DATAFILE 6 OFFLINE’; Restauration du fichier de données :
RMAN> RESTORE DATAFILE 6 ; Récupération du fichier de données : RMAN> RECOVER DATAFILE 6 ; Passer online le fichier de données à restaurer : RMAN> SQL ‘ALTER DATABASE DATAFILE 6 ONLINE’ 4 Les procédures de flashback
Le flashback est un mécanisme permettant le retour des données à un instant T du passé. Il permet de pallier aux erreurs pouvant être commises par les utilisateurs ou les administrateurs de la base de données. Dans la version 10g de Oracle il existe 3 niveaux de retour possible :
niveau de la base de donnée niveau d’une table niveau d’une ligne
L’utilisation du flashback nécessite la mise en place d’une zone de récupération rapide. De plus, la base de données doit être en mode ARCHIVELOG.
4.1 Flashback au niveau de la base de données L’utilisation du flashback de la base de données permet de rétablir la base de données telle qu’elle était à un moment précis du passé. Pour pouvoir utiliser cette fonctionnalité il vous faut passer votre base de données en mode flashback. La modification du mode s’exécute base montée SQL> STARTUP MOUNT ; SQL> ALTER DATABASE FLASHBACK ON ; SQL> ALTER DATABASE OPEN ; Une fois modifié, Oracle va générer de nouveaux fichiers: les flashback logs (extension .flb). Ils sont automatiquement enregistrés dans la zone de récupération rapide. Les flashbacks logs enregistrent une copie des blocs modifiés. La durée de conservation des logs est définie via le paramètre : DB_FLASH_BACK_RETENTION_TARGET (valeur exprimée en minutes – par défaut la valeur est spécifiée à 1440 minutes, soit une journée) . Si vous souhaitez pouvoir restaurer votre base de données à une date lointaine il vous faut prévoir la mise en place d’une zone de récupération rapide avec un espace disque suffisant.
Procédure de flashback d’une base de données : L’opération s’effectue via la commande : FLASHBACK DATABASE TO ; On peut définir une date ou un numéro SCN (System Change Number). Un numéro SCN est attribué à chaque transaction validée dans la base de donnée.
Il faut que votre base soit montée. SQL> STARTUP MOUNT ; SQL> FLASHBACK DATABASE TO TIMESTAMP SYSDATE-1/24 ; ou SQL> FLASHBACK DATABASE TO SCN 436982938 ; SQL> ALTER DATABASE OPEN RESETLOGS ;
Oracle va alors restaurer les blocs dans leur état puis les fichiers de journalisations vont être appliqués afin de pallier un possible décalage entre la modification des blocs et leurs enregistrements dans les flashback logs.
4.2 Flashback au niveau d’une table Le flashback d’une table utilise la méthode d’annulation (UNDO) pour rétablir l’état d’une table. Il n’est donc pas nécessaire d’activer le mode flashback pour ce niveau. Il est par contre important de définir une taille conséquente pour le tablespace UNDO. En effet, plus le tablespace disposera d’un espace disque important plus vous pourrez remonter dans le temps. Il faut analyser vos besoins afin de déterminer la bonne taille. Procédure de flashback d’une table : Pour que l’opération de flashback soit possible il faut : avoir le privilège objet flashback sur la table avoir les privilèges : SELECT, INSERT, ALTER sur la table avoir le privilège de déplacement de ligne sur la table
L’opération s’effectue via la commande : FLASHBACK TABLE nom_de_la_table TO ; SQL> FLASHBACK TABLE ma_table TO TIMESTAMP SYSTIMESTAMP – INTERVAL ‘10’ MINUTE ; ou SQL> FLASHBACK TABLE ma_table TO SCN 436982938 ;
4.3 Flashback au niveau d’une ligne Dans ce mode il existe 3 options :
Flashback Query Flashback Version Query Flashback Transaction Query
Le flashback de ligne permet de récupérer la valeur des données à un moment donné. Il est possible de requêter la base pour récupérer la valeur puis d’effectuer un update afin de la remettre à l’état souhaité. Flashback Query : Commande :
SELECT colonne FROM table AS OF TIMESTAMP – INTERVAL ‘5’ MINUTE WHERE number = 10 On peut utiliser aussi un numéro SCN SELECT colonne FROM table AS OF SCN 87659876 WHERE number = 10
Flashback Version Query : Le flashback Version Query permet de récupérer les différentes versions d’une ligne durant un intervalle de temps donné. Plusieurs options sont disponibles sur les versions : VERSIONS_STARTTIME : date de début de modification de la ligne VERSIONS_ENDTIME : date de fin de modification de la ligne VERSIONS_STARTSCN : numéro SCN de début de modification de la ligne VERSIONS_ENDSCN : numéro SCN de fin de modification de la ligne VERSIONS_OPERATION : type d’opération réalisée : I (Insert), U (Update), D (Delete) VERSIONS_XID : numéro d’identification unique de la transaction Commande : SELECT versions_starttime, versions_endtime, versions_startscn, versions_endscn, versions_operation, versions_xid, ma_colonne FROM ma_table VERSIONS BETWEEN TO TIMESTAMP (‘2006-09-08’, ‘YYYY-MM-DD) AND TO TIMESTAMP (‘2006-09-12’, ‘YYYY-MM-DD) WHERE number = 20;
Flashback Transaction Query : Il permet de requêter la base pour retrouver les transactions effectuées sur la base de données durant un intervalle de temps.
Pour réaliser ces opérations il faut interroger la vue : FLASHBACK_TRANSACTION_QUERY Les colonnes de cette vue sont les suivantes: XID : identifiant unique de la transaction START_SCN : numéro SCN de la transaction START_TIMESTAMP : date de la transaction COMMIT_SCN : numéro SCN lors de la validation de la transaction (COMMIT) COMMIT_TIMESTAMP: date de la validation de la transaction (COMMIT) LOGON_USER: compte utilisateur utilisé OPERATION: type de l’ordre (INSERT, UPDATE, DELETE) TABLE_NAME: nom de la table TABLE_OWNER: nom du propriétaire de la table ROW_ID: identifiant de la ligne
Les recherches peuvent donc porter sur plusieurs critères. L’utilisateur peut effectuer des recherches très fines pour visualiser les modifications réalisées sur un intervalle de temps donné