Quand on exploite Oracle Database en Standard Edition 2 (SE2), on n’a droit ni au Real Application Clusters (RAC), ni a Data Guard. Pendant longtemps, la seule haute disponibilite « officielle » pour SE2 était le RAC One Node… lui aussi retiré de la licence SE2. Oracle a comblé ce vide avec Standard Edition High Availability (SE HA / SEHA), introduit avec Oracle Database 19c : une solution de bascule a froid (cold failover) sur deux nœuds, incluse sans surcoût de licence avec SE2.
Dans cet article, nous deployons de bout en bout un cluster SEHA 19c entierement en ligne de commande, sans aucune interface graphique : preparation de l’OS (Oracle Linux 8), stockage partage ASM, installation silencieuse de Grid Infrastructure, du logiciel SE2, creation de la base et configuration de la bascule automatique.
A adapter a votre environnement : partout dans cet article, les valeurs affichees en rouge dans les fichiers de configuration sont a personnaliser (mots de passe, adresses IP, noms d’hotes node1/node2, nom SCAN et cluster, WWID des disques, interfaces reseau, chemins d’installation). Dans les blocs de commandes a coloration syntaxique, ces memes valeurs ne peuvent pas etre surlignees : reperez-les via cette liste — ChangeMe#2026 (mots de passe), 10.0.0.x / 192.168.10.x (IP), eth0/eth1 (interfaces), /u01/… (chemins), node1/node2 (hotes), ORCLCDB / ORCLPDB1 (base/PDB), ventes_srv (service), 36000c29aaaa000X (WWID disques).
1. Principe et architecture
SEHA repose sur Oracle Grid Infrastructure (Oracle Clusterware + Oracle ASM) installe sur deux nœuds. La base de donnees est une instance unique (single instance) dont les fichiers vivent sur un stockage partage (les disques ASM). Clusterware surveille l’instance : si le nœud actif tombe, la base est automatiquement redemarree sur le second nœud.
- Bascule a froid : une seule instance est active a la fois (ce n’est pas du RAC, il n’y a jamais deux instances ouvertes simultanement).
- 2 nœuds maximum, reserves a SE2.
- Stockage partage obligatoire (SAN / iSCSI / baie) accessible par les deux nœuds, gere par ASM.
- Inclus dans la licence SE2 (aucune option payante).
Schema logique de notre maquette :
Reseau public (clients) Reseau prive (interconnect)
| |
+-----------+-----------+ +-----------+-----------+
| node1 |==========| node2 |
| GI 19c + base SE2 | interco | GI 19c (standby) |
| INSTANCE ACTIVE | | pret a reprendre |
+-----------+-----------+ +-----------+-----------+
| |
+---------------+------------------+
|
Stockage partage (ASM)
OCR/VOTING + DATA + FRA
Plan d’adressage utilise dans l’article (a adapter) :
# /etc/hosts (identique sur les deux noeuds) # --- Reseau public --- 10.0.0.11 node1.example.lan node1 10.0.0.12 node2.example.lan node2 # --- VIP --- 10.0.0.21 node1-vip.example.lan node1-vip 10.0.0.22 node2-vip.example.lan node2-vip # --- SCAN (idealement 3 IP en round-robin DNS, 1 ici pour la maquette) --- 10.0.0.30 seha-scan.example.lan seha-scan # --- Interconnect prive --- 192.168.10.11 node1-priv 192.168.10.12 node2-priv
2. Versions et compatibilite OS
- Oracle Linux 8 : supporte nativement par Oracle Database 19c (a partir de la 19.7). On part ici d’une installation de base 19.3, sur laquelle on appliquera de preference le dernier Release Update.
- Les deux Oracle Homes (Grid et Database) doivent etre au strictement meme niveau de patch (RU) sur les deux nœuds.
Telechargez depuis edelivery / support Oracle les deux archives 19.3 base : LINUX.X64_193000_grid_home.zip et LINUX.X64_193000_db_home.zip, deposees ici dans /tmp.
3. Preparation de l’OS (sur les DEUX noeuds)
3.1 Paquet de pre-installation Oracle
Le paquet oracle-database-preinstall-19c fait l’essentiel du travail : creation de l’utilisateur oracle et des groupes, parametres noyau (sysctl), limites (limits.conf) et dependances. Il est fourni dans les depots Oracle Linux 8.
# En root, sur chaque noeud dnf install -y oracle-database-preinstall-19c
3.2 Utilisateur grid et groupes ASM
Nous adoptons la separation de roles recommandee : grid possede Grid Infrastructure, oracle possede la base. Le paquet de pre-install ne cree pas les groupes ASM ni l’utilisateur grid, on les ajoute :
groupadd -g 54327 asmdba groupadd -g 54328 asmoper groupadd -g 54329 asmadmin useradd -u 54331 -g oinstall -G dba,asmdba,asmoper,asmadmin grid usermod -a -G asmdba oracle passwd grid passwd oracle
3.3 Arborescence d’installation
mkdir -p /u01/app/grid mkdir -p /u01/app/19.3.0/grid mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory chown -R grid:oinstall /u01/app/grid /u01/app/19.3.0 /u01/app/oraInventory chown -R oracle:oinstall /u01/app/oracle chmod -R 775 /u01/app
3.4 Reglages systeme
En maquette on simplifie pare-feu et SELinux (en production : ouvrez les ports requis plutot que de tout desactiver). On desactive aussi les Transparent HugePages, fortement deconseillees par Oracle.
# Horloge synchronisee (obligatoire pour Clusterware) dnf install -y chrony systemctl enable --now chronyd # Maquette : pare-feu et SELinux relaches systemctl disable --now firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # Desactiver les Transparent HugePages (au prochain reboot) grubby --update-kernel=ALL --args="transparent_hugepage=never"
Verifiez que la resolution de noms fonctionne dans les deux sens sur les deux nœuds (node1, node2, -priv, -vip, scan).
4. Stockage partage et disques ASM
Les LUN partagees doivent etre vues par les deux nœuds (multipath conseille). On donne ensuite a chaque disque un nom stable et les bons droits via une regle udev. Recuperez d’abord l’identifiant WWID de chaque disque :
# Identifier le WWID de chaque LUN partagee for d in sdb sdc sdd; do echo -n "$d -> "; /usr/lib/udev/scsi_id -g -u -d /dev/$d; done
Creez la regle /etc/udev/rules.d/99-oracle-asmdevices.rules (memes WWID sur les deux nœuds) :
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29aaaa0001", SYMLINK+="oracleasm/asm-ocr1", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29aaaa0002", SYMLINK+="oracleasm/asm-data1", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29aaaa0003", SYMLINK+="oracleasm/asm-fra1", OWNER="grid", GROUP="asmadmin", MODE="0660"
# Recharger les regles et verifier les liens (sur les deux noeuds) udevadm control --reload-rules udevadm trigger ls -l /dev/oracleasm/
5. Equivalence SSH du compte grid
Decompressez d’abord l’archive Grid dans le futur GRID_HOME (en tant que grid, sur node1), puis configurez la connectivite SSH sans mot de passe entre les nœuds via le script fourni par Oracle :
# En tant que grid, sur node1 cd /u01/app/19.3.0/grid unzip -q /tmp/LINUX.X64_193000_grid_home.zip # Equivalence SSH grid entre les deux noeuds /u01/app/19.3.0/grid/oui/prov/resources/scripts/sshUserSetup.sh \ -user grid -hosts "node1 node2" -noPromptPassphrase -advanced
6. Installation silencieuse de Grid Infrastructure 19c
On pilote l’installation par un fichier reponse. Creez /tmp/grid.rsp (adaptez noms, IP et mots de passe) :
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0 INVENTORY_LOCATION=/u01/app/oraInventory oracle.install.option=CRS_CONFIG ORACLE_BASE=/u01/app/grid oracle.install.asm.OSDBA=asmdba oracle.install.asm.OSOPER=asmoper oracle.install.asm.OSASM=asmadmin oracle.install.crs.config.scanType=LOCAL_SCAN oracle.install.crs.config.gpnp.scanName=seha-scan.example.lan oracle.install.crs.config.gpnp.scanPort=1521 oracle.install.crs.config.ClusterConfiguration=STANDALONE oracle.install.crs.config.clusterName=seha-cluster oracle.install.crs.config.gpnp.configureGNS=false oracle.install.crs.config.autoConfigureClusterNodeVIP=false oracle.install.crs.config.clusterNodes=node1:node1-vip:HUB,node2:node2-vip:HUB oracle.install.crs.config.networkInterfaceList=eth0:10.0.0.0:1,eth1:192.168.10.0:5 oracle.install.crs.config.storageOption=FLEX_ASM_STORAGE oracle.install.asm.SYSASMPassword=ChangeMe#2026 oracle.install.asm.monitorPassword=ChangeMe#2026 oracle.install.asm.diskGroup.name=OCR oracle.install.asm.diskGroup.redundancy=EXTERNAL oracle.install.asm.diskGroup.AUSize=4 oracle.install.asm.diskGroup.disks=/dev/oracleasm/asm-ocr1 oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/* oracle.install.crs.configureAFD=false oracle.install.config.managementOption=NONE
Lancez l’installation silencieuse (en tant que grid sur node1) :
/u01/app/19.3.0/grid/gridSetup.sh -silent -responseFile /tmp/grid.rsp
A la fin, l’installeur demande d’executer deux scripts en root, d’abord sur node1 puis sur node2 (sequentiellement, jamais en parallele) :
# En root, node1 PUIS node2 /u01/app/oraInventory/orainstRoot.sh /u01/app/19.3.0/grid/root.sh
Puis on termine la configuration (assistants post-install) toujours en mode silencieux :
# En tant que grid sur node1 /u01/app/19.3.0/grid/gridSetup.sh -executeConfigTools -responseFile /tmp/grid.rsp -silent
Verification du cluster :
export ORACLE_HOME=/u01/app/19.3.0/grid export PATH=$ORACLE_HOME/bin:$PATH crsctl check cluster -all crsctl stat res -t
7. Creation des diskgroups DATA et FRA
L’OCR/voting est dans le diskgroup OCR cree a l’installation. On ajoute DATA (donnees) et FRA (zone de recuperation) avec asmca en mode silencieux :
# En tant que grid asmca -silent -createDiskGroup -diskGroupName DATA \ -redundancy EXTERNAL -disk '/dev/oracleasm/asm-data1' -au_size 4 asmca -silent -createDiskGroup -diskGroupName FRA \ -redundancy EXTERNAL -disk '/dev/oracleasm/asm-fra1' -au_size 4
8. Installation silencieuse du logiciel Oracle Database SE2
Decompressez l’archive base de donnees dans le DB Home (en tant que oracle sur node1) :
# En tant que oracle sur node1 cd /u01/app/oracle/product/19.3.0/dbhome_1 unzip -q /tmp/LINUX.X64_193000_db_home.zip
Fichier reponse /tmp/db.rsp : on installe le logiciel seul (INSTALL_DB_SWONLY), edition SE2, sur les deux nœuds du cluster :
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=SE2 oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba oracle.install.db.CLUSTER_NODES=node1,node2 oracle.install.db.config.starterdb.type=GENERAL_PURPOSE SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true
# En tant que oracle sur node1 /u01/app/oracle/product/19.3.0/dbhome_1/runInstaller -silent -responseFile /tmp/db.rsp
Executez le root.sh demande, en root, sur node1 puis node2 :
# En root, node1 PUIS node2 /u01/app/oracle/product/19.3.0/dbhome_1/root.sh
Recommandation : appliquez ici le dernier Release Update disponible sur le GRID_HOME et le DB Home (via opatch) AVANT de creer la base, sur les deux nœuds, en conservant un niveau de patch strictement identique.
9. Creation de la base sur ASM (dbca silencieux)
On cree une base conteneur (CDB) avec une PDB, stockee dans DATA, recuperation dans FRA, en tant que oracle sur node1 :
dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName ORCLCDB -sid ORCLCDB \ -createAsContainerDatabase true -numberOfPDBs 1 -pdbName ORCLPDB1 \ -storageType ASM -diskGroupName DATA -recoveryGroupName FRA \ -characterSet AL32UTF8 -nationalCharacterSet AL16UTF16 \ -memoryMgmtType AUTO_SGA -totalMemory 4096 -redoLogFileSize 256 \ -emConfiguration NONE \ -sysPassword ChangeMe#2026 -systemPassword ChangeMe#2026 -pdbAdminPassword ChangeMe#2026
10. Activation de la haute disponibilite SE
C’est l’etape cle de SEHA. Pour qu’une base « single instance » puisse basculer, on la declare aupres de Clusterware avec une liste de nœuds candidats. Le SPFILE et le fichier de mots de passe doivent etre dans ASM (donc partages), sinon le second nœud ne peut pas demarrer l’instance.
# En tant que oracle, sur node1 export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH # Verifier la config actuelle srvctl config database -db ORCLCDB
Si SPFILE/pwfile sont encore locaux, deplacez-les dans ASM puis declarez les deux nœuds candidats :
# Recreer le fichier de mots de passe dans ASM (partage) orapwd file='+DATA/ORCLCDB/orapwORCLCDB' dbuniquename='ORCLCDB' format=12.2 # Pointer SPFILE et pwfile partages, et activer la bascule sur 2 noeuds srvctl modify database -db ORCLCDB -spfile '+DATA/ORCLCDB/PARAMETERFILE/spfileORCLCDB.ora' srvctl modify database -db ORCLCDB -pwfile '+DATA/ORCLCDB/orapwORCLCDB' srvctl modify database -db ORCLCDB -node node1,node2 # La liste de noeuds candidats confirme l'activation de SE HA srvctl config database -db ORCLCDB
Creez enfin un service applicatif : les clients se connectent au service (via le SCAN), ce qui leur permet de retrouver l’instance apres une bascule :
srvctl add service -db ORCLCDB -service ventes_srv -pdb ORCLPDB1 srvctl start service -db ORCLCDB -service ventes_srv srvctl status service -db ORCLCDB -service ventes_srv
11. Tests de bascule
Verifiez d’abord ou tourne l’instance, puis provoquez une relocalisation propre :
srvctl status database -db ORCLCDB # Sur quel hote tourne reellement l'instance ? printf 'set heading off feedback off\nselect host_name from v$instance;\nexit\n' > /tmp/where.sql sqlplus -s / as sysdba @/tmp/where.sql
# Bascule controlee vers node2 srvctl relocate database -db ORCLCDB -node node2 srvctl status database -db ORCLCDB
Pour valider la bascule automatique, simulez une panne franche du nœud actif (arret brutal ou reboot). Clusterware detecte la perte et redemarre l’instance sur le nœud survivant :
# Sur le noeud actif : panne simulee reboot # Depuis l'autre noeud, observer la reprise watch -n 2 'crsctl stat res ora.orclcdb.db -t'
12. Points de vigilance
- Bascule a froid : la base redemarre (quelques dizaines de secondes a quelques minutes selon la recovery). Ce n’est ni du RAC (instances simultanees) ni du Data Guard (replica distant).
- Memes RU partout : Grid et Database, sur les deux nœuds, au strictement meme niveau de patch.
- Niveau de patch : Oracle Linux 8 est supporte avec Oracle Database 19.7+ ; appliquez de preference le dernier Release Update sur les deux noeuds.
- SPFILE et fichier de mots de passe dans ASM : indispensables au demarrage sur le nœud de secours.
- Connexion cliente par service + SCAN : activez FAN/FCF (Fast Connection Failover) cote client pour une reconnexion transparente.
- Limites SE2 : 16 threads CPU maximum par serveur ; respectez-les sur chaque nœud.
- Stockage reellement partage et multipath ; sans cela, pas de bascule possible.
- Sauvegardes RMAN vers la FRA (ASM) : la strategie de backup reste identique a une base mono-instance.
13. Recapitulatif des commandes
# OS (chaque noeud) dnf install -y oracle-database-preinstall-19c chrony # Groupes/grid, arborescence, udev disques ASM, equivalence SSH grid # Grid Infrastructure (node1, user grid) gridSetup.sh -silent -responseFile /tmp/grid.rsp # root: orainstRoot.sh + root.sh (node1 puis node2) gridSetup.sh -executeConfigTools -responseFile /tmp/grid.rsp -silent crsctl check cluster -all # Diskgroups asmca -silent -createDiskGroup -diskGroupName DATA -redundancy EXTERNAL -disk '/dev/oracleasm/asm-data1' -au_size 4 asmca -silent -createDiskGroup -diskGroupName FRA -redundancy EXTERNAL -disk '/dev/oracleasm/asm-fra1' -au_size 4 # Logiciel SE2 (node1, user oracle) + root.sh sur les 2 noeuds runInstaller -silent -responseFile /tmp/db.rsp # Base + haute dispo SE dbca -silent -createDatabase ... srvctl modify database -db ORCLCDB -node node1,node2 srvctl config database -db ORCLCDB # Tests srvctl relocate database -db ORCLCDB -node node2 srvctl status database -db ORCLCDB
Conclusion
Avec Standard Edition High Availability, Oracle offre enfin aux clients SE2 une vraie protection contre la panne d’un serveur, sans option payante et sans complexite RAC. Le tout s’installe integralement en ligne de commande : fichiers reponse pour Grid Infrastructure et le logiciel, dbca silencieux pour la base, et quelques commandes srvctl pour activer la bascule sur deux nœuds. Une solution robuste, scriptable et reproductible, parfaite pour automatiser le deploiement via Ansible ou Terraform.
