{"id":582,"date":"2016-12-05T15:56:25","date_gmt":"2016-12-05T13:56:25","guid":{"rendered":"http:\/\/www.loicmathieu.fr\/wordpress\/?p=582"},"modified":"2016-12-29T11:46:29","modified_gmt":"2016-12-29T09:46:29","slug":"la-haute-dispo-et-le-driver-oracle-jdbc","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/la-haute-dispo-et-le-driver-oracle-jdbc\/","title":{"rendered":"La Haute Dispo et le driver Oracle JDBC"},"content":{"rendered":"<p>Voici une fonctionalit\u00e9 tr\u00e8s puissante et souvent mal connue du driver Oracle : son support puissant des URL de connexions.<\/p>\n<p>Classiquement, quand on veut de la haute disponibilti\u00e9 en Oracle, on utilise deux technologies :<\/p>\n<ul><li>Oracle RAC (Real Application Clusters) : clustering actif\/actif<\/li>\n\n<li>Oracle Dataguard : clustering actif\/passif avec possibilti\u00e9 d&rsquo;avoir le passif en actif read-only<\/li>\n<\/ul>\n<p>Je ne vais pas expliquer en d\u00e9tail ces technologies, car je ne suis pas sp\u00e9cialiste Oracle ni base de donn\u00e9es, mais, en tant que d\u00e9veloppeur, vous pr\u00e9senter comment configurer votre URL de connexion Oracle pour tirer partie de ces technologies. Je vais me baser sur une installation Dataguard classique en actif\/passif.<\/p>\n<h2>1. JDBC standard :<\/h2>\n<p>Une URL de connexion Oracle standard en JDBC est de la sorte :<\/p>\n<pre>jdbc:oracle:thin:username\/password@dbhost:dbport:instance<\/pre>\n<p>Le probl\u00e8me ici, est que le host et le port de la base de donn\u00e9es sont en dur dans l&rsquo;URL. Ce qui fait qu&rsquo;en cas de switch actif\/passif sur votre Dataguard, il faudra reconfigurer votre application et la red\u00e9marrer.<\/p>\n<p>Une solution \u00e0 \u00e7a, est l&rsquo;utilisation d&rsquo;un listener centralis\u00e9 (une base Oracle a un listener pour \u00e9ctouter les connexions, on peut utiliser un listener unique pour toutes les bases d&rsquo;une entreprise qui se situe sur un serveur d\u00e9di\u00e9 et dont le r\u00f4le ne sera que d&rsquo;\u00e9couter les connexions puis de faire le lien vers la base demand\u00e9 : c&rsquo;est le listener centralis\u00e9) sur lequel la base va s&rsquo;enregistrer et cel\u00e0 va permettre d&rsquo;abstraire le nom r\u00e9el de la machine ainsi que son port.<\/p>\n<h2>2. Listener centralis\u00e9 avec nom de service<\/h2>\n<pre>jdbc:oracle:thin:username\/password@listenerhost:port:@servicename<\/pre>\n<p><span style=\"amp;font-size: 13px\">Ici,\u00a0on ne connait plus le nom de la machine physique ni celui de l&rsquo;instance de BDD mais juste un nom de service que le listener va r\u00e9soudre en tant qu&rsquo;host:port:instance. Ce sera alors la responsabilit\u00e9 du DBA de switcher la base de donn\u00e9es au sein du listener en cas de bascule de Dataguard (ce qui est faisable en automatique).<\/span><\/p>\n<p><strong>3. Listener centralis\u00e9 en loadbalancing<\/strong><\/p>\n<p>Pour plus de haute dispo, le DBA peut installer deux listener centralis\u00e9s et faire du loadbalancing\/failover entre eux (via un HAProxy ou un F5 par exemple).<\/p>\n<p>Mais que faire quand on a deux datacenter \u00e9tanche sur lesquels on ne peut pas cr\u00e9er de loadbalancing &#8230; et voici la solution, l&rsquo;utiliation d&rsquo;une URL sp\u00e9cifique permettant de faire du <strong>loadbalancing client<\/strong> !<\/p>\n<h2>4. Laodbalancing client, setup multidatacenter<\/h2>\n<pre>jdbc:oracle:thin:@<strong>(description=(address_list=(address=(protocol=tcp)(port=<\/strong><strong>port1<\/strong>)\n(host=<strong>listenerhost1<\/strong>))(address=(protocol=tcp)(port=<strong>port2<\/strong>)(host=<strong>listenerhost2<\/strong>)))\n(connect_data=(SERVICE_NAME=<strong>servicename<\/strong>))(LOAD_BALANCE=<strong>ON<\/strong>)(FAILOVER=<strong>ON<\/strong>))<\/pre>\n<p>Beaucoup de chose dans cette URL :<\/p>\n<ul><li>On a une liste d&rsquo;addresse (address_list) pour pouvoir mettre plusieurs listener : ici <em>listenerhost1:port1<\/em> et <em>listenerhost2:port2<\/em><\/li>\n\n<li>On a le service de notre base de donn\u00e9es tel que connu par le listener : ici <em>servicename<\/em><\/li>\n\n<li>On a des options de haute disponibilit\u00e9 : LOAD_BALANCE=ON et FAILOVER=ON \u00a0qui permettent de faire du loadbalancing entre les deux listener et de faire du failover (une demande de connexion vers un listener qui ne fonctionne plus sera automatiquement r\u00e9-envoy\u00e9 vers un autre)<\/li>\n<\/ul>\n<p>On peut imaginer utiliser cette URL pour remplacer un loadbalancer serveur ( de type HAProxy ou F5) ou en compl\u00e9ment. Via cette URL on peut donc configurer notre application pour \u00eatre en haute dispo (multi-datacenter si n\u00e9cessaire) vers nos base de donn\u00e9es (via listener centralis\u00e9). En cas de crash, ce sera au DBA de basculer la dataguard et automatiquement notre application se connectera sur le nouveau actif.<\/p>\n<p>Pour plus d&rsquo;info, la doc du driver Oracle au sujet des URL JDBC : <a href=\"http:\/\/docs.oracle.com\/cd\/B19306_01\/java.102\/b14355\/jdbcthin.htm\" target=\"_blank\"><a href=\"http:\/\/docs.oracle.com\/cd\/B19306_01\/java.102\/b14355\/jdbcthin.htm\">http:\/\/docs.oracle.com\/cd\/B19306_01\/java.102\/b14355\/jdbcthin.htm<\/a><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Voici une fonctionalit\u00e9 tr\u00e8s puissante et souvent mal connue du driver Oracle : son support puissant des URL de connexions. Classiquement, quand on veut de la haute disponibilti\u00e9 en Oracle, on utilise deux technologies : Oracle RAC (Real Application Clusters) : clustering actif\/actif Oracle Dataguard : clustering actif\/passif avec possibilti\u00e9 d&rsquo;avoir le passif en actif read-only Je ne vais pas expliquer en d\u00e9tail ces technologies, car je ne suis pas sp\u00e9cialiste Oracle ni base de donn\u00e9es, mais, en tant que&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/la-haute-dispo-et-le-driver-oracle-jdbc\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[11,154,153],"class_list":["post-582","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-jdbc","tag-oracle"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":533,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/openesb-community-day-2011\/","url_meta":{"origin":582,"position":0},"title":"OpenESB Community Day 2011","author":"admin","date":"jeudi 24 mars 2011","format":false,"excerpt":"Le 03\/03\/2011 s'est d\u00e9roul\u00e9 \u00e0 Lille (exactement \u00e0 Polytech Lille \u00e0 Villeneuve d'Ascq) l'OpenESB Community Day. Une journ\u00e9e de conf\u00e9rence autour d'OpenESB centr\u00e9 sur la communaut\u00e9 de d\u00e9veloppeur et d'utilisateur. OpenESB est une impl\u00e9mentation Open Source d'un ESB (Enterprise Service Bus) d\u00e9velopp\u00e9 par Sun, qui a \u00e9t\u00e9 abandonn\u00e9 par Oracle\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1650,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/le-profiler-sql-de-visualvm\/","url_meta":{"origin":582,"position":1},"title":"Le profiler SQL de VisualVM","author":"admin","date":"mardi  4 avril 2023","format":false,"excerpt":"Il y a peu, j'ai d\u00e9couvert le profiler SQL de VisualVM et je me suis dit que je devais aussi vous le faire d\u00e9couvrir ;). VisualVM est un outil qui fournit une interface visuelle pour afficher des informations d\u00e9taill\u00e9es sur les applications qui s'ex\u00e9cutent sur une machine virtuelle Java (JVM).\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1672,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/","url_meta":{"origin":582,"position":2},"title":"Devoxx FR 2023 &#8211; Improving your skills with the Debugger par Bouke Nijuis","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Deuxi\u00e8me conf\u00e9rence \u00e0 laquelle j'assiste (et derni\u00e8re pour laquelle j'ai pris des notes), \u00e7a parle de l'utilisation du debugger. On va utiliser un programme simple de type Hello World. Apr\u00e8s un rapide rappel sur les bases de l'utilisation d'un debugger avec IntelliJ on entre dans le vif du sujet, les\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1005,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-et-testcontainers\/","url_meta":{"origin":582,"position":3},"title":"Quarkus et Testcontainers","author":"admin","date":"lundi 17 f\u00e9vrier 2020","format":false,"excerpt":"Si vous ne connaissait pas Quarkus, voici un article d'introduction : Zoom sur Quarkus. Quarkus offre un support des Tests Unitaires (TU) avec JUnit 5 via l'annotation @QuarkusTest, la documentation du support des TU de Quarkus peut \u00eatre trouv\u00e9 ici. Voici un exemple de TU tir\u00e9 du Quickstart Hibernate ORM\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/portee-des-blogs\/","url_meta":{"origin":582,"position":4},"title":"Port\u00e9e des blogs","author":"admin","date":"mardi  5 d\u00e9cembre 2006","format":false,"excerpt":"Je vient de lire plusieurs articles dans plusieurs journaux au sujet des blogs (petites parenth\u00e8ses ici, comme souvent dans la presse fran\u00e7aise, tout les journaux parlent de la m\u00eame chose en m\u00eame temps, m\u00eame quand ce sont des articles de fond d\u00e9tach\u00e9 de l'actualit\u00e9 ... bizarre). Les articles mettait en\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1330,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2021-ledition-9-3-4\/","url_meta":{"origin":582,"position":5},"title":"Devoxx France 2021 &#8211; l&rsquo;\u00e9dition 9 3\/4","author":"admin","date":"vendredi  1 octobre 2021","format":false,"excerpt":"Cette semaine, c'est Devoxx France. Et pour la premi\u00e8re fois depuis pas mal de temps, je sors de chez moi, et j'y vais ! Je vous \u00e9cris ces mots dans le train de retour de la deuxi\u00e8me journ\u00e9e, pas de troisi\u00e8me pour moi cette ann\u00e9e. J'ai assist\u00e9 \u00e0 quelques talks,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=582"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/582\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}