Overblog
Editer l'article 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

commentaires

G
Désolé, j'ai été un peu rapide en besogne : le problème c'est que je n'ai pas 176 Mo au bout d'un jour, mais 1,76 Go...<br /> Pour simplifier le tout, on a entre temps supprimé ces logs et désactivé le mode archive, donc... je reposerai ma question quand ce sera à nouveau plus concret !<br /> (l'idée sous-jacente était en effet d'utiliser RMAN entre 2 serveurs distant, disons entre Paris et une ile, mais notre connection Internet étant un peu molle du genou, je ne me voyais pas faire une réplication de ~2Go/jour...)
Répondre
L
<br /> <br /> ouah ! toujours aussi simple chez vous !<br /> <br /> <br /> <br />
G
Bonjour LAO,<br /> <br /> Nous avons passé (temporairement) notre base en mode ARCHIVELOG et avons eu la surprise de découvrir qu'un fichier de log de 8 Mo était créé environ toutes les heures, alors que nous n'avons pas une activité "débordante".<br /> <br /> Question = y a-t-il possibilité de mettre en place des paramètres pour éviter cela ?<br /> <br /> Merci, bonne journée,<br /> Gigot
Répondre
L
<br /> Bonjour,<br /> Activité pas débordant =>8 MO / h => 176MO / j. Y a pas quoi de fouetter un chat.<br /> Soit la base est en mode archivelog pour des raisons de sauvegarden et dans ce cas, il faut s'arranger pour que lors de la sauvegarde RMAN fasse le ménage. Soit la base est en mode archivelog pour<br /> une raison qui m'échappe (et dans cas, un petit job de nettoyage devrait faire l'affaire).<br /> Sinon, eventuellement augmenter la taille des redo logs (du coup moins de switch, et donc moins d'archivelog). Difficile de répondre, sans savoir réellement cette base est "temporairement en<br /> archivelog".<br /> Laurent<br /> <br /> <br />