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 :

Partition de table : ajout


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut Partition de table : ajout
    bonjour,

    Je suis en 11g, je voudrai partitionnement des tables trop lourdes, sans avoir à les recréer, mais j'ai du mal à trouver la syntaxe...

    quelque chose du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ALTER TABLE maTable
    ADD
    PARTITION BY RANGE (COL3) -- COL3 est une année.
    (
    PARTITION PART1 VALUES MORE THAN ('2008'),
    PARTITION PART2 VALUES LESS THAN ('2008'))
    );
    Par ailleurs, ais je besoin de "remplir" ces partitions, ou Oracle se débrouille t-il tout seul ???

    merci...

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Par défaut
    Partitionner une table existante par un simple ALTER TABLE n'est malheureusement pas possible.
    Une table ne peut être partitionnée qu'à sa création.
    Par contre, DBMS_REDEFINITION peut vous être d'une grande aide, et vous permettra pour ainsi dire de "transformer à la volée une table ordinaire en table partitionnée", sans devoir couper les accès à la table pendant sa transformation.

  3. #3
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut
    aie....

    bon, tout d'abord merci.

    je vais essayer d'utiliser ce package. J'ai trouvé un exemple complet, malheuresement en anglais.

    http://uhesse.wordpress.com/2010/02/..._redefinition/

    merci bcp.

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Par défaut
    Voici un petit exemple commenté en français :
    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
    SELECT * FROM scott.dept;
     
    BEGIN
       DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT','DEPT', dbms_redefinition.cons_use_pk);
    END;
    /
     
    CREATE TABLE scott.dept_int
    AS SELECT deptno, dname, loc emplacement, 0 AS effectif FROM scott.dept
    where 0=1;
     
    -- On ajoute le suffixe _DUP au nom de département lors du transfert des données
    BEGIN
       DBMS_REDEFINITION.START_REDEF_TABLE(
             'scott', 'dept','dept_int', 'deptno deptno, dname||''_DUP'' dname, loc emplacement', dbms_redefinition.cons_use_pk);
    END;
    /
     
    -- Si jamais on doit annuler l'opération
    --> exec dbms_redefinition.abort_redef_table('SCOTT', 'DEPT', 'DEPT_INT');
     
    -- Transfert des objets dépendants
    DECLARE
        num_errors PLS_INTEGER;
    BEGIN
    DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('SCOTT', 'DEPT','DEPT_INT', DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);
    dbms_output.put_line(num_errors);
    END;
    /
     
    -- Vérification du bon déroulement
    select object_name, base_table_name, ddl_txt from DBA_REDEFINITION_ERRORS;
     
     
    BEGIN
       DBMS_REDEFINITION.SYNC_INTERIM_TABLE('SCOTT','dept', 'dept_int');
    END;
    /
     
    BEGIN
       DBMS_REDEFINITION.FINISH_REDEF_TABLE('SCOTT','dept', 'dept_int');
    END;
    /
     
    select * from scott.dept;
     
    -- suppression de la table intermédiaire
    DROP TABLE scott.dept_int
    cascade constraints;
    Sur le principe, il faut noter que DBMS_REDEFINITION ne transforme pas vraiment, mais en donne l'illusion.
    Vous devez donc créer votre table partitionnée (avec un nom quelconque temporaire), vide, sans contraintes ni index ni rien.
    La transformation va à vrai dire consister à transférer toutes les données de la table source vers cette table cible, et à y reporter index et contraintes.
    (On peut aussi si on le souhaite transformer non seulement la structure, mais aussi les données.)
    Elle va aussi intervertir les noms de table : à la fin, la table finale partitionnée a le nom d'origine, la table d'origine non partitionnée a le nom temporaire.

    Dans mon exemple, je ne partitionne pas, mais j'ajoute une colonne et j'en renomme une autre ; de plus je modifie les données.

    La procédure CAN_REDEF_TABLE vérifie si la table peut être redéfinie à la volée, car ce n'est pas toujours possible.
    START_REDEF_TABLE démarre les transformations.
    COPY_TABLE_DEPENDANTS transfère tous les objets attachés : index, contraintes, déclencheurs
    SYNC_INTERIM_TABLE est facultatif
    FINISH_REDEF_TABLE conclut les opérations, et effectue le renommage final.

  5. #5
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut
    merci beaucoup.

    ca a le mérite d'être plus clair. Je vais m'y mettre...


  6. #6
    Membre éclairé Avatar de olivanto
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2005
    Messages
    513
    Détails du profil
    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2005
    Messages : 513
    Par défaut
    bonjour,

    Je remonte ce post pour deux questions (je sais qu'il y a un autre post sur le même sujet, mais je continue mes questions sur le mien !).

    1- j'ai partitionné, en test, une table sur un critère de date (en gros, j'ai une partition des données 'actuelles' sur les 4 dernières années, et une autre des données considérées comme 'obsolètes').
    Dois je ajouter un index sur ce critère de date pour accélerer la recherche dans la table, ou la partition sur ce critère suffit t-elle, sur ce point précis ?

    2- comment puis-je faire des tests de performances sur une table AVANT/APRES partition (afin de savoir si ce que j'ai fait, est utile ?)


    3- pourquoi je ne vois pas la taille des partitions, alors que je vois parfaitement le nombre d'enregistrements (je travaille sous Toad).

    merci,

Discussions similaires

  1. doc sur partition des tables
    Par daliok dans le forum Oracle
    Réponses: 1
    Dernier message: 16/01/2007, 11h52
  2. Réponses: 1
    Dernier message: 17/11/2006, 15h28
  3. [2.0] Colonne nulle d'une table - Ajout de DataRow via BindingNavigator
    Par sundjata dans le forum Accès aux données
    Réponses: 5
    Dernier message: 16/11/2006, 03h23
  4. Modification table : ajout de colonne puis insertion data
    Par nkongolo.m dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/06/2006, 19h37
  5. selection multiple vers une table ajout
    Par EE dans le forum Access
    Réponses: 12
    Dernier message: 18/05/2005, 16h56

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