Récupération d’une base de données
Problèmes Les problèmes qui nous emmène à la récupération d’une base données c’est : La perte d’un fichier de journalisation La perte d’un fichier de contrôle La perte d’un fichier de données
Ouvrir une base de données Pour ouvrir une base de données, vous devez être un SYSDBA OU SYSOPER Tout les fichiers dans la base données sont existants (fichiers de contrôle – fichiers de journalisation d’au moins un utilisateur pour chaque groupe – fichiers de données)
Ouvrir une base de données L’ouverture d’une base suit 3 phases : Phase NOMOUNT ou STARTED; Phase MOUNT; Phase OPEN; Dans chaque phase il y a des vérifications au niveau de la structure physique ( fichiers de données - fichiers de contrôles - fichiers de journalisations)
Ouvrir une base de données
Modification de la statut d’instance
Maintenir une base de données ouverte Une fois ouverte, l’instance échoue dans les cas suivants : Perte d’un fichier de contrôle. Perte d’un fichier de donnés appartenant au tablespace system ou au tablespace d’annulation. Perte d’un groupe entier de fichiers de journalisation.
Perte d'un fichier de contrôle La récupération suite à la perte d'un fichier de contrôle (dès lors qu'il en reste au moins un) peut être effectuée de la façon suivante : L’instance est normalement abandonnee.si elle est toujours ouverte elle se ferme. Restaurez le fichier de contrôle manquant en copiant un fichier de contrôle existant. Démarrer l’instance.
Perte d’un fichier de journalisation Qu’est ce qu’un fichier de journalisation ? Panne de disque et ses conséquences sur le journal Comment récuperer un fichier de journalisation?
Qu’est ce qu’un fichier de journalisation ? Definition Fichier regroupant l'ensemble des événements survenus sur un logiciel, une application, un serveur ou tout autre système informatique. Description Un log (ou fichier log) se présente sous la forme d'un fichier texte classique, reprenant de façon chronologique, l'ensemble des événements qui ont affecté un système informatique et l'ensemble des actions qui ont résulté de ces événements. Ainsi, pour un serveur de type Web, le fichier log regroupe à la fois les demandes d'accès à chacun des fichiers du serveur : - date et heure précise de la tentative d'accès ; - adresse IP du client ayant réalisé cet accès ; - fichier cible ; - et éventuellement système d'exploitation et navigateur utilisé pour cet accès. Le fichier contient également la réponse fournie par le serveur à cette demande d'accès (si le fichier est trouvé, le poids de celui-ci... sinon, le type d'erreur rencontré). Ce type de fichier peut être très facilement utilisé pour créer les statistiques d'un serveur ou d'un site Web à l'aide d'une application comme WebAlizer.
Structure d’un fichier de journalisation
Panne de disque et ses conséquences sur le journal Une panne disque peut-être due à une erreur de manipulation “destruction involontaire d'un fichier” ou à un frottement des têtes de lecture sur le disque “disque hors service” . La conséquence d'une telle panne peut être : La perte des données d'un tablespace La perte de toutes les données La perte du journal La perte d'un fichier de contrôle . Une panne disque peut-être due à une erreur de manipulation (destruction involontaire d'un fichier) ou à un frottement des têtes de lecture sur le disque (disque hors service). La conséquence d'une telle panne peut être : 1. La perte des données d'un tablespace ; 2. La perte de toutes les données ; 3. La perte du journal ; 4. La perte d'un fichier de contrôle. Dans les deux premiers cas il faut reconstruire une partie, voir toute la base de donnée. Pour ce faire on a besoin d'une version d'archive de la base de donnée et il faut appliquer à cette archive, les images après de toutes les transactions qui ont validées depuis la création de l'archive, dans l'ordre chronologique de validation des transactions. Dans les deux autres cas, la base de donnée elle-même n'est pas touchée mais il faut réparer les fichiers endommagés pour pouvoir continuer à travailler. En ce qui concerne le fichier de contrôle, il doit toujours exister en plusieurs exemplaires car l'instance ne peut pas fonctionner sans lui. En ce qui concerne le journal, soit il est multiplexé (oracle maintient 2 ou 3 versions identiques du journal en parallèle), soit il est conseillé de créer une nouvelle archive complète de la base dedonnée elle-même n'est pas touchée mais il faut réparer les fichiers endommagés pour pouvoir continuer à travailler. En ce qui concerne le fichier de contrôle, il doit toujours exister en plusieurs exemplaires car l'instance ne peut pas fonctionner sans lui. En ce qui concerne le journal, soit il est multiplexé (oracle maintient 2 ou 3 versions identiques du journal en parallèle), soit il est conseillé de créer une nouvelle archive complète de la base de données
Comment récuperer un fichier de journalisation ? Si un membre d’un groupe de fichier de journalisation est perdu et que le groupe comporte encore au moins un membre: le fonctionnement normal de l’instance n’est pas affecté Un message indiquant qu’un membre est introuvable est ecrit dans le fichier d’alertes Restaurez le fichier manquant en copiant l’un des fichiers restants du meme groupe si la base de données est en mode noarchivelog : Il faut vider le groupe , Sélectionner le groupe approprié et sélectionner l'action Clear Logfile. La récupération suite à la perte d'un membre unique d'un groupe de fichiers de journalisation ne doit pas affecter l'instance en cours. 1. Déterminez si un fichier de journalisation est manquant en examinant le fichier d'alertes. 2. Restaurez le fichier manquant en copiant l'un des fichiers restants du même groupe. 3. Si la défaillance physique était due à la perte d'un disque ou d'un contrôleur, renommez le fichier manquant. 4. Si le groupe a déjà été archivé, ou si la base de données est en mode noarchivelog, vous pouvez choisir de résoudre le problème en vidant le groupe afin de recréer le ou les fichiers manquants. Sélectionnez le groupe approprié et sélectionnez l'action Clear Logfile. Vous pouvez également vider manuellement le groupe affecté par l'intermédiaire de la commande suivante : SQL> ALTER DATABASE CLEAR LOGFILE GROUP #;
Remarque Database Control ne vous permet pas de vider un groupe de fichiers de journalisation qui n'a pas été archivé. Pour vider un groupe de fichiers de journalisation non archivé, utilisez la commande suivante : SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP # Database Control ne vous permet pas de vider un groupe de fichiers de journalisation qui n'a pas été archivé. En effet, il en résulterait une rupture de la chaîne des informations de journalisation. Si vous devez vider un groupe de fichiers de journalisation non archivé, procédez immédiatement à une sauvegarde complète de l'ensemble de la base de données. A défaut, vous vous exposez à une perte de données si une autre défaillance se produit. Pour vider un groupe de fichiers de journalisation non archivé, utilisez la commande suivante : SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP #;
Perte d’un fichier de données en mode noarchivelog Perte d'un fichier de données en mode NOARCHIVELOG La perte d'un fichier de données d'une base de données en mode NOARCHIVELOG nécessite la restauration complète de la base, y compris les fichiers de contrôle et tous les fichiers de données. Lorsque la base de données est en mode NOARCHIVELOG, la récupération n'est possible que jusqu'à l'instant de la dernière sauvegarde ; les utilisateurs doivent donc entrer de nouveau toutes les modifications apportées depuis cette sauvegarde. Arrêtez l'instance si elle n'est pas déjà arrêtée. Cliquez sur Perform Recovery dans la page de propriétés Maintenance. Sélectionnez "Whole Database" comme type de récupération.
Restauration de la base de données en cas de : Perte d'un fichier de données non essentiel en mode ARCHIVELOG Perte d'un fichier de données essentiel pour le système en mode ARCHIVELOG
Le premier cas : Pour une perte de tous les fichiers d’un tablespace non SYSTEM, le plus facile sera de faire une restauration online (base ouverte aux utilisateurs qui peuvent accéder aux autres tablespaces) de tablespaces (au lieu de restaurer chaque fichier tout seul).
Le Problème
La Solution Récupérer tous les fichiers perdus à partir d’une sauvegarde : monter la base SVRMGR> Startup MOUNT, mettre ces fichiers offline SVRMGR> Alter Database Datafile ‘…fichier1’ offline ;…. ouvrir la base SVRMGR> Alter Database OPEN; mettre le tablespace offline SVRMGR> Alter Tablspace <TS> offline; restaurer le tablespace SVRMGR> Recover Tablespace; mettre le tablespace online SVRMGR> Alter Tablespace <TS> online;
Le deuxième cas Un fichier du TS SYSTEM ne peut jamais être mis "offline". Le tablespace SYSTEM doit toujours être online. Quand un fichier du TS SYSTEM est perdu, il n’est pas possible de mettre le fichier offline et ouvrir la BD. Cela signifie que la restauration online n’est pas possible.
La seule façon de restaurer la base et de récupérer le fichier perdu et de faire une « restauration de base de données » : monter la base, lancer la restauration base de donnée : SVRMGR> RECOVER DATABASE; ouvrir la base, restauration après perte d’un fichier du tablespace temporaire.
Le Problème perte d’un fichier appartenant au TS SYSTEM.
La Solution La solution ici se présente sous deux options :
Option 1 Monter la base, Mettre le fichier offline : Alter database datafile ‘…fichier’ offline [Drop]; Ajouter la clause Drop si la base est en mode NOARCHIVELOG, Récupérer le fichier perdu à partir des sauvegardes, Restaurer le fichier : Recover datafile ‘…fichier’ ; Mettre le fichier online : Alter database datafile ‘…fichier’ online; Recréation du tablespace temporaire.
Option 2 Monter la base, Mettre le fichier offline : Alter database datafile ‘…fichier’ offline [Drop]; Ajouter la clause Drop si la base est en mode NOARCHIVELOG, Supprimer le tablespace, Créer le tablespace.
Avantage des options 1 et 2 L’option 1 est meilleure si il n’y a pas beaucoup de redo log à appliquer et si le TS à recréer est très gros. L’option 2 est meilleure dans le cas où il y a beaucoup de fichiers redo logs à appliquer et que le TS à recréer est petit.
THANK YOU!