Overblog
Suivre ce blog Administration + Créer mon blog
5 octobre 2008 7 05 /10 /octobre /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. 
Partager cet article
Repost0