Rechercher sur arkzoyd.com

30 avril 2011

Verrouille toi à mort moi-même

J'ai rencontré une situation assez unique (quoique!) dans laquelle un programme arrive à générer un deadlock Oracle avec une seule session. Voici l'extrait de la trace du process incriminé :
*** 2011-04-30 07:34:18.590
DEADLOCK DETECTED ( ORA-00060 )

[Transaction Deadlock]

The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:

Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-00070021-0000022c        33     154     X             33     154           S

session 154: DID 0001-0021-00000011     session 154: DID 0001-0021-00000011

Rows waited on:
  Session 154: no row
Remarquez qu'avec tout ce qui m'arrive en ce moment, c'est un vrai bonheur de constater qu'Oracle s'en sort sans une égratignure. Je vais vous expliquer le fin mot de l'histoire...

29 avril 2011

Gérer un Error Handler et un DML Handler simultanément dans Streams

Un processus d'apply Streams ne peut contenir qu'un seul handler par table/type de commande. "DML apply" ou "Error", il faut donc choisir !

Seulement voilà, il se peut que vous vouliez à la fois gérer un DML et un Error Handler simultanément. Comment faire alors ? C'est la question qu'explore l'article ci-dessous ; vous y trouverez comment utiliser les 2 types de handlers et comment les combiner ; vous verrez également comment réaliser les tests associés :

28 avril 2011

Auditez les options utilisées sur vos bases de données

La conformité aux contrats de licences est un enjeu important pour les entreprises et fait généralement partie des responsabilités des DBA. Les risques encourus peuvent aller jusqu'à plusieurs centaines de milliers d'euros si, par exemple, vous utilisez des options ou des éditions auxquelles vous n'avez pas droit. Depuis Oracle 10g, la vue DBA_FEATURE_USAGE_STATISTICS peut vous aider à déterminer ce que vous utilisez. Evidemment, ce n'est pas parfait ; on peut observer quelques dysfonctionnements notamment avec Active Data Guard.

Si vous êtes du genre à vous reposer sur le travail des autres comme moi, sachez qu'Oracle offre des rapports pré-construits

Blogs, rapports et SQL*Plus

Si vous écrivez des articles sur un blog ou des rapports dans lesquels vous copiez les sorties SQL texte de SQL*Plus que vous affichez avec des polices non proportionnelles, vous avez sans doute parfois des problèmes. La faute à l'équivalence entre les tabulations et les espaces qui peut dépendre d'un logiciel à l'autre quand elle n'est pas paramètrable...

Après 15 ans d'Oracle, je viens de trouver la solution avec la commande SQL*Plus suivante ; on passe tout en espace :
set tab off
Comme quoi, il n'y a pas d'age pour apprendre des trucs qui sont du B.A-BA ; et voilà, c'est dans le fichier glogin.sql du répertoire $ORACLE_HOME/sqlplus/admin

Contraintes référentielles, plans d'exécution et clause RELY

Les contraintes référentielles assurent la cohérence des données. Si le bénéfice est évident pour prévenir des erreurs des applications, les développeurs ont beau jeu d'expliquer, aujourd'hui, que ce n'est pas un problème pour eux ; la logique métier assure cette cohérence de manière bien plus riche encore...

Et pourtant, les plans d'exécution et donc les performances sont impactées par les contraintes, y compris les contraintes référentielles. Vous fournissez des informations à Oracle sur les relations qui existent entre les données, il en tire parti. Il en paie également le prix s'il doit valider cette cohérence...

Cet article illustre ces points à travers un exemple simple dans la perspective des systèmes transactionnels. Il montre également comment éviter qu'Oracle paie le prix de la validation avec la clause RELY DISABLE. Vous découvrirez enfin qu'un produit cartésien peut parfois avoir un coût de 0 ; étonnant ?
Dans le contexte des systèmes décisionnels, les perspectives sont très différentes. L'article précédent intitulé Mon petit Data Mart (Partie 4) : Clés étrangères et Query Rewrite discutait déjà de ce sujet avec un exemple mettant en oeuvre une vue matérialisée. Cela étant, la nature des développements est très différente. La logique objet et la modèlisation des systèmes transactionnels également.

25 avril 2011

Schéma LDAP Oracle, alias TNS et Novell eDirectory

Le schéma fournit par Oracle avec Oracle Virtual Directory 11.1.1.4 ne permet pas de stocker les alias TNS dans l'annuaire de Novell. La faute au fichier eDirSchema.ldif qui en plus de contenir des erreurs de syntaxe est incomplet quant aux classes qui peuvent contenir orclNetService, orclNetDescription, orclNetAddressList et orclNetAddress.

Pour corriger ce problème et vous permettre de stocker vos alias TNS avec vos utilisateurs d'Entreprise via EUS, j'ai créé un fichier LDIF qui contient les clauses X-NDS_CONTAINMENT compatibles avec vos besoins. Certaines fonctionnalités pourraient encore être limitées mais au moins ça fonctionne...

23 avril 2011

Quoi de neuf à propos d'Oracle et d'Amazon EC2 ?

Oracle et Amazon ont fait "le buzz" à propos d'EC2 et de la base de données leader du marché, la semaine dernière. Jean-Philippe se délecte évidemment et ne manque pas de le souligner sur son blog en référençant notamment l'article de International Business Times.

Mais qu'est-ce qui a changé ? Et bien, en fait et concrètement, rien pour l'instant... sinon une annonce sur le site d'Amazon que quelquechose sera disponible pendant le second trimestre 2011... Et tout tient dans 1 paragraphes qu'on peut réduire encore à ça :
Oracle Database 11g available via the Amazon Relational Database Service (Amazon RDS) [...] you’ll be able to take advantage of on-demand hourly licensing with no upfront fees or long-term commitments.
Ou, en 7 mots et en français, "Payez vos licences Oracle à l'heure !". Bon, il y en a surement 1 ou 2 qui diront que c'est déjà possible à 19 950 USD/Processeur pour la 1ère heure. Il n'empêche que, par exemple pour des tirs de performances, ça sera peut-être ultra-intéressant (ou pas, on verra !).

Installer Glassfish en mode silencieux

Installer Glassfish en mode silencieux est d'une simplicité enfantine. La procédure décrite dans la documentation permet de faciliter vos déploiements "en masse", sur des serveurs distants ou sur lesquels, ça arrive, les bibliothèques clientes X ne sont pas installées ; dans cet article, vous trouverez une illustration de la mise en oeuvre de cette installation, juste pour démystifier.

Puisque je reprends ma liberté, voici au passage une petite citation bienvenue que m'a fait un copain à moitié anglais qui est plutôt un caviar (la citation aussi mais je parle bien du copain !!!) :
If you pay peanuts, you get monkeys
Mais revenons au sujet principal de cet article...

Recherche d'ordres SQL "factorisables" dans Oracle

Juste un rapide commentaire pour indiquer une colonne très utile sur les environnements transactionnels avec le paramètre cursor_sharing=EXACT. Si vous cherchez à détecter des requêtes qui s'éxécuteraient de manière très fréquente avec des valeurs litérales plutôt qu'avec des variables bind, regardez la colonne FORCE_MATCHING_SIGNATURE de la vue V$SQL ; voici une petite démonstration :

20 avril 2011

Authentification SYSDBA via les Enterprise Users

Vos bases de données sont soumises à de nouvelles contraintes. D'un côté, l'ouverture de plus en plus grande du fait de la multiplication des intervenants ; les partenaires deviennent externaliseurs, outsourceurs, offshore et font eux-mêmes appels aux externaliseurs, outsourceurs ou offshore ; tout le monde rêve de mettre sa tête dans le cloud. De l'autre, le champ des responsabilités et conformité s'étend avec la nécessité de plus en plus importante de protéger ses informations et de détecter les comportements déviants.

Administrateurs et développeurs continuent de s'authentifier "... as sysdba" ou "apps/apps..." rendant inutiles firewalls, chiffrement ou toutes les politiques d'autorisation ou d'audit que les équipes de sécurité tentent en vain de mettre en place depuis des années sur les bases de données ; il faut dire que c'est un peu compliqué, incapable qu'ils sont de faire le lien entre ce qui est fait et qui le fait. Sauf bien sur si vous utilisez une infrastructure à clé publique.

"Breaking News" : Enterprise User Security implémente désormais toute cette fonctionnalité. En effet, la solution est (enfin!) compatible avec les drivers JDBC thin à venir dans quelques semaines pour 10g/11g et également les connexions SYSDBA. Ceci, quel que soit l'annuaire d'entreprise que vous utilisez : Active Directory, Sun/Oracle Directory Server ou Novell eDirectory ! Autrement dit : 98% des cas d'authentification avec un utilisateur et un mot de passe permettent désormais de faire le lien avec utilisateur physique, ce qui est bien la fondation pour le reste des mécanismes de sécurité. J'ai eu l'occasion de tester tous ces cas et... ça marche au delà des espérences

11 avril 2011

Oracle Real-Time SQL Monitoring en Flash depuis SQL*Plus

Real-Time SQL Monitoring est une des fonctionnalités les plus Rock'N Roll de Oracle 11g. En 11.2, la fonction dbms_sqltune.report_sql_monitor permet très simplement d'utiliser l'outil sans avoir à écrire de requête sur v$SQL_PLAN_MONITOR; mais savez-vous qu'il est possible de créer un rapport qui inclut la plug-in Flash depuis cette même fonction ? Et qu'il n'est pas nécessaire d'installer Enterprise Manager, ni Grid Control, ni Database Console ?

Dans cet article, vous trouverez un exemple simple qui illustre l'utilisation de Real-Time SQL Monitoring d'abord en mode "Text" puis en mode "Flash". Quel Intérêt ? Disons que, si vous travaillez avec des développeurs, des développeuses ou des fonctionnels Business Intelligence, vous pourrez leur en mettre plein les yeux. Et à part ça ? Rien de plus que vous ne pourrez pas faire avec le mode "Texte", certes...

10 avril 2011

Oracle 11.2.0.2 et la détection automatique de colonnes corrélées

Oracle 11g a introduit la notion de statistiques étendues. Il est ainsi possible de stocker des informations de distribution de résultats de fonctions ou de corrélation entre colonnes. L'idée sous-jascente est de fournir au CBO toujours plus d'informations statistiques. De cette manière, il peut les prendre en compte dans son modèle et améliorer ses choix.

Dans cet article, vous trouverez un exemple simple qui illustrer cette fonctionnalité mais également comment Oracle 11.2.0.2 offre une nouvelle fonction pour détecter automatiquement les statistiques étendues qu'il serait pertinent de collecter.

Oracle optimizer_dynamic_sampling vs statistiques InnoDB

Les statistiques générées par InnoDB utilisent une méthode d'échantillonage comme on peut facilement le mettre en évidence en regardant le nombre de lignes d'une table dont la taille des lignes est mal distribuée... C'est un peu comme si Oracle faisait tout le temps du dynamic_sampling. Cette approche a ses avantages, sinon sur les temps de parsing au moins sur la maintenance de la base de données et, pourquoi pas, sur la pertinence des plans.

La comparaison entre Oracle et InnoDB a ses limites puisque les valeurs de l'échantillonnage sont très différentes comme on peut le voir en observant les valeurs des paramètres innodb_stats_sample_pages dans le cas de MySQL et de optimizer_dynamic_sampling dans le cas d'Oracle. En outre, la méthode d'échantillonnage qu'utilise Oracle est stable alors que celle d'InnoDB est aléatoire comme vous pouvez le voir ci-dessous...

08 avril 2011

Noyau Ubuntu/Utrace pour probes Dtrace de MySQL

Si vous voulez utiliser les probes DTrace de MySQL grace à SystemTap sur Ubuntu, il faut, d'abord, que les packages "systemtap" et "systemtap-sdt-dev" soient installés. Il faut également que MySQL soit compilé avec le package "systemtap-sdt-dev" et l'option -DENABLE_DTRACE=1. Il faut enfin que votre noyau soit patché avec utrace (CONFIG_UTRACE) ce qui n'est pas le cas avec les distributions standard Ubuntu ; au contraire des noyaux Oracle/Redhat EL ou Fedora.

Avec Ubuntu 10.10 Maverick Meerkat, rien n'est plus simple ;

06 avril 2011

Installer MySQL sur Ubuntu à partir des sources

La version de MySQL disponible via les repository Ubuntu n'est pas, la plupart du temps, la dernière version. Dans de nombreux cas, vous voudrez donc installer une version différente.

Cet article, largement inspiré de la section "2.9.2. Installing MySQL from a Standard Source Distribution" de la documentation présente comment effectuer cette opération en quelques minutes.

05 avril 2011

Configurer SystemTap avec Oracle EL et Ubuntu

SystemTap permet de manipuler un nombre important de probes de votre noyau Linux. C'est un outil fantastique pour superviser les performances de vos serveurs et diagnostiquer vos problèmes rapidement. La liste de ces indicateurs est disponible dans la section man stapprobes.

Ainsi si vous êtes un utilisateur averti d'Oracle sous Linux, vous serez étonné de ce que vous pouvez faire avec SystemTap pour identifier vos problèmes et, par exemple, classer vos processus par "Top IO" ou "Top Network"

Plans et Hints MySQL pour les DBA Oracle

MySQL, comme Oracle, permet de visualiser les plans des requêtes et offre, à travers des hints, des moyens pour les influencer. Passer d'Oracle à MySQL est donc ultra-simple ! En théorie d'accord mais en pratique ?

Cet article fait un petit parallèle entre Oracle et MySQL s'agissant de ces 2 outils que sont la commande explain et les hints...

02 avril 2011

Semaine de fou : SQL*Developer, XE 11g R2, OCM 11g et un casque Exadata

Enorme semaine côté Oracle, puisque outre quelques beaux poissons d'avril (Un Headphone Exadata) :