IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Identifier les requêtes multi-schémas.


Sujet :

Administration Oracle

  1. #1
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut Identifier les requêtes multi-schémas.
    Bonjour,

    J'ai actuellement une base de données (bdd1) avec plusieurs schémas (s1,s2,etc). Je prévois de déplacer un schéma (s1) dans une nouvelle base de données (bdd2).

    Or vu l'historique je ne suis pas à l'abri que certains schémas (s2, etc) interrogent des données du schéma migré (s1), et donc poser des problèmes lors de la migration.

    J'essaie donc d'identifier toutes les requêtes qui contiennent dans la clause FROM au moins une table de s1 et au moins une table de s2 ou tout autre schéma.

    Autant dire je suis parti dans une analyse syntaxique à base de instr, substr, de la vue sys.wrh$_SQLTEXT , analyse dont je ne me sors que très difficilement vue la complexité de certaines requêtes contenant des requêtes imbriquées

    A la lecture de la problématique, avez-vous des conseils / pistes à me donner ?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Pourquoi ne pas déporter le problème à l'envers en laissant le schéma dans la base et en substituant des vues aux tables actuelles, vues pointant sur l'autre base dans laquelle vous avez déporté les tables ?

    Vous n'auriez alors rien à analyser et aucune requête à récrire !

    Donc fait en quelques minutes !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    C'est en effet le plan B (obligeant l'usage de dblink ce que nous voulons évité).

    Nous aurions aimé en profiter pour "contrôler" les accès.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Ha c'est vrai que les requêtes multibase sous Oracle sont assez merdiques via dblink...

    Si vous étiez sous MS SQL Server... Mais ce serait une autre histoire !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vos requêtes sont générées par les applications. C'est plutôt de ce coté que vous devez rechercher.
    Par contre si votre application respecte le concept de "thick database" alors c'est plus simple vos requêtes sont dans la base.

    PS. Il est vrai que chez Oracle toute chose qui n'est pas maitrise par celui qui veut l'utiliser devient vite merdique!

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Pas simple comme problème en effet !

    Une chose est sûre, c'est que l'analyse syntaxique des requêtes, outre sa complexité, n'est pas une bonne voie.
    Il suffit qu'un synonyme ou une vue fasse référence à un objet d'un autre schéma pour que la requête échappe à ce genre de recherche.

    La solution proposée par SQL Pro a l'avantage d'être systématique et d'éviter tout trou dans la raquette.

    Pour se faire une idée des requêtes impliquant plusieurs schémas, mon idée première est d'observer les choses par V$SQL_PLAN.
    On a la colonne OBJECT_OWNER qui indique le schéma impliqué pour chaque opération du plan. Cette vue travaillant au niveau des objets finaux réels, on est à l'abri du biais des vues ou synonymes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select sql_id, sql_text
    from v$sqlarea
    where sql_id in 
    (select sql_id from v$sql_plan 
    where object_owner is not null
    group by sql_id
    having count(distinct object_owner)>1);
    On peut imaginer d'exécuter cette requête tous les quarts d'heure pendant une semaine et d'en stocker le résultat, ce qui devrait donner une excellente vision, mais sans qu'on puisse garantir son exhaustivité.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par mnitu Voir le message
    PS. Il est vrai que chez Oracle toute chose qui n'est pas maitrise par celui qui veut l'utiliser devient vite merdique!
    Ca c'est ben vrai, ça !
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  8. #8
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    sys.wrh$_SQLTEXT n'est pas une bonne idée car seules les requêtes coûteuses sont répertoriées.
    La fonctionnalité Oracle à utiliser est AUDIT pour tracer tout ce qui fait des select sur les tables de ce schema.
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  9. #9
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Depuis la fin de la semaine dernière j'ai laissé l'analyse syntaxique, je suis plus parti sur une requête de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    select distinct req1.*, a1.synonym_name, a1.table_owner, a1.table_name, a2.synonym_name, a2.table_owner, a2.table_name from (	
    	SELECT   SQL_ID as sql_id
           , DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 1) as c1
      FROM   sys.wrh$_SQLTEXT w
      where
      (
          (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 1))     like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 4000))  like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 8000))  like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 12000)) like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 16000)) like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 20000)) like '%FROM%')
      or  (upper(DBMS_LOB.SUBSTR ( SQL_TEXT, 4000, 24000)) like '%FROM%')
      )
    ) req1
    , all_synonyms a1, all_synonyms a2
    where req1.c1 like ('%' || a1.synonym_name || '%')
    and req1.c1 like ('%' || a2.synonym_name || '%')
    and a1.table_owner in ('S1')
    and a1.owner = 'PUBLIC'
    and a2.table_owner not in ('S1','SYS','SYSTEM','SYSMAN','PERFSTAT')
    and a2.owner = 'PUBLIC'
    ;
    sys.wrh$_SQLTEXT n'est pas une bonne idée car seules les requêtes coûteuses sont répertoriées.
    La fonctionnalité Oracle à utiliser est AUDIT pour tracer tout ce qui fait des select sur les tables de ce schema.
    Ha ! Je note. En effet c'est logique, dans le sens où c'est l'historique AWR et que les AWR ne relèvent que les requêtes couteuses.

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le problème ça n'est pas que les tables, il peut aussi y avoir des vues ou des procédures stockées.

    Je commencerais par analyser les accès aux différents objets de S1 avec les vues du dictionnaire (par exemple dba_tab_privs).

Discussions similaires

  1. identifier les paramètres de requêtes GET
    Par razam dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 06/10/2014, 17h56
  2. [XPATH][Débutant]Requête d'interrogation sur un fichier multi-schéma ?
    Par Laurent Dardenne dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 15/10/2008, 17h00
  3. Requête SQL multi schémas
    Par Monfy29 dans le forum SQL
    Réponses: 4
    Dernier message: 15/08/2008, 13h06
  4. Réponses: 3
    Dernier message: 04/05/2006, 13h00
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo