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 :

Récupérer le nombre d'enregistrements pour chaque table d'une base


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Récupérer le nombre d'enregistrements pour chaque table d'une base
    Bonjour,

    Je souhaiterais savoir s'il est possible de récupérer par table le nombre d'enregistrement dans une base Oracle 9.2 par SQL. L'idée serait d'avoir une vue synthétique des tables utilisés et mise à jour. Le bonus serait la dernière date/heure de modifs.
    La vue souhaitée est :
    Table1|23
    Table2|0
    Table3|1000000
    Est ce couteux en perf ?
    Y a t'il un risque sachant que la requête tournerait sur une base TEST mais sur la même machine que prod.
    J'ai TOAD à dispo,

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Je vous sors de mon chapeau l'excellente requête de mnitu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select table_name,
           to_number(ExtractValue(dbms_XMLGen.GetXMLType 
           (
             'select count(*) cnt from ' || user || '.' || table_name
           ),'/ROWSET/ROW/CNT')) as rows_in_table
      from user_tables;

  3. #3
    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
    @waldar
    Merci, c’est très gentil mais, la requête ne m’appartient pas. Je l’ai trouvé sur OraFaq.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Mnitu, je ne sais pas vers quoi pointe ton lien en particulier mais je crois que c'est Laurent Schneider qui est à l'origine de la requête
    http://laurentschneider.com/wordpres...ll-tables.html

  5. #5
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Super intéressant !!

    Une requête identique existe t-elle pour comptabiliser les t-uples d'une partition ou d'une subpartition en 11g ?

    à partir des vues ALL_TAB_PARTITIONS, ALL_TAB_SUBPARTITIONS

    Merci

  6. #6
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    c'est couteux de faire un count(*) sur toutes les tables d'un schéma.

    pourquoi ne pas prendre la colonne num_rows et last_analyzed de la table user_tables pour voir le nombre de lignes et voir si c'est fiable comme indicateur?

    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT table_name, num_rows, last_analyzed
      FROM user_tables;

  7. #7
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    au niveau perf c'est pas top : tests réalisées sur plusieurs tables de plusieurs millions de lignes (plusieurs minutes)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    merci beaucoup

  9. #9
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par PpPool Voir le message
    au niveau perf c'est pas top : tests réalisées sur plusieurs tables de plusieurs millions de lignes (plusieurs minutes)
    Normal, ce n'est pas magique ! Quand on accède à tous les blocs de données (y compris d'ailleurs, pour une question de HWM, ceux qui sont vides) on ne peut pas s'attendre à des performances mirobolantes.

  10. #10
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Normal, ce n'est pas magique ! Quand on accède à tous les blocs de données (y compris d'ailleurs, pour une question de HWM, ceux qui sont vides) on ne peut pas s'attendre à des performances mirobolantes.
    Bonjour Pomalaix

    tout à fait d'accord avec toi, je n'ai pas été assez précis. dsl.

    je voulais simplement signaler que cette requête est plus couteuse en terme de performances qu'une solution maison que nous avons réalisé en PL/SQL. Ps qui fait un simple count(*) de la table

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    les éléments apportés amène d'autres questions :
    - Pouvez vous m'indiquer le lien vers cette requête PL/SQL ou l'insérer ?
    - Pour l'analyse, j'y avais pensé mais j'ai des pbs de backup et d'indisponibilité de la base pdt la nuit (par ailleurs je n'ai pas vu ou on peut planifier la tâche). Par ailleurs la bdd semble un peu laisser à l'abandon depuis qq années (pas de maintenance). Il semble que lancer l'analyse coute pas mal en performance et peut générer des temps de réponse dégradée du coup je me rabats sur la requête SQL.

  12. #12
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par PpPool Voir le message
    ...
    je voulais simplement signaler que cette requête est plus couteuse en terme de performances qu'une solution maison que nous avons réalisé en PL/SQL. Ps qui fait un simple count(*) de la table
    Ah, intéressant, c'est justement un point sur lequel je m'interrogeais en découvrant cette requête de derrière les fagots.
    Vous avez des résultat chiffrés ?

  13. #13
    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
    Citation Envoyé par skuatamad Voir le message
    Mnitu, je ne sais pas vers quoi pointe ton lien en particulier mais je crois que c'est Laurent Schneider qui est à l'origine de la requête
    http://laurentschneider.com/wordpres...ll-tables.html
    C’est tout à fait possible. J’ai indiqué simplement quelle a été ma source d’inspiration.

    PS. Le lien ne point pas vers une discussion particulière, juste sur le forum.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Jenesépa Voir le message
    - Pouvez vous m'indiquer le lien vers cette requête PL/SQL ou l'insérer ?
    Regardez le lien que j'ai posté vers le blog de Laurent Schneider, dans les commentaires il propose aussi un bloc PL/SQL où il précise d'ailleurs que c'est plus performant.

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

Discussions similaires

  1. Compter des enregistrements pour chaque table
    Par piflechien73 dans le forum Développement
    Réponses: 8
    Dernier message: 19/11/2011, 21h14
  2. Réponses: 13
    Dernier message: 15/04/2010, 15h23
  3. [MySQL] Créer un enregistrement pour chaque ligne d'une zone de texte
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/09/2009, 21h14
  4. Réponses: 4
    Dernier message: 18/06/2009, 16h12
  5. Taille de chaque table dans une base de donnée
    Par Florent PORRAS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/09/2005, 22h22

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