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 :

[11gR2] Besoin de conseils sur la gestion des partitions sur un Datawarehouse


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut [11gR2] Besoin de conseils sur la gestion des partitions sur un Datawarehouse
    Bonjour,

    J'aurai besoin d'un conseil méthodologique de gestion de mes partitions. Voici le pitch, merci d'avance


    Suite à la taille croissante de mes tables de faits de mon Datawarehouse, j'ai décidé d'utiliser les options de partitionnement Oracle (je suis en 11g R2).

    Chaque mois, nous réalisons des archivages (des photos) de données au sein des tables de fait (c'est à dire que chaque donnée est dupliquée) . Chaque table de fait contient donc une colonne VERSION_ARCHIVAGE qui fait partie de la clé.

    Plutôt que d'utiliser des partition "Range" qui ne correspondent pas à notre besoin, j'ai choisi un mode de partitionnement en "Liste"

    Ainsi mes tables de fait sont bâties selon le même "standard" avec :
    - une partition P_ARC_J1 qui contient les données à J-1 (valeur 'J-1' de la colonne VERSION_ARCHIVAGE) écrasée tous les jours
    - une partition P_ARC_MOISM qui contient le dernier mois archivé (valeur '10/2012' de la colonne VERSION_ARCHIVAGE)
    - une partition P_ARC_MOISX qui contient les 24 derniers mois archivés (valeur DEFAULT)
    - une partition P_ARC_MOISOLDS qui contient tous les autres mois déplacés sur un tablespace d'archive (mois d'archivage listés manuellement)

    Cette stratégie me permet :
    - d'accélérer les chargements quotidiens de ma table de fait (un TRUNCATE de la partition P_ARC_J1 est moins couteux qu'un DELETE WHERE VERSION_ARCHIVAGE='J-1')
    - d'accélérer les requêtes sur le J-1 ou le dernier mois archivé (soit 90% des requêtes environ)


    Tout irait pour le mieux dans le meilleur des monde sauf lorsque survient la fin du mois :

    en effet, chaque mois, je doit :
    - déplacer la version d'archivage 10/2012 de la partition P_ARC_MOISM vers P_ARC_MOISX
    - associer le futur archivage 11/2012 à la partition P_ARC_MOISM
    - déplacer la version d'archivage 10/2010 dans P_ARC_MOISOLDS, etc, ...


    J'aurais aimé créer une procédure PL/SQL, à lancer chaque mois, qui réorganiserait mes partitions
    Le problème, c'est que les ordres SPLIT et MERGE sont des ALTER TABLES et donc m’obligerai à passer par des EXECUTE IMMEDIATE dans la procédure (pas bon)
    En +, j'aimerai rendre dynamique tout cela en faisant un curseur (une boucle) via 'dba_tab_partitions' sur toutes les tables partitionnées de la base (donc utiliser une variable 'nom_table' utilisée par un USING dans le EXECUTE IMMEDIATE) mais ce n'est pas possible apparemment.

    Voila un exemple de code que j'avais commencé à écrire mais qui génère à l’exécution une erreur ORA-06546 dès la ligne 11 ("L'instruction DDL est exécutée dans un contexte interdit") :
    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
     
    -- on demarre le parcours de la liste des tables candidates
    OPEN curTABLES;
    LOOP
     FETCH curTABLES INTO v_TABLE;
     EXIT WHEN curTABLES%NOTFOUND;
     
    --------------------------------------------------------------------------------------------------------------
     -- Renommage de la partition d'archive P_ARC_MOISX en P_ARC_MOISX_TEMP 
    v_txt_ALTER := 'ALTER TABLE :1 RENAME PARTITION P_ARC_MOISX TO P_ARC_MOISX_TEMP'; 
    EXECUTE IMMEDIATE v_txt_ALTER USING v_TABLE.NOM_TABLE;
     
    --------------------------------------------------------------------------------------------------------------
    -- Fusion des 2 partitions au sein de la partition P_ARC_MOISX
    --> la mois archivé précédemment est intégré à la partition P_ARC_MOISX
     
    v_txt_ALTER :=
    	'ALTER TABLE :1
    	MERGE PARTITIONS P_ARC_MOISM, P_ARC_MOISX_TEMP
    	INTO  PARTITION  P_ARC_MOISX
    	NOLOGGING
    	COMPRESS FOR OLTP
    	UPDATE GLOBAL INDEXES';
     
    EXECUTE IMMEDIATE v_txt_ALTER USING v_TABLE.NOM_TABLE;
     
    --------------------------------------------------------------------------------------------------------------
    -- Re-création de la partition P_ARC_MOISM avec le futur mois d'archivage
     
    v_txt_ALTER :=
    'ALTER TABLE :1 SPLIT PARTITION P_ARC_MOISX
    VALUES (:2) INTO (PARTITION P_ARC_MOISM)
    NOLOGGING
    COMPRESS FOR OLTP
    UPDATE GLOBAL INDEXES';
     
    EXECUTE IMMEDIATE v_txt_ALTER USING v_TABLE.NOM_TABLE, v_mois_archive;
     
    END LOOP;
    COMMIT;
    CLOSE curTABLES;


    Donc, comment vous y prendriez vous pour gérer mes partitions de manière dynamique et automatique chaque mois ?
    Toute aide ou début de solution serait grandement apprécié ! ;-)


    Merci de m'avoir lu jusqu'au bout

  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
    USING c'est pour les variables de liason, pour le nom des tables et des colonnes, il faut concaténer.
    Sinon pas d'avis sur la méthode, n'étant pas dba.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    OK, en effet, cela fonctionne avec une concaténation des variables AVANT l'appel de l'EXECUTE IMMEDIATE

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --------------------------------------------------------------------------------------------------------------
    -- (Re)création de la partition P_ARC_MOISM avec le mois d'archivage spécifié (v_mois_archive)
    --------------------------------------------------------------------------------------------------------------
     
    v_txt_ALTER :=
    'ALTER TABLE '||v_TABLE.NOM_TABLE_COMPLET||' SPLIT PARTITION P_ARC_MOISX
    VALUES ('''||v_mois_archive||''') INTO (PARTITION P_ARC_MOISM NOLOGGING COMPRESS FOR OLTP, PARTITION P_ARC_MOISX NOLOGGING COMPRESS FOR OLTP)
    UPDATE GLOBAL INDEXES';
     
    EXECUTE IMMEDIATE v_txt_ALTER;

    Merci beaucoup, maintenant c'est vraiment nickel

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

Discussions similaires

  1. [WS 2008] Délégation des droits sur la gestion des fichiers ouverts
    Par mims1664 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 16/11/2010, 10h44
  2. Réponses: 0
    Dernier message: 13/03/2010, 10h20
  3. je cherche des tutoriels sur la gestion des processus en C++, merci
    Par phenix1988 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 02/03/2009, 10h44
  4. Gestion des erreurs sur les noms des villes
    Par yosryosr dans le forum Pascal
    Réponses: 3
    Dernier message: 18/04/2008, 11h52
  5. gestions des erreurs sur les Noms des villes
    Par yosryosr dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2008, 12h07

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