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 :

Comment supprimer la fragmentation d'une table avec Oracle9


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Comment supprimer la fragmentation d'une table avec Oracle9
    Bonjour,

    J'ai une table dans ma base Oracle 9.2 qui s'est étendue. J'ai fait un export de ma table. Je l'ai récréer avec INITIAL 500M mais lorsque je l'import elle est toujours autant fractionnée. Comment faire ?

    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    comment regardes-tu le "fractionnement" ?

  3. #3
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Normalement, avec la 9.2, on est en LMT par défaut, non ? Donc le problème de fragmentation n'a plus lieu d'être normalement.

    Après, si tu veux regrouper ta table dans des extents tous contingüs, c'est autre chose... Il faut exporter/dropper les objets/réimporter tous les objets du tablespace, ou faire un tablespace supplémentaire et faire des

    alter table ... move ...
    alter index ... rebuild tablespace ...

    pour déplacer tes tables dans le nouveau tablespace (et tes indexes s'ils sont dans le même tablespace que tes tables...)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    j'utilise cette requete :

    select segment_name,tablespace_name,segment_type,extents,max_extents,bytes,owner
    from sys.dba_segments
    where owner != 'SYS' or ( owner = 'SYS' and segment_type = 'ROLLBACK')
    order by owner,segment_Type desc, segment_name

  5. #5
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Le problème n'est donc pas la fragmentation, mais le fait d'avoir des extents contigüs pour tes objets...

    En gros, ton tablespace est comme cela en LMT

    U U U U U U U U U U F F F F F

    Les U pour USED...

    Imaginons que tu créé une table qui prend 2 extents dans un tablespace :
    U U F F F F F F F F F F F F F F F

    Tu rajoutes d'autre objets :
    U U U U U U F F F F F F F F F F F

    Ta table s'étend (en bleu pour la table, noir pour le reste) :
    U U U U U U U U U U U U F F F F F

    Elle prend maintenant 6 extents. Si tu l'exportes et que tu l'efface, le LMT va mettre à Free tous les extents qui composaient cette table. Quand tu la recréé avec ton INITIAL = 500M il va reprendre autant d'extents nécessaires pour avoir les 500M. Dans notre cas, il va reprendre les 6 premiers extents de disponible. Résultat, ta table n'aura pas d'extents contigüs comme c'était le cas en DMT.

    Pour avoir ta table avec tes extents contigüs, il faut faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table MaTable move TablespaceQuiVaBien
    et là, ta table aura tous ses extents contigüs. Après, si tu veux réorganiser tout ton tablespace, il faut faire un alter table move de toutes tes table de ce même tablespace.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci de vos réponses.

    Pour le moment ça n'a rien changé.
    Si je fais : alter table article move tbs_data, j'ai l'erreur suivante : ORA-14133: impossible de combiner ALTER TABLE MOVE avec d'autres opérations

    Alors j'ai fait : alter table article move

    mais lorsque je repasse ma requete je ne vois toujours pas de changement :

    SEGMENT_NAME Tablespace Type Seg Ext Mext BYTES ---------- ------------- --------- ----- ------ ---------- ------
    ARTICLE TBS_DATA TABLE 106 ###### 528482304

  7. #7
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Oui, j'ai été un peu vite dans l'écriture de la commande, il manque la clause tablespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table article move tablespace nouveautablespace
    Par contre, si vous faites un alter table ... move tablespace ... sur le même tablespace, on revient exactement au même point que l'import où il prendra les 500M d'extents libre depuis le début du tablespace, donc il replacera la table au même endroit...

    Il faut donc absolument créer un nouveau tablespace vierge de tout objet pour avoir des extents contigüs.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par CD
    Normalement, avec la 9.2, on est en LMT par défaut, non ? Donc le problème de fragmentation n'a plus lieu d'être normalement.
    Attention aux raccourcis quand même

    La gestion LMT réduit la fragmentation mais ne peux en aucun cas l'erradique complétement

    Moi ce que j'aimerai c'est les clauses storages du tablespace et de la table parce que je vois mal comment on pourrait apporter un semblant de réponse sans cela

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par CD
    Oui, j'ai été un peu vite dans l'écriture de la commande, il manque la clause tablespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table article move tablespace nouveautablespace
    tablespace nouveautablespace n'est pas utile pour défragmenter

    ça n'a d'intérêt que pour déplacer la table.

  10. #10
    CD
    CD est déconnecté
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par orafrance
    Citation Envoyé par CD
    Oui, j'ai été un peu vite dans l'écriture de la commande, il manque la clause tablespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table article move tablespace nouveautablespace
    tablespace nouveautablespace n'est pas utile pour défragmenter

    ça n'a d'intérêt que pour déplacer la table.
    Oui, mais si on fait un alter table move tablespace sur toutes les tables du tablespace, ça va défragmenter le tablespace en question... Enfin on partira d'un tablespace fragmenté pour arriver à un tablespace défragmenté au final.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Au regard de la requête qui est lancé, le problème n'est pas dans le tablespace mais dans la table article

    ou alors c'est pas la bonne requête

    Attendons d'avoir toutes les infos

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Le tablespace et la table ont été créé depuis au moins 1 an et demi. Maintenant il y a 1 452 348 enregistrements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLESPACE tbs_DATA DATAFILE 
    'F:\BASE\tbs_data01.dbf' SIZE 500M REUSE AUTOEXTEND ON NEXT 10M 
    DEFAULT STORAGE ( INITIAL 5M NEXT 2M PCTINCREASE 0 MINEXTENTS 2 );
    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
    create table ARTICLE
    (
        ...
    )
    PCTFREE 10
    PCTUSED 40
    INITRANS 1
    MAXTRANS 255
    TABLESPACE TBS_DATA
    STORAGE (
       INITIAL     10M
       NEXT        5M
       MINEXTENTS  1
       MAXEXTENTS  249
       PCTINCREASE 0
    )
    /

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    [Modération, Orafrance : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

    le NEXT de la table est plus grand que le NEXT du tablespace

    Pourquoi ne pas utiliser les mêmes clause storage et surtout pourquoi ne pas créer un tablespace LMT ?

    http://oracle.developpez.com/guide/a...e/tablespaces/

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    La base était à l'origine en 7.3.4 puis 8i puis pour le moment en 9.2
    Nous n'avons pas suivi les nouvelles fonctionnalités apportée par ces nouvelles versions.
    Je vais essayer de mettre en place un tablespace avec l'option AUTOALLOCATE.

    Comment est ce que je peux regler mon problème d'extend pour le moment ?

    j'ai créer un nouveau tablespace
    CREATE TABLESPACE TBS_DATA03 DATAFILE
    'F:\BASE\TBS_data03.dbf' SIZE 700M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

    et j'ai fait : alter table article move tablespace tbs_data03;

    lorsque je repasse ma requete pour les extends, j'ai toujours le même nombre d'extends.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Et en quoi le nombre d'extents est problèmatique ?

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je pensai que cela pouvez jouer sur les performances d'accès aux données.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    si tu avais lu le lien que je t'ai laissé, tu aurais pu lire ceci : http://oracle.developpez.com/guide/a...lespaces/#L5.1

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'avais pas encore pris le temps de le lire jusqu'au bout . Merci

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

Discussions similaires

  1. [MySQL] Supprimer un champ d'une table avec un bouton.
    Par DevKast dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/02/2014, 09h16
  2. comment supprimer le contenu d'une table?
    Par glasgow dans le forum JDBC
    Réponses: 14
    Dernier message: 30/06/2009, 11h33
  3. Comment supprimer un verrou sur une table ?
    Par Laure13 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/03/2006, 15h10
  4. Comment supprimer les doublons d'une table?!
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/01/2006, 08h48
  5. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25

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