Rechercher sur arkzoyd.com

30 mars 2011

NOT EXISTS, NOT IN ou OUTER JOIN, on s'en fout !

Au fil des années, je tente d'expliquer que les versions modernes d'Oracle arrivent à trouver des plans identiques pour des requêtes sémantiquement identiques... Vaste sujet que la sémantique surtout si vous considérez les valeurs NULL ou les valeurs distinctes ; enfin, pitié : arrêtez de me dire qu'il vaut mieux écrire NOT EXISTS qu'une jointure externe ; ou, comme aujourd'hui que NOT IN est moins rapide que NOT EXISTS.

L'exemple qui suit illustre, en reprenant l'exemple de mon époque Pythian, qu'Oracle est bien capable de prendre le même plan quelque soit la syntaxe :
  • NOT IN
  • NOT EXISTS
  • OUTER JOIN
Evidemment les 3 requêtes ci-dessous ont le même sens, notamment du fait que les valeurs NULL sont interdites dans les 2 tables.

27 mars 2011

Calculer la mensualité d'un prêt avec OpenOffice.org et "Seek Goal..."

Je ne suis pas un grand fan des outils de bureautique. Alors quand, j'y trouve une fonction sympa, certes sous la contrainte, pourquoi ne pas la mettre en avant ? C'est le cas avec la fonction "Seek Goal..." ou, en français, "Recherche d'une valeur cible..." située dans le menu outil d'OpenOffice, la suite sponsorisée par Oracle.

Cet article présente l'utilisation de cette capacité pour calculer la mensualité d'un prêt en fonction d'un montant et d'un taux d'intérêt.

26 mars 2011

Oracle laisse tomber Itanium... y compris sur HP-UX

Ca a fait le buzz toute la semaine de manière assez subtile et relayé par des médias grossièrement manipulés qui se laissent faire : "Oracle arrête tous ses nouveaux développement sur Itanium". Cela inclut Linux mais également HP-UX ou OpenVMS. La liste détaillée des versions non supportées est disponible sur le site Oracle. Elle inclut Oracle 12g ou MySQL 5.6.

Cet évènement a un petit précédent puisque depuis le 1er décembre dernier tous les processeurs Itanium ont changé de facteur de core dans les règles de licences Oracle, passant de 0,5 à 1. Vous trouverez ci-dessous un petit résumé de l'histoire et quelques réflexions sur la suite à donner à cette nouvelle...

19 mars 2011

Oracle Java Stored Procedure et JDBC en 5'

Pour accéder aux tables Oracle depuis une classe java stockée dans la base de données, il suffit d'utiliser JDBC et le driver KPRB qui n'est autre que le driver JDBC du serveur. Vous trouverez ci-dessous un exemple très simple d'utilisation de JDBC dans une procédure stockée en Java. Comme vous pourrez le voir, il ne faut pas plus de 5'.

Avant de commencer, il faut noter un certain nombre de choses :
  • d'abord pour transformer une classe Java en Java Store Procedure, il suffit de la charger et de créer un "wrapper" pour y accéder. Ce "wrapper" ne peut se connecter qu'à une méthode statique ce qui parait assez logique si vous avez déjà lancé du Java depuis un autre langage. Bien sur cette méthode peut elle-même instancier des classes... 
  • d'autre part, le driver JDBC interne au serveur donne accès à la session courant ; il est donc inutile d'utiliser un pool de connexions ou de fermer la connexion JDBC même si la méthode close() ne termine pas la session courante
Mais commençons...

18 mars 2011

Utiliser des files d'attente JMS sur AQ en PL/SQL

Pour des raisons évidentes, JMS a pris une part prépondérante dans de nombreuses architectures Java et Java EE. Par ailleurs, Oracle Advanced Queuing (AQ ou Streams AQ) est un support possible pour les messages accédés en JMS. AQ apporte des alternatives intéressantes en terme de gestion des transactions, de haute disponibilité, de supervision, de possibilité de montée en charge ou, dans certains contexte où Oracle est déjà acheté, de coût. Mais ce type de considération est stérile... Pourquoi utiliser AQ plutôt que Apache ActiveMQ, les fournisseurs JMS des serveurs d'applications Java EE comme Glassfish ou Weblogic ou les dinosaures comme (Websphere)MQ(Series) ?

De fait, Streams AQ constitue un pont idéal et transactionnel entre, d'un côté, le langage de référence des bases de données Oracle (le PL/SQL) et, via Java et JMS, l'immense majorité des plateformes modernes d'intégration : les Architectures Orientées Service (SOA), les bus de Services d'Entreprise (ESB) ou les Architectures Orientées Evènements (EDA). En mixant PL/SQL et JMS, on peut donc facilement intégrer les fonctionnalités avancées de la base Oracle à ces plateformes ou, tout simplement, aux serveurs d'applications Java EE.

Cet article illustre, avec 2 programmes simples, comment utiliser AQ/JMS pour échanger des messages entre PL/SQL, d'un côté, et, de l'autre, Java.

16 mars 2011

Ecrire dans les fichiers log Oracle

Ecrire dans les différents logs Oracle est une de ces idées qui peut sembler géniale à priori et s'avère source d'ennuis dans l'immense majorité des cas. N'utilisez pas les packages ci-dessous... et surtout pas dans le but d'effrayer vos collègues. N'oubliez pas que le stress est source d'erreur.

Quel est le coût de la JVM dans Oracle 11g ?

Oracle 11g a introduit le JIT compiler pour JServer. Celui-ci remplace la compilation statique avec ncomp de la 10g et transforme les classes Java chargées dans la base Oracle en code natif de manière transparente, selective et optimale... Oublions les aspects "selectif et optimal" pour l'instant et faisons confiance à Oracle pour cela (quoique !). Pour l'aspect transparent, l'exemple ci-dessous le démontre assez bien.

Cela étant, c'est un peu loin de ma préoccupation de départ qui consistait à évaluer le coût d'un appel Java dans la base Oracle et de le comparer à la fois à un appel Java depuis une JVM classique ou un appel PL/SQL. Mais j'y viens...

10 mars 2011

Installer XWiki sur Glassfish 3.1

C'est le buzz du moment : Glassfish 3.1 est disponible ! La plateforme était attendue depuis un petit moment déjà - au moins je l'attendais avec impatience ! Il apporte de nombreuses fonctionnalités parmi lesquelles la gestion en cluster et la fourniture de toute une palette d'outils et de services basés sur OSGi.

Malheureusement, il me faudra plusieurs mois pour comprendre et bénéficier l'ensemble des possibilités. Néanmoins, il me coûter de ne pas mettre en oeuvre cette nouvelle version dès que possible; c'est chose faite avec l'installation de XWiki sur la plateforme de référence de Java EE 6. Cet article reprend les étapes nécessaires à cette installation qui ne diffère pas vraiment de la documentation à ce sujet. Il semble que je sois vraiment à cours de sujets.