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 plan... [Lire la suite]
Posté par David DBA à 09:36 - - Permalien [#]
Tags : , , ,
15 août 2018

Le type de données VARCHAR : est-il utilisé par Oracle dans la définition de tables?

IntroductionLe type de données (datatype) VARCHAR, à ne pas confondre avec VARCHAR2, excite depuis 1992 la curiosité de bien des DBA. Ce datatype est apparu avec Oracle 7 et, dès le début, Oracle a dit de ne pas l'utiliser car il était réservé pour un usage futur. En 2018, soit 26 ans après, Oracle nous dit toujours de ne pas l'utiliser :-) que c'est long le futur...Et comme je suis quelqu'un de très curieux, j'ai eu envie de voir cela de plus près!  Points d'attentionAucun... Base de testsN'importe quelle base Oracle. ... [Lire la suite]
Posté par David DBA à 12:54 - - Permalien [#]
Tags : ,

05 août 2018

Indexer la valeur NULL et l'utiliser dans la clause WHERE

Introduction"Oracle n'indexe pas la valeur NULL" : combien de fois j'ai lu cela... il faudrait ajouter, pour être plus précis, "sauf sous certaines conditions", que nous allons voir de suite :-)   Points d'attentionNA.   Base de testsN'importe quelle base Oracle; tests sur une 12.1.     ExemplesOn crée une table de test basique, avec 10 000 enregistrements.     SQL> create table TEST_NULL (ID NUMBER, NAME VARCHAR2(30 CHAR));     Table... [Lire la suite]
Posté par David DBA à 22:09 - - Permalien [#]
Tags : , ,
10 juillet 2018

Problème de caractères spéciaux et d'accents dans le nom d'objets

IntroductionDans tout logiciel ou langage informatique, il existe des caractères spéciaux. En général il faut les manipuler avec précaution sinon vous risquez d'avoir de très très mauvaises surprises. Nous allons voir cela avec le nom des objets sous Oracle.   Points d'attentionNA.   Base de testsN'importe quelle base Oracle; tests sur une 12.1.     Exemples============================================================================================Nom de table avec des caractères... [Lire la suite]
Posté par David DBA à 17:32 - - Permalien [#]
Tags : ,
20 juin 2018

Comment créer un trigger sur SELECT

IntroductionOracle permet de créer des triggers sur les opérations DML suivantes : INSERT, UPDATE, DELETE mais pas SELECT. Nous allons voir comment contourner cette restriction avec un audit de granularité fine créé via le package DBMS_FGA, et, lorsque l'audit se déclenchera, celui-ci appellera une procédure stockée.Un SELECT qui exécute du code PL/SQL : cela ressemble fortement à un trigger sur SELECT, non? Attention, c'est un pseudo-trigger, de niveau Statement et pas de niveau Row : si le SELECT ramène 100 lignes, la procédure... [Lire la suite]
Posté par David DBA à 10:00 - - Permalien [#]
Tags : , ,
02 juin 2018

Jointure d'index : le INDEX FAST FULL SCAN n'est pas optimisé par Oracle

IntroductionLe but de cet article est de discuter du mode d'accès aux index appelé INDEX FAST FULL SCAN, et plus précisément de montrer qu'il n'est pas optimisé (oui, c'est prétentieux de ma part) lors d'une jointure d'index. Pour cela nous allons utiliser un hint et montrer que Oracle lit TOUS les blocs de l'index puis filtre les données au lieu de traiter N blocs d'un coup et de s'arrêter une fois tous les enregistrements trouvés, ce qui serait plus pertinent. Bien sur, INDEX FAST FULL SCAN signifie "lecture rapide de TOUT l'index"... [Lire la suite]
Posté par David DBA à 18:57 - - Permalien [#]
Tags : ,