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

SQL Oracle Discussion :

Avoir les métadonnées du dictionnaires de données.


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut Avoir les métadonnées du dictionnaires de données.
    Bonjour!

    j'ai besoin de fournir les requêtes nécessaires pour "collecter les métadonnées du dictionnaires de données" d'une base de données.

    Cette base, c'est moi qui la crée. Via des create tables, des create views, des create users, create sequences, etc.

    Pour obtenir ces metadonnées, j'ai trouvé quelques requêtes sur le net, notamment:

    SELECT table_name FROM user_tables
    SELECT view_name FROM user_views
    SELECT DISTINCT name FROM user_source WHERE Type='PROCEDURE'
    select sequence_name from all_sequences;
    SELECT trigger_name FROM all_triggers WHERE owner = "nom_owner";

    J'ai deux questions par rapport à tout ça:
    _quel est le nom du "owner" qui figure sur la sélection des infos sur les triggers? Est-ce que login avec lequel je me suis loggué pour créer la base et son contenu?
    Me connectant avec le login "system", dois-je alors mettre "owner = "system" " ? Il n'y a pas quelque chose en rapport avec "dba"?

    _Je ne parviens pas à trouver la requête pour avoir les infos sur les utilisateurs. Je suppose que ça devrait ressembler à SELECT user_name from ******* mais je ne trouve pas sur google pour le moment.

    Oh, et une troisième. Je suppose que je dois préciser le "WHERE owner = "nom_owner" " sur chacun des requêtes que j'ai donné précédement?

    Merci infiniment!

    D.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par divad Voir le message
    quel est le nom du "owner" qui figure sur la sélection des infos sur les triggers? Est-ce que login avec lequel je me suis loggué pour créer la base et son contenu?
    C'est le nom du schéma où ont été créés les objets, soit le "nom du login".
    Si c'est system, ce n'est pas une bonne idée d'aller jouer sur le terrain des objets système d'oracle... Attention au drop table cascade malheureux !

    Citation Envoyé par divad Voir le message
    Je ne parviens pas à trouver la requête pour avoir les infos sur les utilisateurs. Je suppose que ça devrait ressembler à SELECT user_name from ******* mais je ne trouve pas sur google pour le moment.
    ALL_USERS au DBA_USERS.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Merci pour la réponse!
    Oui, system n'est pas malin. pour le moment, ce sont juste des tests.

    Comment choisir entre:
    SELECT user_name from ALL_USERS
    et
    SELECT user_name from DBA_USERS
    ?
    Ou est-ce que ça va me renvoyer la même chose?

    et une dernière question:
    Je suppose que je dois préciser le "WHERE owner = system " sur chacune des requêtes que j'ai donné précédemment?

    Merci encore pour tes réponses et ta rapidité!

    D.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    DBMS_METADATA est ton ami

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Merci beaucoup pour ce lien.
    Mais le plus sincèrement du monde, je ne vois pas comment ça peut m'aider pour les questions précises que j'ai posées? Peux-tu m'éclairer?

    Merci encore

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    regarde les exemples!

    Example: Fetch the DDL for all Complete Tables in the Current Schema, Filter Out Nested Tables and Overflow Segments

    This example fetches the DDL for all "complete" tables in the current schema, filtering out nested tables and overflow segments. The example uses SET_TRANSFORM_PARAM (with the handle value = DBMS_METADATA.SESSION_TRANSFORM meaning "for the current session") to specify that storage clauses are not to be returned in the SQL DDL. Afterwards, the example resets the session-level parameters to their defaults.

    To generate complete, uninterrupted output, set the PAGESIZE to 0 and set LONG to some large number, as shown, before executing your query.

    SET LONG 2000000
    SET PAGESIZE 0
    EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
    SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
    FROM USER_ALL_TABLES u
    WHERE u.nested='NO'
    AND (u.iot_type is null or u.iot_type='IOT');
    EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');
    Example: Fetch the DDL For All Object Grants On HR.EMPLOYEES

    SELECT DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT',
    'EMPLOYEES','HR') FROM DUAL;
    Example: Fetch the DDL For All System Grants Granted To SCOTT

    SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','SCOTT')
    FROM DUAL;

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Merci de ta réponse.
    Je dois te l'avouer, c'est presque du chinois pour moi. Je n'ai pas un niveau élevé.

    Si je comprends quelque chose, ça voudrait dire qu'avec une requête du genre
    SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
    FROM USER_ALL_TABLES u
    WHERE u.nested='NO'
    AND (u.iot_type is null or u.iot_type='IOT');

    je pourrais remplacer toutes mes autres requetes?

    mais je ne comprends même pas ce que sont vraiment ces get_dll, etc...

    Est-ce que je dois absolument passer par là ou est ce que j'étais proche du but avec mes questions précédentes?

    merci encore

    D.

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par divad Voir le message
    j'étais proche du but avec mes questions précédentes?
    C'est quoi ton but?


    PS:
    Citation Envoyé par divad Voir le message
    "collecter les métadonnées du dictionnaires de données"
    Dans quel but?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    le but est simplement de ... les afficher, sans les exploiter. Juste pour m'assurer que ces métadonnées ont été créées. Oui, je sais, c'est bête et méchant.

    Que pensez-vous de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT table_name FROM user_tables WHERE owner = "system";
    SELECT view_name FROM user_views WHERE owner = "system";
    SELECT DISTINCT name FROM user_source WHERE Type='PROCEDURE' WHERE owner = "system";
    select sequence_name from all_sequences WHERE owner = "system";
    SELECT trigger_name FROM all_triggers WHERE owner = "system";
    SELECT user_name from ALL_USERS WHERE owner = "system";

    Sachant que j'ai simplement ajouté "WHERE owner = "system";" à toutes les requêtes, et que la dernière requete est, selon moi, censé me donner les métadonnées liées aux utilisateurs que j'ai créé.

    Merci de votre avis

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    en gros, tu veux SELECT * FROM DBA_OBJECTS, non?

    Quant à la dernière, il n'y a pas de "créateur d'utilisateur", mais seulement une liste d'utilisateur SELECT * FROM DBA_USERS...

    Bon, si c'est juste pour les afficher, tu peux aussi les afficher graphiquement avec TOAD ou SQL Developer, non?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Je suis un complet débutant en Oracle donc je suppose que "SELECT * FROM DBA_OBJECTS" pourrait bien m'aider, en effet. Je vais tester ça aujourd'hui ou demain, quand j'aurai de nouveau accès à la base.

    Admettons, ce qui est le cas, que ce que je suis en train de développer s'ajoute à une grosse base de tests, là où tout le monde crée des tables en pagaille et tout et tout... comment puis-je retrouver les "métadonnées que j'ai créé", moi même?
    Je peux faire ça? ==> SELECT * FROM DBA_OBJECTS WHERE owner = "loginDuCreateur";

    Merci beaucoup pour les réponses, ça m'aide beaucoup

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    oui

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    super, je teste ça demain, merci encore!

    D.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Par défaut
    Hello!

    Bon la requete SELECT * FROM DBA_OBJECTS ne correspondait pas exactement à ce que je cherchais. Ca m'a listé des milliers de choses

    Par contre les autres requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT table_name FROM user_tables WHERE owner = "system";
    SELECT view_name FROM user_views WHERE owner = "system";
    SELECT sequence_name FROM all_sequences WHERE owner = "system";
    SELECT trigger_name FROM all_triggers WHERE owner = "system";
    SELECT user_name FROM ALL_USERS WHERE owner = "system";
    étaient suffisantes.
    Pour la dernière (utilisateurs), il a juste fallu supprimer l'underscore entre user et name

    Merci encore pour votre précieuse aide!

    D.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Avoir les données contenant un 'mot' grace au clientdataset
    Par nassoft dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/03/2007, 12h33
  2. [BDE] [D2005] Comment avoir les outils base de donnée
    Par melles dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/09/2006, 10h57

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