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 :

Nombre total de lignes par table


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Nombre total de lignes par table
    Bonjour!

    Je travaille sur une base oracle 9.2.0.3 et oracle application 11i ERP(E_Business Suite)
    Je voudrai bien faire le suivi de l'augmentation de nombres d'enregistrements (lignes) pour chaque table mais sans avoir à préciser leur nom individualement comme dans la rquête suivante :
    select count(*) from NomDeMatble
    En fait ,je voudrai bien généraliser cette requête pour toutes les tables (car ma base contient enormément de tables ) et ça sera trop si je dois saisir par nom pour avoir le nombre total des ligne ?
    Si vous avez une idée oû un script qui pourra m'aider à réaliser cela ,pour ensuite pouvoir mettre cette reqûete ou script en tâche planifiée !

    Merci pour votre aide !

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Si les stats sont à jours (ce qui est le cas normal sur une base), il vous suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select table_name ,num_rows from dba_tables;
    Attention : le résultat ne sera pas super précis (date du dernier calcul) mais fourni un bon ordre d'idée.

  3. #3
    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 atporfi Voir le message
    En fait ,je voudrai bien généraliser cette requête pour toutes les tables (car ma base contient enormément de tables ) et ça sera trop si je dois saisir par nom pour avoir le nombre total des ligne ?
    Bonjour

    Le problème n'est pas du tout de devoir citer toutes les tables, mais le temps que ça prendrait d'effectuer physiquement le count(*) sur toutes vos tables.

    Vous pourriez exécuter le résultat de cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'SELECT COUNT(*) FROM ' || TABLE_NAME || ';' FROM DBA_TABLES WHERE OWNER='&NOM_SCHEMA';
    mais pour des raisons de performances, ça n'est pas recommandé, et la proposition de Leo est bien plus adaptée.
    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

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je confirme, j'avais fait une fonction avec une vue associée pour faire la même chose et ce n'est pas vraiment optimum.
    Dans un cadre temporaire de développement, ça dépanne, surtout quand tu cherches à avoir des infos toutes les 10 minutes.

    Pour info, ça donnait ça :
    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
    CREATE OR REPLACE FUNCTION F_COUNT(TABLE_NAME IN VARCHAR2) RETURN NUMBER AS
    request VARCHAR2(300);
    nb_lines NUMBER;
    BEGIN
      request := 'SELECT COUNT(*) FROM ' || TABLE_NAME;
      EXECUTE IMMEDIATE request
      INTO nb_lines;
      RETURN nb_lines;
     
    EXCEPTION
    WHEN others THEN
      RETURN NULL;
    END F_COUNT;
     
    CREATE OR REPLACE force VIEW F_COUNT_ALL(TABLE_NAME,   nb_lines_reel,   nb_lines_stat,   last_analyzed) AS
    SELECT ut.TABLE_NAME,
      F_COUNT(ut.TABLE_NAME) nb_lines_reel,
      ut.num_rows nb_lines_stat,
      ut.last_analyzed
    FROM user_tables ut
    ORDER BY ut.TABLE_NAME;
    Pour une approche intelligente, autant lancer le calcul des stats puis piocher les infos dans la vue USER_TABLES (ou assimilées).

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    et surtout faut se poser la question de l'exploitation du résultat... parce que plus de 40000 tables, j'vois pas bien l'intérêt d'avoir une info si excaustive. Tu peux déjà te limiter au 10 ou 20 tables les plus grosses or APPLSYS (ou seulement les requests) et SYS ou SYSTEM.

    NUM_ROWS c'est déjà pas mal comme info

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Bonjour !
    Je suis tte à fait d'accord avec vous càd viser les plus grosses tables en premier lieu mais si je dois me baser sur le num_rows selon les stats (les plus recement calculées)
    Quelle serait la fréquence (idéale) de calcul des stats la plus conseillée pour ma base ,car je ne sais pas si c nécessaire de le faire quotiennement ou chaque fin de semaine !
    Sachant que nous sommes en ce moment sur une base prod et j'ai peur que la taille des tables augmente rapidement ,ce qui me pousse à avoir une idée globale sur l'évolution du nombre d'enregistrements

    Merci pour votre collaboration !

  7. #7
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Il n'y a pas de fréquence idéale absolue, sinon, ça aurait déjà été automatisé !

    Mais en 9i, il y a les LIST_STALE et GATHER_STALE sur des tables MONITORING....

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Enfin, si je vous demande "la fréquence" parapport à votre experience pratique ,quelle serai votre réponse ?

  9. #9
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    sur certaines tables, une fois par migration (8i, 9i, ...), sur d'autres, tous les jours.

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    C parfait ,je crois qu'il vaut mieux le faire qotidiennement et comme ça je seari ammener à automatiser ma requête de calcul de (num_rows) en crontab chaque fin de journée ,et ceci me permettra de faire un bon suivi ,car notre administrateur systeme veut avoir une idée globale sur lataille de labase de donnée

    Merci pour votre aide précieuse!

  11. #11
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    En 10g, le job créé par défaut GATHER_STATS_JOB s'exécute par défaut toutes les nuits entre 22H et 6H et durant le week-end. Il calcule les statistics sur les objets qui n'ont pas de statisques et sur les objets dont au moins 10% des lignes ont été modifiées.

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    d'exérience, dans OeBS, tous les jours c'est très compliqué quand tu commences à avoir du volume... creuse l'idée de MONITORING de Leo qui fonctionne parfaitement

  13. #13
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par orafrance Voir le message
    d'exérience, dans OeBS, tous les jours c'est très compliqué quand tu commences à avoir du volume... creuse l'idée de MONITORING de Leo qui fonctionne parfaitement
    C'est d'ailleurs ce que fait le job de la 10g...

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    C noté je vais voir avec le monotoring !

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

Discussions similaires

  1. [AC-2007] Afficher le nombre total de ligne d'une table
    Par Crachover dans le forum IHM
    Réponses: 2
    Dernier message: 26/02/2010, 09h46
  2. TOTAL des enregistrements par table
    Par LDDL dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/03/2007, 14h17
  3. Nombre total de lignes d'un fichier texte
    Par delamarque dans le forum VBScript
    Réponses: 3
    Dernier message: 13/02/2007, 14h50
  4. [VBA-Excel] Nombre total de ligne d'un onglet
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/01/2007, 23h38
  5. Réponses: 1
    Dernier message: 11/12/2006, 12h45

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