Samedi 31 janvier 2009 6 31 /01 /Jan /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


























Par LAO - Publié dans : Clonage de base - Communauté : ORACLE
Ecrire un commentaire - Voir les 2 commentaires
Retour à l'accueil

Catégories

Recherche

Calendrier

Octobre 2014
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 30 31    
<< < > >>

Profil

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