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 :

Problème les Tablespace TEMP


Sujet :

Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 109
    Points : 56
    Points
    56
    Par défaut Problème les Tablespace TEMP
    Bonjour,

    j’espère que vous êtes en bonne santé.

    Bon, j'ai besoin de vous je fais une simple requête de Select, mais elle me retourne un message d'erreur, voila requête:

    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
    SELECT  G_T1.ID_Client , 
    G_T1.ID_Nom , 
    G_T1.ID_Age , 
    G_T0.N_Fail , 
    G_T2.Date_MOIS , 
    G_T5.G_F1 , 
    G_T3.Flag  
    FROM  tab1 G_T0, 
    tab2 G_T1, 
    tab3 G_T2, 
    tab3 G_T3, 
    tab5 G_T4, 
    (SELECT  SUM(G_T7.Taux * G_T6.nmbre )  AS G_F1, 
    G_T8.ID_Age  AS G_F2, 
    G_T6.ID_Nom  AS G_F3  
    FROM  tab2 G_T6, 
    tab1 G_T7, 
    tab5 G_T8  
    WHERE ( G_T6.ID_Nom = G_T7.ID_Nom  AND G_T6.ID_Client = G_T7.ID_Client   AND G_T7.Date_MOIS = 201312   )
    AND ( G_T8.ID_Age = G_T6.ID_Age )
    AND ( ( G_T6.Date_MOIS BETWEEN 201401  AND TO_NUMBER(TO_CHAR(DECODE ( 'm' ,'d', G_T8.Date_2 + - 1 ,'dd', G_T8.Date_2 + - 1 ,'ddd', G_T8.Date_2 + - 1 ,'dddd', G_T8.Date_2 + - 1 ,'m', ADD_MONTHS(G_T8.Date_2,- 1 ),'mm', ADD_MONTHS(G_T8.Date_2,- 1 ),'mmm', ADD_MONTHS(G_T8.Date_2,- 1 ),'mmmm', ADD_MONTHS(G_T8.Date_2,- 1 ),'y', ADD_MONTHS(G_T8.Date_2,- 1 *12),'yy', ADD_MONTHS(G_T8.Date_2,- 1 *12),'yyyy', ADD_MONTHS(G_T8.Date_2,- 1 *2),'h', G_T8.Date_2 + 1/24,'hh', G_T8.Date_2 + 1/24,'n', G_T8.Date_2 + 1/1440,'nn', G_T8.Date_2 + 1/1440,'s',G_T8.Date_2 + 1/86400,'ss',G_T8.Date_2 + 1/86400) ,'yyyymm' ) ) ) AND ( G_T8.C_STAT_NEGOCE = 2  AND TO_NUMBER(TO_CHAR(G_T8.Date_2,'yyyymm' ) )  <= 201402 ) )  
    GROUP BY G_T8.ID_Age , 
    G_T6.ID_Nom   
    ) G_T5  
    WHERE ( G_T1.ID_Client = G_T3.ID_Client  AND G_T1.ID_Nom = G_T3.ID_Nom   AND G_T3.Flag= 'C'   )
    AND ( G_T2.Date_MOIS_CUM = G_T1.Date_MOIS  AND G_T2.Date_MOIS = 201402   )
    AND ( G_T0.ID_Client = G_T1.ID_Client  AND G_T0.ID_Nom = G_T1.ID_Nom   AND G_T0.Date_MOIS = 201312   )
    AND ( G_T1.ID_Age = G_T4.ID_Age )
    AND ( G_T4.ID_Age = G_T5.G_F2 )
    AND ( ( G_T4.C_STAT_NEGOCE = 2  AND TO_NUMBER(TO_CHAR(G_T4.Date_2,'yyyymm' ) )  <= 201402 ))  
    GROUP BY G_T1.ID_Client , 
    G_T1.ID_Nom , 
    G_T1.ID_Age , 
    G_T0.N_Fail , 
    G_T2.Date_MOIS , 
    G_T5.G_F1 , 
    G_T3.Flag

    Et au lieu de me retourner un ensemble de ligne, elle me retourne ce message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ORA-01652: impossible d'étendre le segment temporaire de 129 dans le tablespace TEMP
    01652. 00000 -  "unable to extend temp segment by %s in tablespace %s"
    *Cause:    Failed to allocate an extent of the required number of blocks for
               a temporary segment in the tablespace indicated.
    *Action:   Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
               files to the tablespace indicated.
    Et vraiment je sais pas quoi faire, j'ai chercher sur internet, tout les sites citent que la solution c'est d'augmenter la taille des tablespaces j'ai essayer d'augmenter les tailles des tablespace, mais sans resultat car je sais même pas quelle table de ces tables dont je dois modifier.
    Merci de m'aider c'est vraiment urgent.

  2. #2
    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
    La requête fait peut être (probablement) des produits cartésien entre certaines tables ce qui consomme énormément de temp.
    Assurez vous que la requête est correcte.

    Concernant le tablespace temporaire :

    Viewing Space Usage for Temporary Tablespaces
    et
    Altering a Locally Managed Temporary Tablespace
    pour rajouter un datafile au tablespace temp.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Pour m'assurer qu'il n'y avait pas de produit cartésien, j'ai réorganisé la requête en utilisant les jointures normalisées, en supprimant les parenthèses inutiles et en simplifiant les expressions.
    Je n'ai pas trouvé d'erreur flagrante mais je te livre le résultat de mon travail, qui pourrait être plus efficace à l'exécution...
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    SELECT  G_T1.ID_Client
        ,   G_T1.ID_Nom
        ,   G_T1.ID_Age
        ,   G_T0.N_Fail 
        ,   G_T2.Date_MOIS 
        ,   G_T5.G_F1 
        ,   G_T3.Flag  
    FROM    tab1 G_T0
        INNER JOIN
            tab2 G_T1
            ON  G_T0.ID_Client  = G_T1.ID_Client
            AND G_T0.ID_Nom     = G_T1.ID_Nom
        INNER JOIN
            tab3 G_T2
            ON  G_T1.Date_MOIS  = G_T2.Date_MOIS_CUM
        INNER JOIN
            tab3 G_T3
            ON  G_T1.ID_Client  = G_T3.ID_Client
            AND G_T1.ID_Nom     = G_T3.ID_Nom
        INNER JOIN
            tab5 G_T4
            ON  G_T1.ID_Age = G_T4.ID_Age
        INNER JOIN
            (   SELECT  SUM(G_T7.Taux * G_T6.nmbre)  AS G_F1
                    ,   G_T8.ID_Age  AS G_F2
                    ,   G_T6.ID_Nom  AS G_F3  
                FROM    tab2 G_T6
                    INNER JOIN
                        tab1 G_T7
                        ON  G_T6.ID_Client  = G_T7.ID_Client
                        AND G_T6.ID_Nom     = G_T7.ID_Nom
                    INNER JOIN
                        tab5 G_T8
                        ON  G_T6.ID_Age     = G_T8.ID_Age
                        --  AND G_T6.Date_MOIS  BETWEEN 201401 AND TO_NUMBER(TO_CHAR(ADD_MONTHS(G_T8.Date_2, -1), 'yyyymm'))
                        AND G_T6.Date_MOIS  >= 201401 
                        AND G_T6.Date_MOIS  <  TO_NUMBER(TO_CHAR(G_T8.Date_2), 'yyyymm'))
                WHERE   G_T7.Date_MOIS      = 201312   
                    AND G_T8.C_STAT_NEGOCE  = 2  
                    AND G_T8.Date_2         < TO_DATE(20140301, 'yyyymmdd') -- TO_NUMBER(TO_CHAR(G_T8.Date_2, 'yyyymm')) <= 201402 
                GROUP BY G_T8.ID_Age 
                    ,   G_T6.ID_Nom   
            )   G_T5
            ON  G_T4.ID_Age = G_T5.G_F2
    WHERE   G_T0.Date_MOIS  = 201312
        AND G_T2.Date_MOIS  = 201402
        AND G_T3.Flag       = 'C'
        AND G_T4.Date_2     < TO_DATE(20140301, 'yyyymmdd') -- TO_NUMBER(TO_CHAR(G_T4.Date_2, 'yyyymm')) <= 201402
        AND G_T4.C_STAT_NEGOCE = 2
    GROUP BY G_T1.ID_Client 
        ,   G_T1.ID_Nom 
        ,   G_T1.ID_Age 
        ,   G_T0.N_Fail 
        ,   G_T2.Date_MOIS 
        ,   G_T5.G_F1 
        ,   G_T3.Flag
    ;
    On peut certainement faire mieux
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    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 al1_24 Voir le message
    ...
    Je n'ai pas trouvé d'erreur flagrante mais je te livre le résultat de mon travail, qui pourrait être plus efficace à l'exécution...
    ...
    Que est-ce que vous fait penser que votre requête sera plus "efficace" ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Je n'ai pas dit qu'elle sera plus efficace, mais qu'elle pourrait l'être. Nuance

    Je pense à la simplification de certaines expressions utilisées dans les restrictions ou les jointures, en particulier si les colonnes utilisées appartiennent à un index.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    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
    J'avais juste survoler mais dans la sous-requête par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     FROM    tab2 G_T6
                    INNER JOIN
                        tab1 G_T7
                        ON  G_T6.ID_Client  = G_T7.ID_Client
                        AND G_T6.ID_Nom     = G_T7.ID_Nom
                    INNER JOIN
                        tab5 G_T8
                        ON  G_T6.ID_Age     = G_T8.ID_Age
                        --  AND G_T6.Date_MOIS  BETWEEN 201401 AND TO_NUMBER(TO_CHAR(ADD_MONTHS(G_T8.Date_2, -1), 'yyyymm'))
                        AND G_T6.Date_MOIS  >= 201401 
                        AND G_T6.Date_MOIS  <  TO_NUMBER(TO_CHAR(G_T8.Date_2), 'yyyymm'))
    Du coup tab1 G_T7 et tab5 G_T8 sont en quelque sorte en produit cartésien ce qui ne pose évidemment pas de problème si les cardinalités des relations avec tab2 G_T6 sont 1.
    Et bon vu la jointure sur l'âge la requête est peut être à revoir.

    Exemple du problème potentiel :
    http://www.developpez.net/forums/d12...e/#post6958167

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/07/2008, 13h16
  2. Tablespace TEMP : croissance éxagérée
    Par vanderbes dans le forum Oracle
    Réponses: 5
    Dernier message: 10/12/2005, 10h36
  3. Dépendances dans les tablespaces Oracle
    Par learn dans le forum Oracle
    Réponses: 5
    Dernier message: 17/10/2005, 23h19
  4. [9i] Utilisation du tablespace TEMP
    Par Fabien Celaia dans le forum Oracle
    Réponses: 3
    Dernier message: 14/02/2005, 19h32
  5. [Oracle 8.0.5] EXP/IMP avec les tablespace
    Par bobunny dans le forum Import/Export
    Réponses: 3
    Dernier message: 19/10/2004, 15h33

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