Quitte ou double : passer d'une instance simple à une base en cluster
Date de publication : 18.03.2007 , Date de mise à jour : 19.10.2007
Par
fadace (Fabien Celaia)
Transformez votre instance en une base en cluster, en utilisant uniquement la ligne de commande
I. Introduction
II. Préparer l'instance à sa transformation
III. Préparer les fichiers
IV. Cataloguer la base dans le référentiel de l'ocr
V. Activer la base en cluster
I. Introduction
Cet article a pour but de vous présenter la manière de créer une base de données Oracle en cluster, et ce uniquement en passant par les lignes de commandes.
Oracle livre un utilitaire nommé rconfig pour faire de même. Il n'est ma foi pas si simple à utiliser, et n'enlève rien à l'aspect pédagogique de cet article qui vous permettra de mieux appréhender ce qui se trame en interne.
Oracle publie des assistants pour ce type d'installation, mais parfois dans ces environnements ma foi complexes, ces outils ne se comportent pas de la façon que l'on souhaite.
Le retour à la ligne de commande a ceci de sympathique qu'il A) permet de comprendre plus à fond les concepts et B) fonctionne dans la quasi totalité des cas.
Pour cet article, nous nous baserons sur les hypothèses suivantes:
- Le cluster Oracle 10gR2 est installé et configuré correctement
- Nous avons à disposition 2 machines linux (dvpora01 et dvpora02), en Korn linux
- Nous travaillons avec des bases Oracle 10gR2 minimums dont le Oracle Home se situe, sur chacune des machines, sous /opt/oracle/db10gr2
- Nous avons un point de montage partagé entre ces deux instances : /oradata/dbMaBase
- La base en stand-alone actuelle est déjà installée et se nomme MaBase; ses tablespaces sont déjà situés sur la partie partagée du cluster
II. Préparer l'instance à sa transformation
Les 2 instances vont quasiment tout se partager, hormis 3 composants
- Le nom de l'instance
- Le UNDO tablespace
- Les fichiers de journaux
Pour le premier élément, nous l'avons vu, il s'agit d'un des paramètres du spfile (ou, c'est selon, du init.ora)
Pour le undo tablespace, il nous faut en créer un deuxième sur l'instance existante. C'est ensuite au niveau du spfile que la distribution s'effectuera
create undo tablespace "UNDOTBS2" datafile size 100M autoextend on next 10M maxsize unlimited
|
En ce qui concerne les fichiers de journaux, il va nous falloir créer un second groupe de journaux, dédié au thread 2, les 2 existants étant par défaut dédiés au thread 1.
alter database add logfile thread 2 group 3 ('/oradata/redo/redo_03_02.rdo','/oradata/redom/redo_03_02.rdo') ;
alter database add logfile thread 2 group 4 ('/oradata/redo/redo_04_02.rdo','/oradata/redom/redo_04_02.rdo') ;
|
Il faut encore créer les bases catalogues du cluster dans la base
sqlplus / as sysdba @$ORACLE_HOME/rdbms/admin/catclust
|
III. Préparer les fichiers
Le fichier pfile (éventuellement spfile) se trouvant dans $ORACLE_HOME/dbs va devoir subir quelques transformations et être déplacé sur une partie de disque partagé
*.cluster_database_instances=2
*.cluster_database=true
*.remote_listener='LISTENERS_MaBase'
MaBase1.thread=1
MaBase2.thread=2
MaBase1.instance_number=1
MaBase2.instance_number=2
MaBase1.instance_name=MaBase1
MaBase2.instance_name=MaBase2
MaBase1.undo_tablespace='UNDOTBS1'
MaBase2.undo_tablespace='UNDOTBS2'
|
IV. Cataloguer la base dans le référentiel de l'ocr
Ajouter la base
srvctl add database -d MaBase -o /opt/oracle/db10gr2 -p /oradata/admin/spfileMaBase.ora
|
Ajouter les 2 instances
oracle> srvctl add instance -d MaBase -i MaBase1 -n dvpora01
oracle> srvctl add instance -d MaBase -i MaBase2 -n dvpora02
|
Ajouter les 2 services
oracle> srvctl add service -d MaBase -s MaBase -r "MaBase1,MaBase2" -P basic
|
Démarrer le tout
oracle> srvctl start database -d MaBase
oracle> srvctl start service -d MaBase
|
A ce stade, la base devrait passer ONLINE, ainsi que l'instance MaBase1 et le service éponyme. L'instance MaBase2 et son service devraient avoir une cible (TARGET) à ONLINE mais un statut à OFFLINE... ce qui est normal pour l'instant.
V. Activer la base en cluster
Se connecter sur la base principale et activer la 2ème instance : c'est généralement l'oubli qui fait que seule la première des deux instances peut démarrer.
ALTER DATABASE ENABLE THREAD 2 ;
|
A ce niveau, soit l'instance MaBase2 démarre, suivie de son service, soit il est pafois nécessaire de l'arrêter et de la redémarrer explicitement
srvctl stop instance -d MaBase -i MaBase2
oracle> srvctl start instance -d MaBase -i MaBase2
oracle> srvctl stop service -d MaBase
oracle> srvctl start service -d MaBase
|
oracle> crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....SE1.srv application ONLINE ONLINE dvpora01
ora....SE2.srv application ONLINE ONLINE dvpora02
ora....ASE1.cs application ONLINE ONLINE dvpora02
ora....E1.inst application ONLINE ONLINE dvpora01
ora....E2.inst application ONLINE ONLINE dvpora02
ora.MABASE.db application ONLINE ONLINE dvpora02
ora....E1.lsnr application ONLINE ONLINE dvpora01
ora....SE1.gsd application ONLINE ONLINE dvpora01
ora....SE1.ons application ONLINE ONLINE dvpora01
ora....SE1.vip application ONLINE ONLINE dvpora01
ora....E2.lsnr application ONLINE ONLINE dvpora02
ora....SE2.gsd application ONLINE ONLINE dvpora02
ora....SE2.ons application ONLINE ONLINE dvpora02
ora....SE2.vip application ONLINE ONLINE dvpora02
|
Si tout se passe bien (= si le crs_stat -t vous retourne tous les éléments ONLINE), félicitations, vous devriez avoir maintenant une base en RAC à 2 noeuds.


Copyright © 2007 fadace. Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc
sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.