12 février 2019

Les tables IOT (Index Organized Table) : partie 2, index secondaire décalé avec l'index primaire

  IntroductionCet article présentait les concepts de base d'une table IOT : http://dbaoraclesql.canalblog.com/archives/2019/01/29/37058939.html.Nous allons maintenant voir s'il est possible de prouver, comme le dit la doc Oracle, que lorsque les logicals rowid de l'index secondaire ne sont plus en phase avec les vrais rowids de la table IOT, alors Oracle fait une lecture directe via le rowid qui échoue avant de parcourir la table IOT.   Points d'attentionAucun. Base de testsUne base Oracle 12. ... [Lire la suite]
Posté par David DBA à 13:14 - - Permalien [#]
Tags : ,

29 janvier 2019

Les tables IOT (Index Organized Table) : partie 1, généralités

  IntroductionUne table IOT (Index Organized Table) est une table d'un genre spécial. A la différence d'une table classique, dite aussi HOT (Heap Organized Table), cette table possède de multiples particularités qu'il est bon de connaître pour ne pas être vite débordé par leur complexité.En premier, une table classique, avec un index pour la PK, est en réalité un ensemble de deux objets : la table ET l'index, comme un livre avec son index à la fin. En revanche une table IOT ne comprend en réalité qu'un index et pas de table;... [Lire la suite]
Posté par David DBA à 13:00 - - Permalien [#]
Tags : ,
05 janvier 2019

Autotrace : liste des statistiques différentes selon qu'on utilise SQL*Plus, SQLcl, Toad ou SQL Developer

  IntroductionLa commande AUTOTRACE permet d'afficher, pour un ordre SQL, un plan d'exécution mais aussi des statistiques relatives à cet ordre. Là où la situation se complique, c'est qu'Oracle, et les éditeurs tiers, proposent des stats différentes selon les outils utilisés; c'est ce que nous allons voir.  Points d'attentionAucun. Base de testsUne base Oracle 12 avec au moins sqlcl installé. Exemples============================================================================================Stats Autotrace avec... [Lire la suite]
Posté par David DBA à 13:55 - - Permalien [#]
Tags : , ,
20 décembre 2018

Index virtuel et index invisible : à quoi servent-ils?

IntroductionLa création d'un index, ainsi que sa suppression, peuvent prendre des heures selon la volumétrie des tables. En 2018, une table de 500 millions d'enregistrements n'a rien d'extraordinaire, ni même une table en ayant 5 milliards. Le problème est que lorsqu'on veut optimiser une requête via l'ajout d'un index pour voir si le CBO génère un meilleur plan, tester cette hypothèse va prendre trop de temps. C'est pour répondre à ce problème que Oracle a créé les types d'index suivants : index virtuel et index invisible. Ces types... [Lire la suite]
Posté par David DBA à 18:21 - - Permalien [#]
Tags : ,
16 décembre 2018

Index partiel sur NULL : comment indexer uniquement la valeur NULL d'une colonne

IntroductionOn vous a dit qu'il n'était pas possible sous Oracle d'indexer la valeur NULL. J'ai prouvé ici que c'était faux : http://dbaoraclesql.canalblog.com/archives/2018/08/05/36611094.html. Idem pour le fait que Oracle ne gère pas d'index partiel : cette fonctionnalité est disponible en 12c mais uniquement pour des tables partitionnées.  Néanmoins il existe une solution de contournement depuis plusieurs  versions d'Oracle : créer un index sur fonction qui mettra à NULL les valeurs que l'on ne veut pas indexer, et, de la... [Lire la suite]
Posté par David DBA à 10:35 - - Permalien [#]
Tags : ,
03 novembre 2018

La taille allouée à une table et la taille utilisée par ses données : ce n'est pas la même chose!

IntroductionCet article rejoint celui-ci "Evolution taille table : Insert, Delete, Truncate, Drop, Shrink, Move" de Mars 2017 : http://dbaoraclesql.canalblog.com/archives/2017/03/19/34974508.html. Mais cette fois je vais m'attarder sur la taille de la table versus la taille de ses données. Et ce n'est pas du tout la même chose comme nous allons le voir!   Points d'attentionNA.   Base de testsN'importe quelle base Oracle; tests sur une 12.1.     ... [Lire la suite]
Posté par David DBA à 16:04 - - Permalien [#]
Tags : , ,

20 octobre 2018

Index créé par une contrainte d'intégrité ou non : comment les identifier?

IntroductionEst-ce que vous savez comment distinguer les index créés via les contraintes d'intégrité PRIMARY KEY et UNIQUE des index créés à la demande? Non? OK, on va voir ça, en route vers le coeur d'Oracle :-)  Points d'attentionAucun. Base de testsN'importe quelle base Oracle. Exemples============================================================================================La table du dictionnaire de données IND$============================================================================================Premier... [Lire la suite]
Posté par David DBA à 12:14 - - Permalien [#]
Tags : ,
19 septembre 2018

Sécurité et commande STRINGS sous Unix : voir les données non cryptées d'une base, voir dans le passé...

IntroductionVous connaissez l'expression OUT OF THE BOX? C'est pour dire qu'il faut parfois s'extraire des limites logiques d'un système et penser en dehors de celui-ci, penser en dehors de la boîte. Avec Oracle, si je veux voir des données d'une table, je me connecte et, si j'ai les droits, je fais un SELECT sur cette table. Si je n'ai pas les droits, c'est cuit... HE BEN NON, si on pense OUT OF THE BOX (la boîte étant Oracle), on peut tenter notre chance sous Unix avec la commande STRINGS. Via celle-ci on peut voir directement les... [Lire la suite]
Posté par David DBA à 09:49 - - Permalien [#]
Tags : , ,
11 septembre 2018

Comment devenir un autre utilisateur sous Oracle?

IntroductionComment un user peut-il interagir avec les objets d'un autre user? Est-ce facile? Impossible? Les problématiques de droits et de rôles sont complexes avec Oracle mais il existe différentes techniques permettant à un user U1 d'accéder aux objets d'un user U2 et c'est ce que nous allons voir.  Points d'attentionTrop pour les énumérer :-) Base de testsN'importe quelle base Oracle. ExemplesDans la suite de cet article, j'utiliserais les conventions suivantes : - U1 : user zztest, avec le droit CREATE SESSION au... [Lire la suite]
Posté par David DBA à 10:33 - - Permalien [#]
Tags : ,
25 août 2018

EXPLAIN PLAN et AUTOTRACE : même combat?

IntroductionVous savez que pour avoir rapidement un plan d'exécution sous Oracle, il faut utiliser la commande EXPLAIN PLAN. Cela permet de ne pas attendre une heure que s'exécute la requête (mais attention aux bind variables, elles ne sont pas gérées). Pour avoir le vrai plan, calculé par le CBO, utilisez en revanche dbms_xplan.display_cursor ou bien dbms_xplan.display_awr, qui eux gèrent parfaitement les bind variables (mais attention au temps  d'exécution).     Et la commande AUTOTRACE, elle génère un vrai... [Lire la suite]
Posté par David DBA à 09:36 - - Permalien [#]
Tags : , , ,