03 juillet 2017

SYS ne peut pas tout faire sous Oracle

          IntroductionSYS est le user le plus puissant sous Oracle! Mais cela ne signifie pas pour autant qu'il puisse TOUT faire! Même lui a des limites, fixées par les développeurs du SGBD et c'est l'objet de cet article. Points d'attentionEn tant que SYS vous pouvez facilement casser votre base, donc faites bien attention si vous vous connectez avec ce user. A noter que parmi les bonnes pratiques d'Oracle, il est dit qu'il ne faut quasiment jamais se connecter comme AS SYSDBA (user... [Lire la suite]
Posté par David DBA à 20:15 - - Commentaires [0] - Permalien [#]
Tags : ,

08 mai 2017

Un monitoring des index plus évolué que celui d'Oracle

IntroductionSi vous avez déjà utilisé l'outil de monitoring des index d'Oracle, vous avez dû être effarés devant la pauvreté de celui-ci. Oracle n'indique en effet que si Oui ou Non un index est utilisé durant la période de monitoring mais pas le nombre de fois qu'on l'utilise. Dans le cas où vous voulez supprimer des index d'une table qui en a trop parce qu'ils ralentissement les INSERT et DELETE, la première chose à faire est de voir si ces index sont utilisés ou non mais aussi combien de fois ils le sont avant de prendre une... [Lire la suite]
Posté par David DBA à 22:21 - - Commentaires [0] - Permalien [#]
Tags : , ,
23 avril 2017

Liste des colonnes mises à jour sur une table : trigger et prédicat UPDATING

IntroductionSi vous voulez obtenir la liste des colonnes mises à jour en SQL pour une table donnée, à des fins d'audit, vous faites comment? Vous essayez de récupérer les ordres SQL UPDATE et vous décomposez celui-ci pour récupérer les noms des colonnes? Attention, certains ordres seront plus difficiles à traiter que d'autres comme la gestion des sous requêtes, des hints qui ne doivent pas être pris en compte etc etc. Vous utilisez un trigger et utilisez les paramètres OLD et NEW? Vous utilisez le package DBMS_FGA?La solution que je... [Lire la suite]
Posté par David DBA à 18:28 - - Commentaires [0] - Permalien [#]
Tags : , ,
08 avril 2017

Un ordre DDL est entouré par deux commit implicit; le premier est conditionnel

IntroductionVous savez qu'avec une commande DDL un Commit implicite est effectué. OK, mais savez-vous qu'en réalité il peut y en avoir deux, un avant et un après? Non? Alors ce post est pour vous!La règle est la suivante : un Commit a lieu normalement après une commande DDL (si elle n'échoue pas) mais aussi avant cette commande si un ordre DML non validé/non annulé a eu lieu avant la commande DDL.En résumé :           commande DML de nom... [Lire la suite]
Posté par David DBA à 12:32 - - Commentaires [0] - Permalien [#]
Tags : , , ,
02 avril 2017

Changer l'ordre des colonnes d'une table avec l'attribut Invisible

     IntroductionChez un client, un responsable développement est venu me voir avec un problème bien particulier. Il avait une table de 300 colonnes et, quand il voulait récupérer le nom de ses clients, au lieu de simplement faire un SELECT nom FROM clients, il récupérait toutes les données de la table puis faisait un extract du fichier .txt créé en se basant sur la position des caractères. En clair, pour lire le nom, il récupérait les caractères 50 à 99 dans ce fichier. OK, c'était une application ancienne,... [Lire la suite]
Posté par David DBA à 09:56 - - Commentaires [0] - Permalien [#]
Tags : ,
22 mars 2017

Tout le dictionnaire de données Oracle n'est pas dans DICT

       IntroductionUne base de données Oracle 11gr2 à sa création comporte à peu près 9000 tables et vues système différentes. Celles-ci composent le dictionnaire de données qui est la propriété du user SYS. Il va de soi qu'en cas de problème, trouver la bonne vue dans ce labyrinthe sera extrêmement difficile! Prenons l'exemple d'un message d'erreur relatif à un trigger. Vous connaissez la vue DBA_TRIGGERS mais saviez-vous qu'il existe les vues DBA_INTERNAL_TRIGGERS, DBA_TRIGGER_ORDERING,... [Lire la suite]
Posté par David DBA à 22:33 - - Commentaires [0] - Permalien [#]
Tags : ,

19 mars 2017

Evolution taille table : Insert, Delete, Truncate, Drop, Shrink, Move

          IntroductionUne légende tenace dans le monde Oracle dit qu'une fois les données d'une table supprimées, l'espace occupé par ces lignes est définitivement perdu! Oui, ça a l'air idiot mais on trouve encore cette histoire sur pas mal de forums. La réalité est plus complexe : une fois que des blocs de données ont été alloués à une table, ces blocs restent alloués à la table, même si l'intégralité des données est supprimée par un DELETE! Néanmoins ces blocs seront réutilisables lors... [Lire la suite]
Posté par David DBA à 12:33 - - Commentaires [0] - Permalien [#]
Tags : , , , , , ,
05 mars 2017

Comment le nom des structures mémoires Oracle X$ est construit

                           IntroductionDans mon article "Trouver les objets Oracle cachés : tables système xxx$, structures mémoire X$xxx, paramètres cachés, packages PL/SQL cachés" je parlais des structures mémoires X$xxx. Celles-ci ont des noms très particuliers comme X$KSDAFT ou X$KQFOPT et je vous mets au défi de deviner à quoi elles servent rien qu'avec leur nom! Malheureusement ces structures mémoires ne sont... [Lire la suite]
22 février 2017

DBMS_ADVANCED_REWRITE : intercepter et remplacer un ordre SQL

                             IntroductionParfois un ordre SQL mal écrit est exécuté sur une base de données sans qu'il soit possible de modifier son texte. Les raisons peuvent être multiples :           ordre SQL issu du logiciel d'un éditeur tiers disparu          ordre SQL venant d'un programme interne du client mais... [Lire la suite]
Posté par David DBA à 13:45 - - Commentaires [0] - Permalien [#]
Tags : ,
16 février 2017

Statistiques sur les SELECT des colonnes : package DBMS_FGA

IntroductionUn client est venu me voir avec un problème sur une table comprenant 300 colonnes... Oui, 300! Son problème a été rapidement résolu, il ne portait pas sur ce nombre de colonnes MAIS je me suis posé la question : est-ce que toutes les colonnes de cette table sont vraiment utilisées? Est-il possible de nettoyer la table en supprimant des colonnes et gagner ainsi de l'espace disque, voir de supprimer des index sur des colonnes devenues inutiles au fil des ans?La question est : où trouver les statistiques d'utilisation des... [Lire la suite]
Posté par David DBA à 18:44 - - Commentaires [0] - Permalien [#]
Tags : , , ,