Dimanche 5 octobre 2008 7 05 /10 /Oct /2008 17:27
Amis d'ORACLE, bonjour,
N'avez vous jamais été confronté à des problématiques de migration ou de tests de performance ou une fois vos tests terminés, vous arrivez à la conclusion qu'il faut recommencer ! A ce stade, on a plusieurs options:
· La classique : Avoir fait un export de la base ou des schémas concerné au début du processus. Et donc  à la fin du traitement un import pour revenir à l'état initial.
· La technique "mode panique" ou personne ne sait ce qu'il fait et pense bien faire. 
  • o On supprimer tout.
  • o On repasse pleins de scripts de création, d'insertion + eventuellement un import de données pour arriver à la volumétrie voulue.
Il n'est pas nécessaire d'avoir un QI supérieur à la norme pour se rendre compte que l'on va perdre beaucoup de temps pour revenir à un état initial.
Aussi étrange soit-il, les mêmes personnes qui vont vous pousser à pratiquer de la sorte sont celles qui clament tout au long du projet que le temps manque pour se poser et réfléchir.
Oracle propose une technique relativement simple à mettre en place et qui vous fera passer pour un magicien assez rapidement !
Cette technique s'appelle FLASHBACK 
Remarque: L'exemple ci-dessous a été effectué sur une 10.2.0.1 
Tout d'abord vérifions si cette option est activée:
Démarrer > Exécuter > cmd.exe
puis tapons sqlplus / nolog
 
SQL> CONNECT SYSTEM/oracle
SQL> SELECT FLASHBACK_ON FROM V$DATABASE;

FLASHBACK_ON
-------------------
NO
 
Pour activer cette option, il faut que votre base soit en mode ARCHIVELOG.
Pour cela,  connectons nous en sys as sysdba.

SQL> CONNECT / AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT; 
SQL> ALTER DATABASE ARCHIVELOG;   -- Ici on passe la base en mode ARCHIVELOG
SQL> ALTER DATABASE FLASHBACK ON;  -- Et maintenant, activons l'option FLASHBACK
SQL> ALTER DATABASE OPEN;
SQL>CONNECT SYSTEM/oracle
 
Nous pouvons maintenant facilement vérifier que l'option FLASHBACK est activée.
 
SQL>SELECT FLASHBACK_ON FROM V$DATABASE;
FLASHBACK_ON
-------------------
YES
 
A partir de la vous avez certainement des tables ou des schemas sur lesquels vous pouvez travailler. Mais pour l'exemple je vais créer un utilisateur.
 
SQL> CREATE USER LAO IDENTIFIED BY LAO;
SQL> GRANT CONNECT,RESOURCE TO LAO;
SQL> ALTER USER LAO QUOTA UNLIMITED TO USERS;
 
Connectons nous maintenant avec cet utilisateur.

SQL>CONNECT LAO/LAO
Nous allons créer un table et inserer quelques lignes.

SQL> CREATE TABLE T_FLASH (COL1 number,COL2 number);
SQL> INSERT INTO T_FLASH VALUES (1,4);
SQL> INSERT INTO T_FLASH VALUES (4,5);
SQL> COMMIT;

Partons du principe que nous sommes (après quelques heures de mise en place dans des cas de la vraie vie) au départ des traitements à venir (tests de montée en charge avec insertion en masse, migration complexe sur de la volumétrie,...)
 
SQL> CONNECT SYSTEM/oracle
SQL> CREATE RESTORE POINT rp1;

Et voila ! Nous venons d'indiquer à ORACLE de créer un point de restauration.
Nous pouvons commencer nos traitements.
Pour l'exemple:

SQL> CONNECT LAO/LAO
SQL> CREATE TABLE T_2 (i number);
SQL> INSERT INTO T_2 VALUES (6);
SQL> BEGIN
SQL> FOR i IN 1..150000 LOOP
SQL> INSERT INTO T_FLASH VALUES (i,9);
SQL> END LOOP;
SQL> END;
SQL> /
SQL> COMMIT;

Nous sommes maintenant avec deux tables et notre table T_FLASH a 150002 lignes au lieu des deux intitiales.
Et nous voulons recommencer ces manipulations.
La première étape consiste à passer la base en mode montée.
 
SQL> CONNECT / AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
 
Nous sommes prêt pour le tour de magie.

SQL> FLASHBACK DATABASE TO RESTORE POINT rp1;
SQL> ALTER DATABASE OPEN RESETLOGS;
 
Et voila !!!
Vous pouvez vous reconnecter en LAO/LAO et vous constaterez que la table T_FLASH a deux lignes et que la table T_2 n'existe pas !
Une fois ces tests effectués, vous pouvez vous connecter en SYSTEM pour supprimer le point de restauration

SQL> CONNECT SYSTEM/oracle
SQL> DROP RESTORE POINT rp1;

Vous pouvez également remettre votre base en mode NOARCHIVELOG;

SQL> CONNECT / AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE FLASHBACK OFF;
SQL> ALTER DATABASE NOARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Evidement puisque nous effectuons des opérations au niveau base, cela nécessite de disposer de machines dédiées à ce genre d'opération. 
Mais dans un monde ou les mots "qualité", "performance" sont d'usage, il ne peut certainement ne pas en être autrement.
LAO. 
Par LAO - Publié dans : FLASHBACK
Ecrire un commentaire - Voir les 3 commentaires
Retour à l'accueil

Commentaires

Bonjour lao, Le fait de passer FLASHBACK à ON sans passer en mode ARCHIVELOG aurait-il un intérêt ? Si NON pourquoi est-ce que Monsieur Oracle n'a pas fait une commande directe ?
Commentaire n°1 posté par Gigot le 06/10/2008 à 08h57

Bonjour Gigot.

En fait passer en mode ARCHIVELOG est un prérequis. Voila pourquoi il n'y a pas de commande directe. En effet, on peut très bien être en mode ARCHIVELOG et ne pas activer l'option FLASCHBACK.
D'ailleurs, si l'on tente un d'activer l'option FLASHBACK sans être en mode ARCHIVELOG, Monsieur ORACLE retournera une erreur.
Et plus extactemet deux erreurs:
ORA-38706 : Impossible d'activer la journalisation FLASHBACK DATABASE.
ORA-38707 : La récupération après défaillance matérielle n'est pas activée (ce qui revient à dire que le mode ARCHIVELOG est à OFF)

LAO.

Réponse de LAO le 06/10/2008 à 10h12
Superbe initiative. Le gourou est dans la place.
Commentaire n°2 posté par Alain Dev le 07/10/2008 à 09h52
¨Plutôt que de demander à ORACLE de remonter à un point de restauration, est-il possible de lui indiquer un temps T en arrière ?
Commentaire n°3 posté par cricri le 26/05/2009 à 15h20

Catégories

Recherche

Calendrier

Février 2012
L M M J V S D
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        
<< < > >>

Profil

  • LAO
  • My Oracle blog
  • Homme
  • 06/05/1972
  • IDF
  • DBA
Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés