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:
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
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