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 deux 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 deux instances vont quasiment tout se partager, hormis trois 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 deux 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 deux instances
oracle>
srvctl add instance -d MaBase -i MaBase1 -n dvpora01
oracle>
srvctl add instance -d MaBase -i MaBase2 -n dvpora02
Ajouter les deux 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
À 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 2e 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
;
À ce niveau, soit l'instance MaBase2 démarre, suivie de son service, soit il est parfois 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 à deux nœuds.