Overblog
Suivre ce blog Administration + Créer mon blog
31 janvier 2009 6 31 /01 /janvier /2009 17:02
Bonjour;

Pour continuer dans la série des articles sur le clonage, je vais maintenant cloner ma base DB1 en ayant pris soin de l'avoir passer en mode archivelog. Et afin de voir une fonction de la commande DUPLICATE, je vais également renommer un datafile au moment de la duplication.

Etape 1 : Passer DB1 en mode Archivelog.

Tout d'abord je vais ajouter les deux lignes suivantes dans mon fichier init.ora (attention à ce que le chemin des archives existe)



LOG_ARCHIVE_DEST_1='LOCATION=c:\oradata\db1\archives'
LOG_ARCHIVE_FORMAT=ARC%S_%R.%T



Puis je me connecte en sys via SQLPLUS.


SET ORACLE_SID=DB1
SQLPLUS /nolog
CONNECT / as sysdba

SHUTDOWN IMMEDIATE;
STARTUP MOUNT pfile='e:\oracle\product\10.2.0\admin\DB1\pfile\init.ora';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;




Etape 2 : Donner un peu de vie à notre base

Pour cela je vais créer un tablespace, puis un user. Enfin, je vais créer une table et inserer une ligne dedans afin de pouvoir générer des archives logs.


/* Création tablespace */

CONNECT system/*****

CREATE TABLESPACE my_tbs
DATAFILE 'e:\oracle\product\10.2.0\oradata\DB1\my_tbs_01.dbf' size 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;


/
* Création user */

CREATE USER app identified by app;
GRANT CONNECT, RESOURCE TO app;
ALTER USER app DEFAULT TABLESPACE my_tbs;
ALTER USER app QUOTA UNLIMITED ON my_tbs;

/
* Création table */

CONNECT app/app

CREATE TABLE t(i Number);
INSERT INTO t VALUES (4);
COMMIT;



Nous avons maintenant un nouveau tablespace, un nouvel utilisateur, une table avec une ligne, mais pas forcément de fichiers d'archive log....

Pour cela, on se connecte en system et execute (autant de fois que l'on a de fichiers redo) la commande suivante.


ALTER SYSTEM SWITCH LOGFILE;


On peut facilement vérifier que les fichiers archives log ont été crées en allant à leur emplacement  (c:\oradata\db1\archives dans mon exemple)

Comme à chaque fois, pour envisager un clonage de base, il faut bien avoir une sauvegarde. Un des avantages du mode archivelog, est bien évidemment de pouvoir effectuer cette sauvegarde base ouverte.

Etape 3 : Sauvegarder DB1


RMAN target /
BACKUP FULL DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;



Pour détailler l'opération ci-dessus:

  • BACKUP FULL DATABASE => Sauvegarde entière de la base.
  • PLUS ARCHIVELOG => On sauvegarde également les archives logs (sinon difficile de restaurer...)
  • DELETE ALL INPUT => On supprime les fichier d'archive log qui viennent d'être sauvegardés.

La première partie de l'opération est effectuée, nous allons passer sur notre machine distante déstinée à recevoir la base clonée.
Dans le post précédent (http://www.lao-dba.com/article-27372996.html) j'ai supprimé l'instance DB2 ainsi que tous les fichiers de la base je dois recréer l'instance.


Etape 4 : Préparer le serveur distant


oradim -new -sid DB2


L'arborescence existe déjà, je n'ai donc pas besoin de la créer (cf. poste précédent sur le clonage)
En revanche, je dois créer le répertoire devant rececoir les archives logs.


mkdir c:\oradata\db1\archives


Si j'ai indiqué db1 et non db2, c'est tout simplement qu'au moment de la phase de clonage rman va récuperer les informations depuis db1 pour restaurer les archivelogs. Il sera toujours possible par la suite de modifier cela.

De même, je vais ajouter les deux lignes suivantes à la fin de mon fichier init.ora


LOG_ARCHIVE_DEST_1='LOCATION=c:\oradata\db1\archives'
LOG_ARCHIVE_FORMAT=ARC%S_%R.%T



Attention : Si vous n'avez pas effectué les manipulations lors des posts précédents, il faut également: ajouter les lignes suivantes.


DB_FILE_NAME_CONVERT=('DB1','DB2')
INSTANCE_NAME='DB2
'


Etape 5: Clonage

Avant de pouvoir commencer l'étape de clonage proprement dite, il faut récuperer les fichiers de sauvegarde de DB1 et les copier sur mon serveur distant en prenant soit de conserver l'arboresence et les noms de fichiers.Il suffit donc de copier tout ce qui se trouve dans E:\oracle\product\backup (sur mon serveur d'origine)  vers E:\oracle\product\backup (sur mon serveur distant).

Je vais maintenant pouvoir commencer le clonage. En revanche, je décide que le fichier my_tbs_01.dbf devra s'appeler my_tablespace_01.dbf. Je pourrai également en profiter pour modifier son emplacement, dans le cas ou la machine devant heberger la base, n'a pas la même architecture disque que la machine d'origine.


SET ORACLE_SID=DB2
SQLPLUS /nolog
CONNECT / as sysdba
STARTUP NOMOUNT pfile='e:\oracle\product\10.2.0\admin\db2\pfile\init.ora';
DISCONNECT;
QUIT

RMAN target sys/*****@DB1_SRV1 auxiliary /

run
{
set newname for datafile 'e:\oracle\product\10.2.0\oradata\db1\my_tbs_01.dbf'
 to 'e:\oracle\product\10.2.0\oradata\db2\my_tablespace_01.dbf';
DUPLICATE TARGET DATABASE TO DB2
pfile=e:\oracle\product\10.2.0\admin\DB2\pfile\init.ora
logfile

'e:\oracle\product\10.2.0\oradata\DB2\redo01.dbf' size 50m,
'e:\oracle\product\10.2.0\oradata\DB2\redo02.dbf' size 50m,
'e:\oracle\product\10.2.0\oradata\DB2\redo03.dbf' size 50m;
 
}


Au passage, nous avons utilisé la commande set newnwame for datafile ... to ... pour renommer un datafile.
J'aurai pu également indiquer un autre emplacement.

Et voila, une nouvelle fois nous avons pu cloner notre base dans son intégralité...

Liens utile.

Clonage de base sur même serveur via RMAN
Clonage de base en mode no archivelog sur serveur distant
Création manuelle d'une base de données.
Suppression de base de données



LAO


























Partager cet article
Repost0
30 janvier 2009 5 30 /01 /janvier /2009 11:21
Bonjour,

Dans un post précédent (le premier en fait)  http://www.lao-dba.com/categorie-10596128.html
j'avais expliqué comment dupliquer une base qui était en mode Archivelog sur la même machine.
Pour répondre à une des questions sur ce post, je vais aujourd'hui effectuer la même opération (le clonage) mais avec deux différences:
  • La base à cloner n'est pas en mode Archivelog.
  • La base de destination se trouver sur une machine distante.

Pour effectuer ces manipulations, j'utilise deux machines virtuelles (XP PRO).
La base à cloner est la base que nous avons créer dans le dernier post (
http://www.lao-dba.com/article-27313199.html).

Cependant, nous allons ajouter deux lignes au fichier ini.ora pour indiquer l'emplacement de la sauvegarde, et la taille maximum reservé a cet emplacement (à modifier en fonction de votre environnement).



DB_RECOVERY_FILE_DEST_SIZE=10G
DB_RECOVERY_FILE_DEST="e:\oracle\product\10.2.0\backup"



Il faut également créer un listener sur la machine virtuelle afin de pouvoir s'y connecter par la suite depuis le serveur distant.

Nous allons maintenant effectuer une sauvegarde (en utilisant RMAN) de notre base, qui je rappelle n'est pas en mode archivelog. Ce qui signigie que la sauvegarde s'effectue base fermée, et plus précisemment en mode MOUNT.



SET ORACLE_SID=DB1

SQLPLUS /nolog
CONNECT / as sysdba
SHUTDOWN IMMEDIATE; 

RMAN target /
STARTUP MOUNT pfile='e:\oracle\product\10.2.0\admin\db1\pfile\init.ora';
BACKUP FULL DATABASE;
ALTER DATABASE OPEN;
QUIT;



La sauvegarde est maintenant terminée.

Nous pouvons passer sur le serveur distant qui pour le moment ne contient que le noyau Oracle (10.2.0.3) 

Il faut (comme pour une création de base manuelle) créer les répertoire nécessaires.
Je décide que la base de destination (ainsi que l'instance ) se nommera DB2 (Oracle, DB2==> humour !)


MKDIR E:\oracle\product\10.2.0\admin
MKDIR E:\oracle\product\
10.2.0\oradata 

MKDIR E:\oracle\product\10.2.0\admin\DB2
MKDIR E:\oracle\product\
10.2.0\oradata\DB2 

MKDIR E:\oracle\product\10.2.0\admin\DB2\bdump
MKDIR E:\oracle\product\
10.2.0\admin\DB2\cdump
MKDIR E:\oracle\product\
10.2.0\admin\DB2\pfile
MKDIR E:\oracle\product\
10.2.0\admin\DB2\udump 


Il faut maintenant copier le fichier init.ora depuis le serveur d'origine sur le serveur de destination à l'emplacement prévu(E:\Oracle\product\10.2.0\admin\db2\pfile)

En plus de modifier le init.ora pour remplacer tous les DB1 par DB2, nous allons également ajouter les deux lignes suivantes à la fin du fichier. 


DB_FILE_NAME_CONVERT=('DB1','DB2')
INSTANCE_NAME='DB2


 

Crééons maintenant l'instance: (Etape propre à windows)



oradim -new -sid DB2

 

Avant de pouvoir commencer l'étape de clonage proprement dite, il faut récuperer le fichier de sauvegarde de DB1 et le copier sur mon serveur distant en prenant soit de conserver l'arboresence et les noms de fichiers.Il suffit donc de copier tout ce qui se trouve dans E:\oracle\product\backup (sur mon serveur d'origine)  vers E:\oracle\product\backup (sur mon serveur distant).

Remarque : Si je dispose d'un espace de stockage commun accessible par les deux serveurs, alors cette opération n'est pas nécessaire. 
 
Il ne reste plus qu'a ajouter les lignes suivantes dans le tnsnames.ora du serveur distant



DB1_SRV1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB1)
    )
  )


 
Clonage de la base:


SET ORACLE_SID=DB2
SQLPLUS / nolog
CONNECT / as sysdba
STARTUP NOMOUNT pfile='e:\oracle\product\10.2.0\admin\db2\pfile\init.ora';
DISCONNECT;
QUIT

RMAN target sys/*****@DB1_SRV1 auxiliary /
DUPLICATE TARGET DATABASE TO DB2
pfile='e:\oracle\product\10.2.0\admin\db2\pfile\init.ora'
logfile 
'e:\oracle\product\
10.2.0\oradata\DB2\redo01.dbf' size 50m,
'e:\oracle\product\
10.2.0\oradata\DB2\redo02.dbf' size 50m,
'e:\oracle\product\
10.2.0\oradata\DB2\redo03.dbf' size 50m;  


Et normalement, vous disposez maintenant d'une copie de la base DB1...

Remarque : Pour simplifier, j'ai conservé les mêmes noms et emplacement sur le machine de destination, mais la commande DUPLICATE permet de renommer les fichiers et d'indiquer un nouvel emplacement. On en reparlera un jour si ca interesse quelqu'un...

LAO. 

 

Partager cet article
Repost0
4 octobre 2008 6 04 /10 /octobre /2008 15:07
Bonjour à tous,


REMARQUE: Cet Article est un des premiers de mon blog et cependant d'après les statistiques, il s'agit d'un des articles les plus "lu" ou du moins accèdé. Il serait interessant pour moi que vous preniez le temps d'y laisser un petit commentaire pour m'indiquer si il vous a été utile ou ce qui a manqué pour vous aider. Merci par avance.



Voici donc mon premier thème. On ne peut pas dire que je commence par le plus simple. En effet nous allons "cloner" une base. Pour cela nous allons utiliser RMAN, outil fourni gracieusement par ORACLE et dont l'objet premier est de s'occuper des sauvegardes.
Pour beaucoup, effectuer une sauvegarde consiste à faire des exports ...
Nous essaierons de montrer dans un prochaine article que cela n'est :
  • Pas performant.
  • Pas suffisant.


A part pour ceux qui font partie du monde de la production ou de l'exploitation, RMAN n'est peut être pas familier.
Je pense notamment aux editeurs de logiciel qui s'appuient sur une base comme ORACLE.
Or pour avoir travaillé preque 8 ans chez des editeurs, je sais que l'on est souvent confrontés à des problèmes de duplication d'environnement (Dev vers test, test vers pre-prod...)

Alors on peut faire des exports, des imports, mais lorsqu'il s'agit de de repeter ces opérations sur des bases volumineurses, nous sommes vite confrontés à des problèmes de "temps" !

Pour commencer avec quelque chose de simple, nous allons dupliquer une base dans un environnement WINDOWS sur la même machine.

Envrionnement :
ORACLE 10.2.0.1 (Personnal Edition)  avec un OS classique : WINDOWS XP PRO.

Une base à dupliquer qui a pour SID ORADB.

Etape 1: Passer notre base en mode "ARCHIVELOG"

Demarrer > Executer > cmd.exe

 lancer l'utilitaire SQL+ en tapant sqlplus / nolog


 SQL> Connect / as sysdba  (attention, il faut etre en local pour executer cette commande)
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;



Etape 2: Effectuer une sauvegarde complète de la base.

Demarrer > Executer > cmd.exe

Dans le cas, ou nous avons plusieurs bases sur notre machine, nous positionnons la variable d'environnement sur la base à dupliquer.

SET ORACLE_SID=ORADB

Nous pouvons maintenant appeler l'utilitaire rman en tapant tout simplement dans l'invite de commande RMAN

Remarques: Par défaut les fichiers de sauvegardes, et les fichier d'archives sont placés dans la FRA (Flash Recovery Area).  A l'installaltion d'ORACLE, cette zone a une valeur maximal de  2 G. Si vous disposez d'une base volumineuse, il convient d'augmenter cette taille.

Se connecter en System:


SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE= 10 G;


Nous pouvons également modifier l'emplacement de la FRA (par défaut /ORACLE_HOME/flash_recovery_area/)

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST=C:\My_FRA_Dest;

RMAN> CONNECT TARGET /
RMAN> BAKCUP FULL DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;



Etape 3: Créer l'arborescence pour acceuillir la base clonée.

ex: C:\ORACLE\PRODUCT\10.2.0\admin\ORADB pour les répertoires pfile,udump,bdump,...
 et C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORADB pour les fichiers de données, redo, ....

Si nous voulons que la nouvelle base s'appelle DUP, il faut alors créer une arborescence du type
C:\ORACLE\PRODUCT\10.2.0\admin\DUP et créer les différents répertoires comme pour ORADB
et également créer C:\ORACLE\PRODUCT\10.2.0\ORADATA\DUP  à vide.

Etape 4: Créer un fichier init.ora pour la base DUP.

Pour cela, nous allons tout simplement compier le ini.ora (qui peut avoir un autre nom) qui se trouve dans C:\ORACLE\PRODUCT\10.2.0\admin\ORADB\pfile dans C:\ORACLE\PRODUCT\10.2.0\admin\DUP\pfile

Pour simplifier, si ce n'est pas le cas, renommez le init.ora
 
Il va maintenant falloir editer ce fichier init.ora pour remplacer ORADB par DUP partout dans le fichier (emplacement de fichier, nom de base), utiliser la fonction "rechercher & remplacer" de votre editeur pour etre sur de ne pas en oublier. 
 
Cela n'est cependant pas suffisant, nous allons ajouter à la fin de notre fichier init.ora fraichement modifié les deux lignes suivantes:

DB_FILE_NAME_CONVERT=('ORADB','DUP')
INSTANCE_NAME='DUP'

ATTENTION : Modifier également le cas échéant les paramètres relatifs à la mémoire (SGA & PGA) afin de ne pas utiliser la totalité de la RAM disponible sur votre PC.

Etape 5 : Créer une nouvelle instance.

Demarrer > Executer > cmd.exe puis tapez la commande suivante
ORADIM -new -sid DUP

Etape 6: Démarrer l'instance créer.

Nous allons démarrer l'instance DUP en mode no mount et indiquer le fichier ora à utiliser pour lancer l'intance.
Demarrer > Executer > cmd.exe



SET ORACLE_SID=DUP
sqlplus / nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP NOMOUNT pfile='c:\ORACLE\PRODUCT\10.2.0\admin\pfile\init.ora';
SQL> DISCONNECT;
SQL> QUIT



 Etape 7: Clonage de la base ORADB

Demarrer > Executer > cmd.exe puis :



SET ORACLE_SID=DUP
rman target sys/oracle@ORADB auxiliary /
RMAN> DUPLICATE TARGET DATABASE TO DUP
pfile=C:\ORACLE\PRODUCT\10.2.0\admin\pfile\init.ora
logfile
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\redo01.dbf' size 50m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\redo02.dbf' size 50m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\redo01.dbf' size 50m;



Il suffit d'attendre un peu, et finalement la duplication se termine, connectez vous alors à DUP et verifiez que vos users, schemas sont bien présents.

Conclusion: Bon nombre de personnes pensent que la duplication de base ou l'utilisation de RMAN sont des choses complexes. Je ne remettrai pas en cause le fait que la problématique des sauvegardes n'est pas aisée, mais finalement si vous prenez le temps d'effectuer les 7 étapes ci-dessus, vous vous rendrez compte qu'en moins de trente minutes vous aurrez effectué un clonage de base en utilisant RMAN !

Si vous avez passé votre base en ARCHIVELOG pour effectuer ces opérations, je vous conseille de la repasser en mode NOARCHIVELOG. Pour cela rien de plus simple.

Demarrer > Executer > cmd.exe

 lancer l'utilitaire SQL+ en tapant sqlplus / nolog


SQL> Connect / as sysdba  (attention, il faut etre en local pour executer cette commande)
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE NOARCHIVELOG;
SQL> ALTER DATABASE OPEN;



Liens utiles:

Clonage d'une base en mode no archivelog sur un serveur distant
Clonage d'une base en mode archivelog sur un serveur distant

LAO.
 
Partager cet article
Repost0