Configuration des transactions réparties à validation en deux phases avec Oracle RAC
Les configurations de Real Application Cluster (RAC) pour Oracle 10g rencontrent un problème inhérent au gestionnaire de transactions lorsqu'Oracle tente de récupérer les transactions réparties à validation en deux phases, qui s'étendent sur plusieurs noeuds Oracle RAC. Un problème peut se produire lorsqu'un noeud échoue et qu'Oracle ouvre les autres noeuds encore présents avant qu'Oracle RAC ne termine l'action de récupération nécessaire pour le noeud qui a échoué. La capacité du serveur d'applications à conserver l'affinité entre transactions vous permet de contourner ce problème.
Pourquoi et quand exécuter cette tâche
ORA- 24756: transaction does not exist
Si cette erreur survient, l'administrateur de la base de données Oracle devra sans doute résoudre manuellement la transaction en attente de validation en forçant un processus d'annulation ou de validation. Cependant, si vous ne souhaitez aucune intervention manuelle, vous devez parfois configurer une stratégie automatique et transparente pour la récupération de transaction.ORA-01591 lock held by in-doubt distributed transaction
Résultat : les parties de la base de données ne pourront pas être utilisées.Pour assurer une stratégie de récupération transparente, vous devez éviter qu'une transaction globale couvre plusieurs branches de transaction sur plusieurs noeuds RAC. Une branche de transaction correspond à une connexion de base de données qui est répertoriée dans une transaction globale. Si toutes les connexions d'une transaction de validation en deux phases globale provenaient du même noeud, aucun problème de récupération de transaction ne devrait survenir. Configurez un Oracle RAC avec le serveur d'applications pour éviter toute erreur avec les transactions en deux phases.
Le serveur d'applications conserve l'affinité entre les transactions des connexions entrantes, et vous pouvez profiter de cette fonctionnalité pour configurer la récupération automatique d'Oracle RAC avec les transactions de validation en deux phases. Si vous implémentez cette configuration, toutes les connexions d'un serveur d'applications seront reçues du même noeud Oracle et les connexions seront terminées sur ce même noeud. Cette configuration permet d'éviter les situations dans lesquelles les transactions couvrent plusieurs noeuds et vous n'aurez normalement aucun problème de récupération si un ou plusieurs noeuds Oracle sont en panne.
Procédure
Résultats
srvctl start service -d -s
Si un noeud RAC cesse de fonctionner, Oracle n'effectue aucune une reprise en ligne du service de traitement réparti des transactions tant que le nettoyage et la récupération d'Oracle RAC ne sont pas terminés. Même si les noeuds Oracle proviennent de la sauvegarde, le service de traitement réparti des transactions d'Oracle ne renvoie pas le noeud RAC qui vient d'être redémarré. A la place, vous devez déplacer manuellement le service sur le noeud RAC redémarré.Lorsque vous configurez le traitement réparti des transactions sur le service Oracle, vous avez transféré l'équilibrage de charge du fournisseur JDBC Oracle sur le serveur d'applications. La charge de travail est distribuée par le serveur d'applications au lieu d'Oracle, ce qui explique pourquoi vous avez créé des services qui n'implémentent pas l'équilibrage de charge et qui utilisent uniquement un noeud principal. Cette configuration permet d'éviter les situations dans lesquelles les processus de transaction couvrent plusieurs noeuds RAC et de réduire les problèmes de récupération qui peuvent survenir lorsqu'un ou plusieurs noeuds échouent.