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

Oracle Discussion :

[DBMS_STATS][9i]Réaliser la même opération qu'avec ANALYZE.


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut [DBMS_STATS][9i]Réaliser la même opération qu'avec ANALYZE.
    Bonjour,

    Je suis en train de discuter avec des collègues pour mettre en place les calculs de statistiques avec le package DBMS_STATS. La doc. Oracle est assez opaque sur le sujet, et je n'ai pas trouvé d'exemples probants pour réaliser l'équivalent du "ANALYZE TABLE XXX COMPUTE STATISTICS FOR ALL INDEXED COLUMNS" ...

    Pourriez-vous m'aider ??

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 87
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Le nain Attila
    Bonjour,

    Je suis en train de discuter avec des collègues pour mettre en place les calculs de statistiques avec le package DBMS_STATS. La doc. Oracle est assez opaque sur le sujet, et je n'ai pas trouvé d'exemples probants pour réaliser l'équivalent du "ANALYZE TABLE XXX COMPUTE STATISTICS FOR ALL INDEXED COLUMNS" ...

    Pourriez-vous m'aider ??

    Merci d'avance.
    DBMS_STATS.gather_schema_stat (owner='mon_owner',cascade=>true) permet de calculer les stats sur les tables et les index qui en dépende de l'utilisateur spécifié

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Ce qui m'intéressait dans "ANALYZE ..." c'était de pouvoir calculer les statistiques pour une seule table.

    En fait, la question plus générale, est de savoir comment, avec DBM_STATS, réaliser les mêmes calculs qu'avec l'ancienne commande.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Pour calculer les statistques sur les tables Oracle, tu peux utiliser le package DBMS_STAT

    Ce package va te permettre de calculer les stats sur une table : DBMS_STATS.GATHER_TABLE_STATS
    Mais également sur un schéma BMS_STATS.GATHER_SCHEMA_STATS
    ou sur la base : GATHER_DATABASE_STATS
    ou un index : GATHER_index_STATS

    Afin de connaitre toutes les possibilités du package un vous y aiderat

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Et bien merci pour votre aide.

    En continuant mes recherches dans la documentation Oracle, j'ai aussi trouvé un package, spécifique aux calculs sur objets, DBMS_DDL, qui contient une procédure appelée ANALYZE_OBJECT ...

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Pourquoi ne pas utilisé le package dbms_stats.

    La seule différence qui pourrait te géner entre la commande Analyze et DBMS_STATS c'est qu'il n'est pas bon pour les chain_count , empty_block, et AVG_SPACE :

    Exemple :


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    SQL> create table dvp_analyze ( a varchar2(10) ,b number ) ; 
     
    Table créée.
     
    SQL> create table dvp_dbms ( a varchar2(10) ,b number ) ; 
     
    Table créée.
     
    SQL> 
    SQL> declare 
      2  i number ; 
      3  begin 
      4  for i in 0..10000
      5  loop 
      6  insert into dvp_analyze values ('DVP', i) ; 
      7  insert into dvp_dbms values ('DVP', i) ; 
      8  end loop ; 
      9  commit ;
     10  end ; 
     11  /
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> analyze table dvp_analyze compute statistics ;
     
    Table analysée.
     
    SQL> exec dbms_stats.GATHER_TABLE_STATS ('TEST','DVP_DBMS') ; 
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> 
    SQL> select table_name , num_rows , blocks , empty_blocks, AVG_SPACE , chain_cnt  
      2  from user_tables where table_name in ('DVP_ANALYZE','DVP_DBMS')  ;
     
    TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE
    ------------------------------ ---------- ---------- ------------ ----------
     CHAIN_CNT
    ----------
    DVP_ANALYZE                         10001         20            5       1588
             0
     
    DVP_DBMS                            10001         21            0          0
             0

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    J'ai commencé à écrire une procédure de calcul des statistiques Oracle avec DBMS_STATS (ch'uis gentil tout plein moi ).

    J'ai décidé d'essayer de profiter de la fonctionnalité offerte par GATHER_TABLE_STATS d'enchaîner le calcul des indexes avec le calcul des statistiques de la table (cascade à TRUE).

    Pour l'instant, je suis confronté à une erreur 20000, dont je ne trouve pas la solution ... D'après la documentation, cette erreur signifie que l'index n'existe pas, ou que je n'ai pas les privilèges sur l'index.

    L'index existe (c'est l'index associé à une contrainte unique (j'ai la même erreur pour les indexes associés aux contraintes primaires)) et c'est mon utilisateur qui les a créé ... Auriez-vous une idée ???

    Note 1 : Si j'utilise GATHER_INDEX_STATS, j'ai les mêmes erreurs.
    Note 2 : DBMS_STATS est mieux, au moins parce qu'il permet de paralléliser le calcul des stats.

    Merci.

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    J'ai un collègue pouvant se connecter sur metalink, qui m'a trouvé que cette erreur était référencée depuis longtemps (Juin 2003), mais qu'il n'y avait pas vraiment de résolution proposée.

    A priori, la procédure est sensible à la casse dans les noms d'objets et les indexes de "contraintes" sont mal aimé.

    Dommage

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/06/2008, 16h17
  2. [SQL] Réaliser un affichage de données avec possibilité de modification
    Par Adrien93 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 03/11/2006, 01h07
  3. Faire des opérations réelles avec bash ?
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 01/09/2006, 16h59
  4. Réponses: 11
    Dernier message: 06/01/2006, 12h15
  5. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 03h15

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