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 : ,
29 avril 2018

Les plus vieux fichiers d'Oracle pour créer une base datent de 1987

IntroductionLa base de données Oracle est un logiciel existant depuis 1979, soit presque 40 ans!Celle-ci a incroyablement évolué depuis ses débuts, songez que sa première version ne supportait pas les transactions mais seulement les fonctionnalités SQL basiques de requête et jointure... pour info le COMMIT/ROLLBACK ne fut introduit que sur la V3.Depuis ces temps quasi-préhistoriques, de très (trop?) nombreuses fonctionnalités ont disparu, sont devenues Deprecated, Unsuported puis Obsoletes... Et donc, ma question est, existe t-il... [Lire la suite]
Posté par David DBA à 19:42 - - Permalien [#]
Tags :
04 avril 2018

Trouver la liste des commandes DML et DDL gérées par Oracle : vue V$SQLCOMMAND

     IntroductionLe dictionnaire de données d'Oracle renferme des milliers de vues; il est bien sur impossible de toutes les explorer mais certaines, au détour d'un livre ou d'un forum, m'ont bien plu. Par exemple V$SQLCOMMAND dont la définition est "displays the mapping between SQL opcodes and names" : en clair, c'est la liste de toutes les commandes Oracle qu'on peut exécuter :-)Vous les connaissez déjà toutes? Vous êtes sur? Y compris UPSERT? Y compris UNDROP OBJECT?   Points d'attentionNA.   ... [Lire la suite]
Posté par David DBA à 23:04 - - Permalien [#]
Tags : ,
17 février 2018

Trace 10046 et base 12c CDB : ordres exécutés par Oracle lors d'un CREATE TABLE ?

IntroductionDans cet article "Quels sont les ordres exécutés par Oracle lors d'un CREATE TABLE ? Trace 10046 et base 12c non CDB", nous avons regardé quels ordres SQL Oracle exécutait lors d'un CREATE TABLE dans une base 12c non CDB. Maintenant, nous allons voir la même chose mais pour une base CDB. Je mettrais beaucoup moins de commentaires car ces ordres sont bien plus nombreux, certaines sont assez explicites (notamment quand Oracle donne le type des opérations) alors que d'autres restent totalement obscurs. Points... [Lire la suite]
Posté par David DBA à 22:36 - - Permalien [#]
Tags : ,

11 février 2018

Quels sont les ordres exécutés par Oracle lors d'un CREATE TABLE ? Trace 10046 et base 12c non CDB

IntroductionEst-ce que vous vous êtes déjà demandé ce que faisait réellement Oracle lors d'un ordre SQL? Quels sont les tests et contrôles internes qu'il effectue? Nous avons à notre disposition un très bon outil, la trace 10046, qui permet justement de voir ce travail effectué sous le capot. Dans cet article je vais examiner un ordre très basique, un CREATE TABLE d'une table avec une colonne, sans contrainte d'intégrité ni index, et en plus sur l'ancienne architecture Oracle, celle non PDB, pour avoir une trace plus simple. Points... [Lire la suite]
Posté par David DBA à 12:09 - - Permalien [#]
Tags : ,
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 : ,