{"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\/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&#8217;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&#8217;URL. Ce qui fait qu&#8217;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&#8217;utilisation d&#8217;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&#8217;une entreprise qui se situe sur un serveur d\u00e9di\u00e9 et dont le r\u00f4le ne sera que d&#8217;\u00e9couter les connexions puis de faire le lien vers la base demand\u00e9 : c&#8217;est le listener centralis\u00e9) sur lequel la base va s&#8217;enregistrer et cel\u00e0 va permettre d&#8217;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&#8217;instance de BDD mais juste un nom de service que le listener va r\u00e9soudre en tant qu&#8217;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&#8217;utiliation d&#8217;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&#8217;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&#8217;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&#8217;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\/informatique\/la-haute-dispo-et-le-driver-oracle-jdbc\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_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},"jetpack_post_was_ever_published":false},"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\/informatique\/openesb-community-day-2011\/","url_meta":{"origin":582,"position":0},"title":"OpenESB Community Day 2011","author":"admin","date":"Thursday March 24th, 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":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1650,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/le-profiler-sql-de-visualvm\/","url_meta":{"origin":582,"position":1},"title":"VisualVM SQL profiler SQL","author":"admin","date":"Tuesday April  4th, 2023","format":false,"excerpt":"A little while ago, I discovered the SQL profiler of VisualVM and I thought I should share it with you ;). VisualVM is a tool that provides a visual interface to display detailed information about applications running on a Java Virtual Machine (JVM). VisualVM is designed for use in development\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/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\/informatique\/devoxx-fr-2023-improving-your-skills-with-the-debugger-par-bouke-nijuis\/","url_meta":{"origin":582,"position":2},"title":"(Fran\u00e7ais) Devoxx FR 2023 &#8211; Improving your skills with the Debugger par Bouke Nijuis","author":"admin","date":"Friday April 14th, 2023","format":false,"excerpt":"Sorry, this entry is only available in Fran\u00e7ais.","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1005,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/quarkus-et-testcontainers\/","url_meta":{"origin":582,"position":3},"title":"Quarkus and Testcontainers","author":"admin","date":"Monday February 17th, 2020","format":false,"excerpt":"If you did not know Quarkus, here is an introductory article: Zoom sur Quarkus (french). Quarkus offers Unit Test (TU) support with JUnit 5 via the @QuarkusTest annotation, documentation for Quarkus TU support can be found here. Here is an example of a TU from the Hibernate ORM Quickstart :\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/portee-des-blogs\/","url_meta":{"origin":582,"position":4},"title":"Port\u00e9e des blogs","author":"admin","date":"Tuesday December  5th, 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":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1330,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/devoxx-france-2021-ledition-9-3-4\/","url_meta":{"origin":582,"position":5},"title":"(Fran\u00e7ais) Devoxx France 2021 &#8211; l&#8217;\u00e9dition 9 3\/4","author":"admin","date":"Friday October  1st, 2021","format":false,"excerpt":"Sorry, this entry is only available in Fran\u00e7ais.","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/comments?post=582"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/582\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/media?parent=582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/categories?post=582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/tags?post=582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}