Options de Haute disponibilités en 10G
Par
Jaouad ZOUAGHI (home) Découvrez les nouvelles options de hautes disponibilités sous Oracle 10G. Découvrez également comment paramétrer la flash_recovery_area I. Introduction I-A. Qu'est ce que la haute disponibilité ? I-B. Recyclebin I-C. Instruction Flashback II. RecycleBin II-A. Mise en place II-B. Utilisation II-C. Purge de la corbeille II-C-1. Purge par objet II-C-2. Purge par User II-C-3. Purge DBA II-C-4. Purge tablespace II-D. Désactivez cette fonction II-D-1. Désactivez au niveau de l'instance II-D-2. Désactivez au niveau du system (après STARTUP ), uniquement en 10G R2 II-D-3. Désactivez au niveau Session uniquement en 10G R2 III. Instruction Flashback III-A. Restauration complète III-B. Restauration incomplète III-C. Restauration Base I. IntroductionI-A. Qu'est ce que la haute disponibilité ?
La haute disponibilité est un concept Oracle très important pour les DBA Oracle en environnement critique. Une base critique est une base qui doit être toujours disponible et ceci dans les meilleures conditions de sécurité : prévenir d'éventuels " crash ", mais également un accès le plus rapide aux données. Différentes options ont déjà par le passé fait leur apparition pour se prémunir contre ce genre de désagrément : StandBy Database Hot backup D'autres on été introduites avec la version précédente 9i, je pense notamment au Log Miner Ou Flashback query Avec la dernière version Oracle répond à un désir de ses clients, créer une poubelle comme celle que vous avez sous windows. Ainsi il n'existe plus d'action qui nécessite irréversiblement une restauration à chaud de la base de données ou des compétences accrues : Flashback et Logminer I-B. Recyclebin
RecycleBin est donc une poubelle ou sont stockés tous les index et les tables qui ont été supprimés ( sous certaines réserves que nous verrons par la suite ). Ce qui permet de restaurer une table, un index mais également de purger cette poubelle ainsi que diverses opérations d'administration.
I-C. Instruction Flashback
Cette instruction va nous permettre de pouvoir effectuer une restauration d'objets supprimés accidentellement mais pas uniquement, cette restauration pourra s'effectuer en fonction du SCN, de l'horodate, en changeant le nom de l'objet …
II. RecycleBin
RecycleBin est une pseudo table qui n'est que le synonyme de User_recyclebin.
En effet si dans une session utilisateur, cette dernière requête sur cette vue, il interroge en fait la vue user_recyclebin.
II-A. Mise en place
Cette option que nous découvrons en 10g est activée par défaut. Elle est présente pour tous les utilisateurs. Afin de vérifier sa mise en place il suffit tout simplement de voir si le paramètre, _recyclebin, global de la base de données est activé :
Nous pouvons également agir sur ce paramètre au niveau session ainsi :
Attention ces dernières commandes ne sont valables que dans la release 2 d' Oracle 10G. Autre différence, en 10gR1 la valeur par défaut de _RECYCLE est à TRUE, alors qu'en 10G R2 elle est à ON, d'ailleurs ce paramétre ne s'appelle plus _RECYCLE mais RECYCLE en release 2 Autre précision également, la commande ne fonctionne pas lorsque l'utilisateur à comme tablespace défaut : SYSTEM. II-B. Utilisation
Donc dès que la corbeille est mise en place, elle a le même comportement qu'une corbeille classique. Notamment la corbeille de Windows ou alors le dossier Lost+Found d'Unix.
C'est donc un dossier virtuel qui contient tous les objets que nous avons supprimés. Ce qui veut dire que depuis la 10g, Oracle ne désalloue plus l'espace lors d'une opération classique de DROP. La table existe toujours ainsi que ses références : index , contraintes …, ils sont également toujours dans leur tablespace d'origine Exemple : Création d'une table dans un schéma vierge :
Nous voyons donc la table créée et son tablespace de destination, la corbeille est pour l'instant vide.
Nous allons supprimer la table :
Remarque : tout objet droppé acquière un nouveau nom qui est préfixé par BIN$ Un coté intéressant de cette table est que l'on continue à accéder à cette table et même à ses données même si elle est droppée.
Donc vous l'aurez compris, il ne faut rien de plus pour activer cette option ni dans le paramétrage ni dans les commandes de DROP. Un simple DROP place automatiquement les objets dans la corbeille, par contre un travail nécessaire de purge doit être fait par le DBA, si ce dernier ne veut pas qu'il y ait de la place inoccupée par les objets de la base. On peut également supprimer une table sans que cette dernière ne soit placée dans la corbeille mais soit directement supprimée et purgée. Il suffit
Cas ou on drop deux fois la même table :
Ici nous allons voir comment Oracle gère le cas où l'on droppe deux tables avec le même nom.
Oracle gère donc ces deux instances avec le même ORIGINAL_NAME mais avec deux SCN différents
Dans ce cas la purge sur le nom original n'est plus pertinente préférez lui une purge sur le nom BIN$*
Comment voir les tables supprimées :
II-C. Purge de la corbeilleComme vu précédemment, chaque utilisateur ou le DBA se doivent de purger régulièrement cet espace de travail. Il y a différentes manières de purger cette corbeille car comme vous le supposez, il n'existe pas une seule corbeille. II-C-1. Purge par objetPour ce faire, vous pouvez purger les tables et index en spécifiant après les mots clés le nom de l'objet : Pour une table :
Pour un index :
II-C-2. Purge par User
Dans ce cas on purge tous les objets du schéma qui ont été supprimés.
II-C-3. Purge DBALorsque le DBA souhaite libérer l'espace occupé par toutes les corbeilles, celui doit se connecter avec les privilèges SYSDBA :
D'ailleurs pour pouvoir purger un objet dans la corbeille il faut avoir l'un des deux privilèges suivants ( lorsque évidemment cet objet ne nous appartient pas )
II-C-4. Purge tablespaceIci nous allons effectuer une purge mais en fonction d'un tablespace. Donc tous les objets appartenant à un tablespace mais qui ont été supprimés vont être purgés.
Parce que plusieurs schémas peuvent partager le même tablespace, Oracle a voulut limiter les effets de cette commande. Ainsi on peut supprimer tous les objets dans un tablespace et appartenant à un utilisateur spécifique.
II-D. Désactivez cette fonctionPour désactiver cette option, nous avons plusieurs méthodes : II-D-1. Désactivez au niveau de l'instance
Positionner le paramètre suivant sur le SPFILE ou PFILE :
10g R1 :
10G R2 :
II-D-2. Désactivez au niveau du system (après STARTUP ), uniquement en 10G R2
II-D-3. Désactivez au niveau Session uniquement en 10G R2
III. Instruction FlashbackL'instruction Flashback va nous permettre de faire une restauration de nos objets qui ont été supprimés. En effet cette instruction basée sur le paramètre UNDO_RETENTION, va nous permettre de faire une restauration complète d'un objet mais également une restauration incomplète d'un objet dont certaines lignes auront été supprimées. Il faut également rappeler que cette restauration n 'est possible que dans un mode de gestion AUM ( Automatic Undo Management ) ce qui exclut les traditionnels rollabck . III-A. Restauration complèteVendredi 17heures, mon téléphone retentit, mon développeur préféré vient de dropper accidentellement une table en production. Dans une version inférieure à la 10G, cela est un réel problème qui nécessite un arrêt de la base avec un recovery incomplet, ou une utilisation du Log Miner pour trouver le UNDO SQL. Dorénavant, et si la table n'a pas été supprimée avec l'option PURGE, il est possible de récupérer une table par un simple ordre SQL :
D'ailleurs ici nous découvrons l'utilité de la colonne CAN_UNDROP , si cette colonne a pour valeur NO alors on ne peut pas faire de FLASHBACK , c'est notamment le cas pour les index. En effet, et c'est une limitation de l'outil on ne peut pas restaurer un autre objet qu'une table. Restauration de la table :
Autre limitation qui a également une incidence sur les performances, Oracle dans la version R1 ne restaure pas les statistiques. Il faut également penser à re créer les contraintes afin d'avoir un environnement propre :
Oracle ne garantit pas non plus la restauration des ROWID, ceci constitue un énième argument pour ne pas utiliser le ROWID en lieu et place d'une clé primaire. Il est également possible de restaurer la table en lui affectant un autre nom :
Comment fonctionne la restauration : Lorsque nous supprimons la table, Oracle ne la supprime plus instantanément. Il la marque comme supprimée est lui affecte un nouveau nom d'objet et il marque les extents libre dans le tablespace. D'ailleurs la vue DBA_FREE_SPACE reflète cet état de fait. Donc dès qu'il y a assez d'espace dans la tablespace Oracle ne va pas purger cette table. Plus précisément Oracle lorsqu'il y a une demande de place pour une création d'objet et/ou une extension d'objet cherche :
Nous allons créer une table, l'alimenter puis la supprimer et voir à chaque étape l'état de la vue DBA_FREE_SPACE :
La table occupe donc un espace de 3 Méga.
Nous supprimons la table :
Ce qui donne :
Nous resizons le tablespace :
La table est toujours disponible dans la corbeille ;
Par contre si nous créons une autre table et que nous l'insérons alors cette table va être purgée par Oracle .
Quelles sont les opérations qui peuvent contourner la corbeille :
Il existe une vue permettant de centraliser les informations lors de ces opérations :
III-B. Restauration incomplète
Nous verrons deux cas pratiques, le premier où nous ne souhaitons pas restaurer une table avec toutes ces lignes et la seconde ou nous souhaitons effacer les conséquences d'un malheureux DELETE.
Avant tout il faut absolument activer le " Row movement " avant de faire une restauration incomplète.
Maintenant voyons un cas un peu plus complexe ou on a effectué un DELETE suivi d'un commit et que l'on désire restaurer la table .
Cela marche, sur le même procédé, avec les opérations UPDATE et TRUNCATE. Ce procédé fonctionne uniquement si nous sommes en mode AUM ( Automatic Undo Management ) et donc exclu de fait les Rollbacks. Il est donc directement impacté par la valeur que peut avoir UNDO_RETENTION qui par défaut a comme valeur 900 secondes soit 15 minutes. Il convient de bien positionner ce paramètre et d'agir rapidement lorsqu'il y a eu un drop de table malencontreux III-C. Restauration Base
Nouveauté de la 10 G , oracle a désormais simplifié la restauration de la base est à mis en place une nouvelle restauration incomplète : La flash_recovery_area.
En effet ici le DBA a la possibilité de restaurer la base et l'intégralité des données jusqu' a un certain point dans la temps sans avoir à restaurer la dernière sauvegarde et à appliquer les nombreux archivelogs. Flashback Database permet de restaurer très rapidement une base de données en éliminant les corruptions logiques en annulant tout simplement les ordres qui ont entraîné ces corruptions jusqu'à obtention d'un état cohérent. Cette méthode peut être très utile lorsqu'une erreur se produit en fin de journée et qu'il faut agir rapidement avant les traitements " Batch " de nuit. En effet le temps de mise à disponibilité de la base ne se mesure plus à la taille de la base et à la volumétrie des archive à appliquer mais uniquement au nombre de modifications qui doivent être annulées. Mode de fonctionnement : Tout d'abord ce qu'il faut savoir est que cette méthode ne marche qu'en mode archivelog. Cette fonctionnalité est implémentée grâce à un nouveau type de fichier : les fichiers journal Flashback database. Oracle va enregistrer périodiquement les images avant ( before images ) des blocs de données dans les journaux Flashback Database . Ces fichiers peuvent donc être utilisés pour rétablir rapidement les fichiers de données. Ces journaux sont stockés dans la zone de récupération. Oracle 10g démarre un nouveau processus RVWR qui s'occupe de la journalisation vers les fichiers flashback à partir de la mémoire tampon.
Il est important d'avoir un Log buffer équivalent à au moins 8MO .
Il faut savoir également que les journaux flasback ne sont pas archivés . Configuration Manuelle : Il est possible d'effectuer une configuration avec OEM mais ici nous détaillerons la configuration manuelle qui est plus difficile que celle via la console graphique et surtout est, à mon sens, plus formatrice. Tout d'abord il faut définir le paramètre DB_FLASHBACK_RETENTION_TARGET, ce paramètre exprimé en minutes et ayant par défaut une journée ( 1440 /60 = 24 heures ). Puis il faut passer la commande suivante en mode MOUNT exclusive
Comment déterminer la Flashback recovery area , il suffit tout simplement de positionner le paramétrage de démarrage DB_RECOVERY_FILE_DEST et ne pas également oublier de positionner le paramètre DB_RECOVERY_FILE_DEST_SIZE
Comment vérifier que nous sommes bien en recovery_aréa :
Voici un jeu d'essai
La table DVP a été restaurée et la table TEST n'existe plus puisque sa création a un SCN supérieur a celui de la table DVP .
Notons que dans le répertoire ou FS désigné par DB_RECOVERY_FILE_DEST oracle crée un répertoire pour chaque instance puis deux répertoire un pour l'archivage et l'autre pour le flashback. Il est donc inutile de paramétrer log_archive_dest . Désactivez le mode Flash recovery aréa : Mettre en commentaire les paramètres dans la fichier INIT. Ou SPFILE : Puis inhiber le mode flashback et le mode archivelog :
Il faut également savoir que cette solution peut avoir un impact non négatif sur les performances générales car en plus des archivelogs Oracle génère des fichiers Flashback. De plus il a un impact certain sur la volumétrie car il demande de l'espace supplémentaire Ne pas oublier également d'inclure cette zone dans la sauvegarde classique.
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|