Code pour la disponibilité continue

Vos applications offrent une disponibilité continue lorsque la maintenance planifiée, les interruptions non planifiées et les déséquilibres de charge de la base de données sont cachés. Une combinaison de meilleures pratiques, d'une configuration simple et d'Oracle Autonomous Database garantit la disponibilité continue de vos applications.

La meilleure approche pour masquer les activités de maintenance planifiées consiste à drainer de manière transparente les tâches de chaque emplacement de charge de travail de base de données avant la fenêtre de maintenance de cet emplacement. Les réserves de connexions et les niveaux intermédiaires d'Oracle, y compris le serveur WebLogic, Oracle Universal Connection Pool (UCP), le groupe de sessions OCI et le fournisseur non géré ODP.NET, prennent en charge l'avis rapide des applications. Par conséquent, ils sont avisés avant que les services de base de données ne soient programmés pour être déplacés, afin de permettre un drainage transparent des tâches avant la maintenance. L'avis rapide des applications déclenche automatiquement la fermeture des connexions inactives et l'ouverture de nouvelles connexions dans le nouvel emplacement des services. Un délai peut être configuré pour permettre aux tâches actives de se terminer dans l'emplacement sur le point d'être arrêté. Les principaux niveaux intermédiaires JDBC de tierce partie, tels qu'IBM WebSphere, présentent le même comportement lorsqu'ils sont configurés avec UCP. Pour les applications basées sur JDBC qui ne peuvent pas utiliser UCP, Oracle fournit des solutions tirant parti des pilotes Oracle et des tests de connexion.

Pour masquer les pannes non planifiées résultant d'un échec de composant ou de communication, Oracle fournit les fonctions suivantes :

  • Notification. L'avis rapide des applications est la première étape pour masquer les pannes. Il informe les clients et les dissocie de l'attente réseau en cours lorsqu'une panne se produit. Cela évite de bloquer les applications pendant les attentes prolongées. Il est important de noter que l'avis rapide des applications appelle également le rééquilibrage des sessions lorsque les services sont à nouveau disponibles.

  • Récupération. Une fois le client avisé, la continuité transparente des applications ou la continuité des applications rétablit une connexion à un nouvel emplacement de charge de travail (une autre instance de base de données dans la configuration RAC exécutant la base de données) et réexécute les tâches en cours (non validées), si possible. Grâce à la réexécution des tâches en cours dans le nouvel emplacement, l'application peut généralement continuer à s'exécuter sans être affectée par la défaillance.

La continuité transparente des applications ou la continuité des applications s'exécute également pendant la maintenance planifiée pour les sessions qui n'effectuent pas de drainage (terminent l'opération de base de données courante) pendant l'intervalle de drainage alloué.

Liste de vérification de la configuration de l'application

La disponibilité continue de votre application repose sur les principes suivants :

Conseil :

Voir Disponibilité continue pour les applications dans le document technique ATP-Direct pour connaître les meilleures pratiques de mise en oeuvre de la disponibilité continue pour les applications utilisant une base de données Autonomous Database.

Utiliser les services de base de données pour la connexion

Les services de base de données offrent la transparence pour l'infrastructure sous-jacente : l'avis rapide des applications, les données de connexion, la continuité transparente des applications, la continuité des applications, la permutation, les groupes de consommateurs et de nombreuses autres fonctionnalités et opérations sont fondées sur l'utilisation des services.

Autonomous Database sur une infrastructure Exadata dédiée offre plusieurs paires de services de base de données prédéfinis disponibles, comme décrit dans Nom des services de base de données prédéfinis pour les bases de données autonomes. Toutes fournissent la fonction d'avis rapide des applications et le drainage, et la continuité transparente des applications est activée par défaut pour les deux paires consacrées au traitement des transactions. Une API est disponible pour modifier les paramètres de continuité transparente des applications ou de continuité des applications pour tous les services prédéfinis (voir Activer les attributs de service pour le basculement).

Configurer la chaîne de connexion pour la haute disponibilité

Oracle recommande d'utiliser la configuration de la chaîne de connexion indiquée ci-dessous lors de la connexion à Oracle Autonomous Database. Les chaînes de connexion intégrées dans le fichier tnsnames.ora fourni par Oracle sont configurées de cette façon. N'utilisez pas Easy Connect Naming sur le client car ces connexions n'offrent pas la fonctionnalité de haute disponibilité.

Utilisez ce nom de service TNS pour tous les clients Oracle version 12.2 ou ultérieure :

alias = 
(DESCRIPTION =
(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
 (ADDRESS_LIST =
   (LOAD_BALANCE=on)
   (ADDRESS = (PROTOCOL = TCP)(HOST=scan-host)(PORT=1521)))
 (CONNECT_DATA=(SERVICE_NAME = service-name)))

Utilisez ce qui suit pour les connexions JDBC à l'aide du pilote Oracle version 12.1 ou antérieure

alias =
(DESCRIPTION =
(CONNECT_TIMEOUT= 15)(RETRY_COUNT=20)(RETRY_DELAY=3)
(ADDRESS_LIST =
  (LOAD_BALANCE=on)
  (ADDRESS = (PROTOCOL = TCP)(HOST=scan-host)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = service-name)))

Utiliser l'avis rapide des applications

L'avis rapide des applications fournit un avis immédiat à une application en cas de panne ou de reprise de service. Sans cette fonction, les applications peuvent rester en situation de temporisation TCP/IP après des défaillances matérielles et de réseau, et omettre d'effectuer un rééquilibrage lorsque les ressources reprennent. Tous les groupes Oracle et les serveurs d'applications Oracle utilisent l'avis rapide des applications. Les serveurs d'applications JAVA de tierce partie utiliser UCP pour activer l'avis rapide des applications.

Aucune modification d'application n'est requise pour utiliser FAN. Il s'agit uniquement de modifications de configuration.

Pour un service continu pendant la maintenance planifiée, utilisez l'avis rapide des applications avec :

  • Des groupes Oracle ou
  • UCP avec des serveurs d'applications JDBC de tierce partie ou
  • Les derniers pilotes de client Oracle

Pour un service continu pendant les pannes non planifiées, utilisez l'avis rapide des applications avec :

  • La continuité transparente des applications ou
  • La continuité des applications

Couverture de l'avis rapide des applications

Les événements d'avis rapide des applications sont intégrés avec les éléments suivants :

  • Oracle Fusion Middleware et Oracle WebLogic Server
  • Oracle Data Guard Broker
  • Oracle JDBC Universal Connection Pool ou pilote pour JDBC léger et l'interface d'appel Oracle
  • Réserve de connexions ODP.NET pour fournisseurs non gérés et gérés
  • Oracle Tuxedo
  • SQL*Plus
  • Pilotes Oracle Database pour des langages tels que Python, Node.js et PHP
  • Global Data Services
  • Serveurs d'applications JDBC de tierce partie utilisant Oracle JDBC Universal Connection Pool
  • Modérateurs

Pour activer l'avis rapide des applications sur le client

Utilisez l'alias TNS indiqué dans Configurer la chaîne de connexion pour la haute disponibilité. Cette chaîne de connexion est utilisée pour configurer automatiquement l'abonnement au service d'avis Oracle sur le client pour la réception d'avis rapide des applications lors de l'utilisation d'un pilote client Oracle Database 12c ou ultérieur. Le service d'avis fournit un chemin de communication sécurisé entre le niveau de la base de données et le niveau du client, ce qui permet au client d'être informé de la disponibilité des services (arrêt ou démarrage des composants) et de bénéficier de conseils d'équilibrage de la charge lors de l'exécution pour une répartition optimale des tâches pendant le fonctionnement normal.

En fonction du client, activez l'avis rapide des applications dans les propriétés de configuration de l'application comme suit :

  • Oracle Universal Connection Pool ou pilote léger JDBC (à partir de 12.2)

    Définissez la propriété FastConnectionFailoverEnabled.

  • WebLogic Active GridLink pour Oracle

    Les fonctions RAC FAN et Fast Connection Failover sont activées par défaut.

  • Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), applications JDBC

    Utilisez Oracle Universal Connection Pool en remplacement de la réserve de connexions.

  • Clients ODP.Net (fournisseurs gérés et non gérés)

    Définissez "HA events = true;pooling=true" dans la chaîne de connexion si vous utilisez ODP.Net 12.1 ou une version antérieure.

  • Clients OCI et pilotes basés sur OCI

    Les clients OCI sans paramètres natifs peuvent utiliser un fichier oraacces.xml et régler events à true.

    Python, Node.js et PHP ont des options natives. Dans Python et Node.js, vous pouvez définir un mode d'événements lors de la création d'une réserve de connexions. Dans PHP, modifiez php.ini et ajoutez l'entrée oci8.events=on.

  • SQL*Plus

    L'avis rapide des applications est activé par défaut.

Les services de base de données prédéfinis offrent des connexions TCPS qui utilisent l'authentification basée sur un portefeuille TLS. Selon le type d'application (JDBC ou interface d'appel Oracle), la configuration du portefeuille doit respecter des règles particulières, comme décrit dans la section Configurer les clients pour l'avis rapide des applications, y compris les portefeuilles facultatifs.

Utiliser les pratiques recommandées pour activer le drainage

La meilleure pratique pour l'utilisation des applications consiste à extraire les connexions pendant le temps nécessaire, puis à les replacer dans la réserve lorsque l'action courante est terminée. Cette approche permet d'obtenir une performance optimale, pour le rééquilibrage des tâches lors de l'exécution et pour le drainage des tâches pendant les fenêtres de maintenance.

Oracle recommande d'utiliser une réserve de connexions Oracle compatible avec l'avis rapide des applications pour masquer la maintenance planifiée. Les utilisateurs ne subissent aucun impact lorsque votre application utilise une réserve Oracle avec l'avis rapide des applications et qu'elle renvoie les connexions dans la réserve entre les demandes. Il n'est pas nécessaire d'apporter des modifications à l'application pour utiliser la fonction d'avis rapide des applications. Lorsqu'une réserve de connexions Oracle reçoit l'événement correspondant à un temps d'arrêt planifié, elle marque toutes les connexions de l'instance comme devant être drainées. Immédiatement, les connexions archivées sont fermées de sorte qu'elles ne soient pas réutilisées. Comme les connexions en cours d'utilisation sont renvoyées dans la réserve, elles sont fermées. Cela permet de fermer toutes les connexions correctement de manière progressive.

Si vous utilisez un serveur d'applications de tierce partie basé sur Java, la méthode la plus efficace pour effectuer le drainage et le basculement consiste à remplacer la source de données avec réserve de connexions par UCP. De nombreux serveurs d'applications prennent en charge cette approche, notamment Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), Spring, Hibernate, etc. Les documents techniques d'Oracle et d'autres fournisseurs, tels qu'IBM, décrivent comment utiliser UCP avec ces serveurs d'applications. L'utilisation d'UCP comme source de données permet d'utiliser des fonctions UCP telles que Fast Connection Failover, l'équilibrage de charge lors de l'exécution, la continuité des applications et la continuité transparente des applications avec une certification complète.

Activer la continuité transparente des applications ou la continuité des applications

La continuité transparente des applications assure le suivi et l'enregistrement de l'état des sessions et des transactions afin qu'une session de base de données puisse être récupérée après une panne récupérable. Elle est activée par défaut pour les deux paires de services de base de données prédéfinis consacrés au traitement des transactions.

La continuité des applications est personnalisable, ce qui vous permet de réexécuter les effets secondaires ou d'ajouter des rappels complexes lors du basculement non pris en charge par la continuité transparente. Utilisez la continuité des applications si vous utilisez des pilotes Oracle 12c (pilote léger JDBC ou interface d'appel Oracle), si vous souhaitez effectuer une personnalisation avec des effets secondaires ou des rappels, ou si votre application utilise des états de session (tables temporaires de durée de session) et ne nettoie pas entre les demandes.

Étapes d'utilisation de la continuité transparente des applications

  • Si vous devez activer la continuité transparente des applications dans le service de base de données que vous utilisez, voir Activer les attributs de service pour le basculement.

  • Utilisez l'un des clients pris en charge ci-dessous.

    Oracle recommande vivement d'utiliser les derniers pilotes de client. Les pilotes de client d'Oracle Database 19c et versions ultérieures fournissent une prise en charge complète de la continuité transparente des applications.

    • Oracle JDBC Replay Driver 18c ou version ultérieure. Il s'agit d'un pilote JDBC fourni avec Oracle Database 18c pour la continuité des applications.
    • Oracle Universal Connection Pool (UCP) 18c ou version ultérieure avec Oracle JDBC Replay Driver 18c ou version ultérieure.
    • Oracle WebLogic Server Active GridLink ou serveurs d'applications JDBC de tierce partie utilisant UCP avec Oracle JDBC Replay Driver 18c ou version ultérieure.
    • Réserves de connexions Java ou applications Java autonomes utilisant Oracle JDBC Replay Driver 18c ou version ultérieure.
    • Oracle Call Interface Session Pool 19c ou version ultérieure.
    • SQL*Plus 19c (19.3) ou version ultérieure.
    • Pilote ODP.NET non géré, avec réserves de connexions, version 18c ou ultérieure (par défaut, "Pooling=true" dans les versions 12.2 et ultérieures).
    • Applications basées sur l'interface d'appel Oracle utilisant un pilote OCI version 19c ou ultérieure.
  • Replacez les connexions dans la réserve de connexions.

    Il n'est pas nécessaire d'apporter des modifications à votre application pour identifier les limites des demandes si l'application utilise des connexions issues :

    • De réserves de connexions Oracle
    • Du pilote Oracle JDBC Replay version 18c ou ultérieure
    • D'applications basées sur l'interface d'appel Oracle utilisant 19c ou une version ultérieure

    Lorsque vous utilisez des réserves de connexions, l'application doit replacer la connexion dans la réserver à la fin de chaque demande. Oracle recommande qu'une application n'extraie une connexion que pour la durée nécessaire. Garder une connexion sans l'utiliser n'est pas une pratique recommandée. La continuité transparente des applications utilisée avec les pilotes répertoriés détecte également où des limites peuvent être ajoutées et définit ses propres limites.

  • Utilisez FAILOVER_RESTORE

    L'activation de la continuité transparente des applications restaure automatiquement les états de session prédéfinis. Si vous avez besoin d'états de session prédéfinis en plus du jeu standard, vous pouvez enregistrer un rappel ou une étiquette UCP pour restaurer ces états. Si vous avez besoin d'états de session complexes (tables temporaires ou SYS_CONTEXT, restauré), utilisez la continuité des applications qui offre cette flexibilité.

  • Activer l'utilisation des fonctions mutables dans l'application

    Les fonctions mutables sont des fonctions qui peuvent retourner une nouvelle valeur à chaque exécution. La prise en charge du maintien des résultats initiaux est fournie pour SYSDATE, SYSTIMESTAMP, SYS_GUID et sequence.NEXTVAL. La continuité des applications pour les versions 19c et ultérieures maintient (KEEP) automatiquement les fonctions mutables pour SQL. Si votre application utilise des fonctions mutables ou y est sensible, un administrateur de base de données doit accorder le privilège GRANT KEEP. Lorsque le privilège KEEP est octroyé, la réexécution applique le résultat initial de la fonction lors de la réexécution. Par exemple :

    SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
    SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
  • Effets secondaires désactivés

    Un effet secondaire est une action externe telle que l'envoi de courrier, le transfert de fichiers ou l'utilisation de TCP. La continuité transparente des applications détecte les effets secondaires et ne les réexécute pas. Si vous souhaitez que les effets secondaires soient réexécutés, utilisez la continuité des applications, qui offre cette flexibilité supplémentaire.

Étapes d'utilisation de la continuité des applications

  • Si vous devez activer la continuité des applications dans le service de base de données que vous utilisez, voir Activer les attributs de service pour le basculement.

  • Utilisez l'un des clients pris en charge ci-dessous.

    • Oracle JDBC Replay Driver 12c ou version ultérieure. Il s'agit d'un pilote JDBC fourni avec Oracle Database 12c pour la continuité des applications.
    • Oracle Universal Connection Pool (UCP) 12c ou version ultérieure avec Oracle JDBC Replay Driver 12c ou version ultérieure.
    • Oracle WebLogic Server Active GridLink et serveurs d'applications JDBC de tierce partie utilisant UCP avec Oracle JDBC Replay Driver 12c ou version ultérieure.
    • Réserves de connexions Java ou applications Java autonomes utilisant Oracle JDBC Replay Driver 12c ou version ultérieure avec des limites de demandes ou une source de données avec réserves de connexions.
    • Applications et pilotes de langage utilisant Oracle Call Interface Session Pool 12c version 2 ou ultérieure.
    • SQL*Plus 19.3 ou version ultérieure.
    • Pilote ODP.NET non géré, avec réserves de connexions, version 12c ou ultérieure (par défaut, "Pooling=true";"Application Continuity=true" dans les versions 12.2 et ultérieures).
  • Replacez les connexions dans la réserve de connexions.

    Il n'est pas nécessaire d'apporter des modifications à votre application pour identifier les limites des demandes si l'application utilise une réserve de connexions Oracle ou une réserve JDBC tierce qui prend en charge les limites des demandes. Il est recommandé d'utiliser une réserve Oracle et de replacer les connexions dans cette réserve entre les demandes. Oracle recommande qu'une application n'extraie une connexion que pour la durée nécessaire. Garder une connexion sans l'utiliser n'est pas une pratique recommandée car elle empêche la maintenance planifiée transparente.

  • Utilisez FAILOVER_RESTORE

    La plupart des états courants sont restaurés automatiquement avec FAILOVER_RESTORE=LEVEL1. Si votre application prédéfinit des états de session en plus du jeu standard, vous pouvez enregistrer un rappel ou une étiquette UCP pour restaurer ces états. Définissez FAILOVER_RESTORE=LEVEL1 pour le service et utilisez :

    • Le rappel d'initialisation de connexion pour Java ou l'ancien rappel basculement transparent des applications pour l'interface d'appel Oracle ou
    • La réserve de connexions universelle ou l'étiquetage des connexions au serveur WebLogic
  • Activer l'utilisation des fonctions mutables dans l'application

    Les fonctions mutables sont des fonctions qui peuvent retourner une nouvelle valeur à chaque exécution. La prise en charge du maintien des résultats initiaux est fournie pour SYSDATE, SYSTIMESTAMP, SYS_GUID et sequence.NEXTVAL. La continuité des applications pour les versions 19c et ultérieures maintient (KEEP) automatiquement les fonctions mutables pour SQL. Aucune action n'est donc requise. Si vous avez besoin de fonctions mutables pour PL/SQL, un administrateur de base de données doit accorder le privilège GRANT KEEP. Lorsque le privilège KEEP est octroyé, la réexécution applique le résultat initial de la fonction lors de la réexécution. Par exemple :

    SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
    SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
  • Décidez si vous souhaitez réexécuter les effets secondaires

    Un effet secondaire est une action externe telle que l'envoi de courrier, le transfert de fichiers ou l'utilisation de TCP. Avec la continuité des applications, les effets secondaires sont réexécutés, sauf indication contraire de l'application. Si une demande comporte une action externe qui ne doit pas être réexécutée, elle peut utiliser une connexion pour laquelle la continuité des applications n'est pas activée ou la réexécution peut être désactivée pour cette demande à l'aide de l'API disableReplay() pour Java ou OCIRequestDisableReplay() pour l'interface d'appel Oracle. Si vous ne souhaitez réexécuter aucun effet secondaire, utilisez la continuité transparente des applications.