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 :

Partitionnement des tables


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Partitionnement des tables
    Bonjour à tous,

    j'aimerais savoir si le partitionnement d'une tables réserve forcement de l'espace sur les tablespaces utilisés?
    Si oui, comment faire pour que l'espace réservé soit le plus petit possible pour les partitions encore vide?
    Si non, comment partitionner sa table pour garder ses tablespaces le plus disponible possible lorsque les partitions sont vides?

    Ces questions viennent parce que j'ai été mainte fois confronté à des situations ou j'ai des tables partitionnées vides, mais qui occupaient un très important pourcentage de mes tablespaces.

    D'autre part, très souvent pendant le partitionnement d'une table, on a l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01658: impossible de créer l'ensemble de blocs contigus INITIAL pour le segment dans le tablespace MON_TABLE_SPACE
    .

    Ci-dessous un bout de code utilisé pour partitionner mais tables. Je fais remarqué que ces tables sont exclusivement utilisé pour des loads par SQL Loader, des INSERT et des SELECT, presque jamais d'UPDATE.
    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
     
    TABLESPACE TAB_SPACE_01_A
    PCTUSED    0
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    PARTITION BY RANGE (TRANSACTION_DATE)
    (  
      PARTITION TAB_PARTITION_201112 VALUES LESS THAN (TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
        NOLOGGING
        NOCOMPRESS
        TABLESPACE TAB_MONOCF_01_A
        PCTFREE    10
        INITRANS   1
        MAXTRANS   255
        STORAGE    (
                    INITIAL          64K
                    NEXT             16M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    BUFFER_POOL      DEFAULT
                   )
    )			   
    LOGGING 
    NOCOMPRESS 
    NOCACHE
    NOPARALLEL
    MONITORING;
    Mon code est-il optimal pour les usages de ma tables?
    Si non, quel sont les possibles améliorations à y apporter?

    Merci d'avance de vos contributions.

  2. #2
    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 071
    Points
    8 071
    Par défaut
    La réponse dépend de votre version, que vous n'avez pas précisé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

  3. #3
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Chaque partition alloue au moins un extent pour son INITIAL. Si on est sur un tablespace en UNIFORM on a probablement des extent assez larges. En AUTOALLOCATE, le premier extent sera probablement plus petit.

    Sinon, en 11g DEFERRED SEGMENT CREATION permet de n'allouer l'espace que lors du premier insert dans la partition.

    Donc dépends le la version, et de la définition du tablespace

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 52
    Points : 116
    Points
    116
    Par défaut
    Bonjour, juste un conseil :
    s'il est prévu de créer et/ou supprimer les partitions dynamiquement (chaque fin de mois, année ou jour) je te conseille de reprendre la date complète dans le nom crée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... TAB_PARTITION_<ladateexacte> ...
    Pour une meilleure lisibilité ensuite pour l'administration.
    Parceque TAB_PARTITION_201112 cela peut être 2 dates :
    Décembre 2011 ou le 20/11/2012, voir le 12/11/2020 ?

    Par ailleurs dans ce que l'on voit du code il ne sera pas possible d'insérer des enregistrements dont la date est supérieur au 01/01/2012 (... LESS THAN ...). Il faudra créer la partition adhoc pour pouvoir faire ces inserts.

    Franck.

Discussions similaires

  1. Partitionnement des tables mysql
    Par devhercule dans le forum Administration
    Réponses: 2
    Dernier message: 28/12/2012, 16h02
  2. Stats sur des tables partitionnées
    Par LBO72 dans le forum Administration
    Réponses: 1
    Dernier message: 14/06/2010, 16h45
  3. Partitionner des tables pendant l'import
    Par pat29 dans le forum Administration
    Réponses: 1
    Dernier message: 03/12/2007, 19h00
  4. Comment suivre le remplissage des tables partitionnées
    Par marvelromy dans le forum Oracle
    Réponses: 3
    Dernier message: 19/11/2007, 20h16
  5. Partitionner des tables existantes
    Par zestrellita dans le forum Administration
    Réponses: 13
    Dernier message: 29/04/2004, 17h49

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