03 février 2018

Plan d'exécution : utiliser une trace pour voir les sous-ordres SQL absents du plan

IntroductionLorsqu'on doit optimiser une requête SQL, il arrive parfois qu'on ne comprenne absolument pas comment elle est exécutée par Oracle. Une requête qui devrait se dérouler en une seconde prend en réalité trente minutes sans que le plan d'exécution ne nous renseigne sur ce qui se passe. Dans ce cas là, pas d'hésitation, il faut impérativement utiliser une trace pour, comme son nom l'indique, tracer ce qui se passe réellement dans la base.L'objectif de cet article est donc de bien vous faire prendre conscience de ce phénomène :... [Lire la suite]
Posté par David DBA à 17:56 - - Permalien [#]
Tags : , , ,

13 janvier 2018

Interdire dans SQL*Plus et UNIQUEMENT dans SQL*Plus des commandes SQL

IntroductionL'outil SQL*Plus est incontournable dans la panoplie d'un DBA. Outil historique d'Oracle, il est puissant, rapide, léger, pas toujours exempt de problèmes (ce satané LINESIZE!) mais c'est vers lui que vous devez vous tourner si vous voulez travailler au plus près de votre base. Il existe d'autres logiciels, plus conviviaux, avec une belle interface graphique mais qui parfois agrègent ou filtrent les données du dictionnaire de données, comme le Cloud Control, SQL Developer, Toad...Cet article va s'intéresser à un point de... [Lire la suite]
Posté par David DBA à 15:49 - - Permalien [#]
Tags : , ,
07 janvier 2018

Comment créer deux objets avec le même nom dans le même schéma

IntroductionQuand vous débutez en tant que DBA Oracle, on vous dit qu'il n'est pas possible de créer, pour un même user, deux objets avec le même nom. Nous allons voir que c'est faux, la vraie règle est "Deux objets ne peuvent pas avoir le même nom dans un même schéma s'ils appartiennent au même namespace".Petit rappel : le User est l'utilisateur qui se connecte à la base, le Schéma est l'espace du User connecté et l'ensemble des objets qu'il a créé alors que le namespace est une catégorie pour ranger les objets par leur type. ... [Lire la suite]
Posté par David DBA à 14:09 - - Permalien [#]
Tags : ,
23 décembre 2017

Comment bien présenter et formater le résultat d'un SELECT sous SQL*Plus

IntroductionQuoi de pire qu'un SELECT qui renvoie le bon résultat mais qui est si mal formaté qu'il en devient illisible? Nous allons voir comment mettre en page celui-ci avec de simples commandes SQL*Plus. Base de testsN'importe quelle base Oracle. Points d'attentionAucun.   Exemples============================================================================================Afficher des accents sous SQL*Plus============================================================================================Si des caractères... [Lire la suite]
Posté par David DBA à 14:32 - - Permalien [#]
Tags : ,
17 décembre 2017

Les fonctions SQL selon les versions d'Oracle dans V$SQLFN_METADATA

IntroductionLe dictionnaire de données d'Oracle renferme des milliers et des milliers de vues, certaines fondamentales comme DBA_TABLES, DBA_USERS alors que d'autres sont beaucoup plus anecdotiques voir quasi inconnues, comme V$SQLFN_METADATA.Selon la doc Oracle "V$SQLFN_METADATA contains metadata about operators and built-in functions." De façon plus précise, elle contient l'historique d'apparition des opérateurs et fonctions SQL selon les versions d'Oracle!OK, cette vue n'est pas importante mais c'est intéressant de fouiner dans ces... [Lire la suite]
Posté par David DBA à 18:51 - - Permalien [#]
Tags : ,
06 décembre 2017

Oracle et les modes de lecture des blocs de données : Read, Get, Touch, Fetch, Arraysize...

IntroductionOracle a tendance à multiplier les expressions pour parler des mêmes opérations ou objets. Par exemple, pour le mot Verrou en français, Oracle utilise les termes Lock, Latch, Mutex, Enqueue, Pin. Chacun de ces verrous a ses propres caractéristiques, il est donc pertinent d'avoir des termes précis pour les différencier et être plus efficace mais, revers de cela, ça complexifie leur approche. Lorsqu'il s'agit de parler de la lecture de blocs de données, Oracle multiplie là-encore les termes : lecture sur disque dur, lecture... [Lire la suite]
Posté par David DBA à 22:01 - - Permalien [#]
Tags : ,

24 novembre 2017

Quels sont les produits, composants, options, packs, advisors, features, occupants ... installés sur ma base?

IntroductionEst-ce qu'un jour vous vous êtes demandé ce qui était installé sur votre base Oracle? J'entends par là : produits, composants, options, packs, advisors, features ...? Si oui, vous aurez compris qu'Oracle ne donne pas toutes ces réponses dans une seule vue mais dans plusieurs et c'est ce que nous allons voir. Points d'attentionAucun. Base de testsN'importe quelle base Oracle. Exemples============================================================================================Les... [Lire la suite]
Posté par David DBA à 20:23 - - Permalien [#]
Tags : , ,
19 novembre 2017

Oracle peut utiliser un index avec LIKE '%texte%' : idées reçues sur les fonctions et les index

IntroductionUne idée courante sous Oracle est qu'une fonction utilisée sur un champ indexé empêche l'utilisation de cet index. Nous allons prouver que c'est plus complexe que cela et que même avec le fameux LIKE '%texte%' ou la sélection de 100% des données, Oracle peut utiliser un index. Il faut néanmoins distinguer comment Oracle traite les fonctions de groupes telles que MIN, MAX, COUNT des fonctions comme SUBSTR, UPPER. Il faut aussi tenir compte si le SELECT se fait uniquement sur la colonne indexée ou non, que la fonction est... [Lire la suite]
Posté par David DBA à 18:03 - - Permalien [#]
Tags :
16 octobre 2017

ORDER BY et déduplication SQLNet : un ORDER BY ne ralentit pas toujours une requête

IntroductionDans mon précédent article "ORDER BY et Consistents gets réduits par 10 : un ORDER BY ne ralentit pas toujours une requête!", je parlais du fait qu'un ORDER BY ne ralentit pas toujours un SELECT, voir même peut l'accélérer en divisant considérablement le nombre de Consistents gets. Dans cet article nous allons voir que le ORDER BY peut aussi diminuer la taille des données échangées entre le client et le serveur via de la déduplication des données identiques et que cela contribue à rendre le SELECT plus rapide. Points... [Lire la suite]
Posté par David DBA à 23:13 - - Permalien [#]
Tags : , ,
08 octobre 2017

ORDER BY et Consistents gets réduits par 10 : un ORDER BY ne ralentit pas toujours une requête!

IntroductionVous savez qu'un ORDER BY dans une requête SQL va générer au niveau d'Oracle un SORT des données. Cette opération de tri est très consommatrice en terme de ressources mais, sur le coût total du plan d'exécution, ce coût peut être annulé en gagnant sur d'autres opérations. Nous allons voir qu'une requête avec un ORDER BY peut être aussi rapide voir même plus rapide qu'une requête sans le ORDER BY. Points d'attentionRéfléchissez bien avant de faire un ORDER BY car cette opération est très lourde pour Oracle et dans... [Lire la suite]
Posté par David DBA à 14:21 - - Permalien [#]
Tags : , ,