
Comme je l’avais indiqué dans un précédent post (ici), à partir de la version 19c, Oracle Real Application Clusters (RAC) n’est plus supporté en Standard Edition.
Dans ce post, j’avais mentionné la possibilité d’utiliser Oracle Grid Infrastructure pour gérer la disponibilité d’une instance Oracle entre deux serveurs, dans une configuration actif/passif (l’instance Oracle est active sur un seul serveur à la fois), mais cela nécessite un peu de travail de mise en place (écriture d’un script chargé de gérer les actions de démarrage, d’arrêt et de vérification, création d’un type de ressource puis d’une ressource). Fondamentalement, ce n’est pas très compliqué, mais c’est quand même du travail en plus, et c’est toujours mieux s’il existe une fonctionnalité native qui le fait.
Et bien voilà, c’est fait !
Annoncé en mars 2020, Oracle a officiellement mis à disposition Oracle Standard Edition High Availability sous Linux, Microsoft Windows et Solaris dans le cadre de la Release Update (RU) 19.7 d’Oracle Database 19c (avril 2020).
Oracle SE HA propose une solution de type failover (actif/passif) pour des instances Standard Edition en utilisant une configuration Oracle Grid Infrastructure qu’il convient donc d’installer au préalable (version 19c RU 19.7 ou ultérieure).
Ensuite, il suffit d’installer Oracle Database (version 19c RU 19.7 ou ultérieure) sur les deux noeuds du cluster, en mode « instance seul » (pas « Real Application Clusters » et d’opter pour la Standard Edition 2 :


Une fois l’installation terminée, il ne reste plus qu’à créer une base de données avec DBCA (Database Configuration Assistant, méthode recommandée), en sélectionnant bien ASM pour le stockage (stockage partagé entre les deux noeuds du cluster) :

Une fois la création terminée, la base de données est automatiquement enregistrée avec Oracle Clusterware (fonctionnalité Oracle Restart) et l’utilitaire srvctl peut être utilisé pour modifier la configuration de la base de données et activer SE HA :
[oracle@clu1 ~]$ srvctl stop database -db db1 [oracle@clu1 ~]$ srvctl modify database -db db1 -node clu1,clu2 [oracle@clu1 ~]$ srvctl start database -db db1 [oracle@clu1 ~]$ srvctl status database -db db1 Instance DB1 is running on node clu1 [oracle@clu1 ~]$ srvctl config database -db db1 Database unique name: DB1 Database name: DB1 Oracle home: /u01/app/oracle/product/19.0.0/dbhome_1 Oracle user: oracle Spfile: +DATA1/DB1/PARAMETERFILE/spfile.273.1040732475 Password file: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: Disk Groups: DATA1 Mount point paths: Services: Type: SINGLE OSDBA group: dba OSOPER group: oper Database instance: DB1 Configured nodes: clu1,clu2 CSS critical: no CPU count: 0 Memory target: 0 Maximum memory: 0 Default network number for database services: Database is administrator managed
Dans la configuration, nous voyons que la base de données est de type SINGLE (pas RAC) et qu’elle est configurée sur deux noeuds.
C’est fini, la base de données est protégée par SE HA. Si l’instance s’arrête inopinément, elle est automatiquement redémarré par Oracle Clusterware (fonctionnalité Oracle Restart déjà existante). Si le serveur sur lequel l’instance est démarrée s’arrête brutalement, l’instance est automatiquement redémarrée sur un autre serveur disponible du cluster. Pour de la maintenance planifiée, ou pour un retour à la normale après une bascule sur un autre serveur, il est possible d’utiliser la commande srvctl relocate :
oracle@clu1 ~]$ srvctl relocate database -db db1 -node clu2 [oracle@clu1 ~]$ srvctl status database -db db1 Instance DB1 is running on node clu2
Il est important de noter que cette commande provoque un arrêt de la base de données sur le serveur d’origine puis un démarrage sur le serveur cible ; cela ne se fait pas à chaud.
Pour la connexion à la base de données à partir des applications, il est conseillé d’utiliser le SCAN (Single Client Access Name) comme nom de serveur dans les adresses réseaux. Ce nom, défini et géré par Oracle Clusterware sur les différents noeuds du cluster, permet de se connecter à l’instance quelle que soit son emplacement, et cela sans devoir modifier la configuration côté client. Ce nom peut être utilisé dans une connexion Easy Connect ou dans un nom de service réseau défini dans le fichier tnsnames.ora.
[oracle@clu1 ~]$ sqlplus system/xxxxxxxxxx@clu-scan/db1 SQL*Plus: Release 19.0.0.0.0 - Production on Wed May 20 06:51:11 2020 Version 19.7.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Wed May 20 2020 06:50:56 +02:00 Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.7.0.0.0 SQL> exit Disconnected from Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.7.0.0.0 [oracle@clu1 ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora DB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = clu-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DB1) ) ) [oracle@clu1 ~]$ sqlplus system/xxxxxxxxxx@db1 SQL*Plus: Release 19.0.0.0.0 - Production on Wed May 20 06:50:56 2020 Version 19.7.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Wed May 20 2020 05:56:35 +02:00 Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.7.0.0.0 SQL> exit Disconnected from Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.7.0.0.0
Et la licence me direz-vous ?
Oracle Standard Edition High Availability est disponible sans coût supplémentaire par rapport à la Standard Edition 2, et Oracle Grid Infrastructure en lui même ne nécessite pas de licence.
Par ailleurs, cette configuration active/passive peut être utilisée sans licencier le deuxième serveur en utilisant la règle des 10 jours (voir Data Recovery using Clustered Environments (Failover)). Pour mémoire, cette règle donne le droit d’exécuter une base de données sur un serveur de secours sans licence, dans un environnement de type failover, pendant un total de 10 jours différents au cours de l’année. Il faut noter que la Standard Edition High Availability est soumise à la limitation du nombre de sockets (2 maximum) par serveur et non pas pour la totalité cluster.
Si vous avez plusieurs base de données à protéger, il peut être intéressant de licencier le deuxième serveur, de répartir les bases de données sur les deux serveurs, chaque serveur étant le secours de l’autre (configuration failover croisée).
[…] Nouveau (avril 2020) : Oracle a introduit une solution Standard Edition High Availability avec la version Oracle Database 19c, Release Update (RU) 19.7. Voir le post à ce sujet ici. […]
J’aimeJ’aime