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 by range


Sujet :

Administration Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par défaut Partition by range
    Bonjour,

    J'aurais une petite question à vous poser car la solution que j'ai trouvée ne me convient pas.

    J'ai une base de données avec une table partitionnée by range (au mois). Chaque partition contient l'ensemble des données d'un mois précis.
    J'ai une table PARTITION_MANAGEMENT qui contient l'ensemble des informations sur les partitions que j'ai installées avec notamment un champ "STATE" qui renseigne l'état de la partition : PREVIOUS (partition antérieure au mois courant), ACTIVE (partition du mois courant) et FUTURE.

    Cette table va être utilisée pour pouvoir gérer les partitions (notamment les droper) et j'ai donc besoin de mettre à jour cette table. Clairement ce qu'il m'intéresse le plus c'est de savoir quelle est la partition active (du mois en court) et de mettre alors à jour la table.

    Ma 1ère idée c'était de créer un job Oracle lancé chaque début de mois pour mettre à jour cette table. C'est une solution qui peut marcher mais je me demande s'il n'y a pas plus "propre". En gros est ce qu'il y a une information qui nous permette de savoir la partition courante utilisée par Oracle ?
    Ou sinon si vous avez une idée de solution je suis preneur

    Merci.

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonjour,

    Oracle ne connais pas vos règles de gestion applicatives, il ne sait donc absolument pas que la partition P_Avril_2011 (je la nomme aléatoirement comme ça, ça me semble parlant), il ne sait donc pas que cette partition est en cours actuellement, qu'elle ne le sera plus dans deux semaines et qu'une autre le deviendra.

    Par contre vous le savez. Vous pouvez donc , au choix, comme vous l'avez fait stocker ces informations dans une table ou créer une fonction (ou un package) PL/SQL qui vous donnera l'information.

    Imaginons que vous nommez la partitions P_YYYYMM


    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
    create or replace function partition_courante return varchar2 is
    begin
      return 'P_'||to_char(sysdate,'YYYYMM') ;
    end partition_courante;
    /
     
     
    create or replace function partition_suivante return varchar2 is
    begin
      return 'P_'||to_char(add_months(sysdate,1),'YYYYMM') ;
    end partition_suivante;
    /
     
     
    create or replace function partition_partante return varchar2 is
    begin
      return 'P_'||to_char(add_months(sysdate,-1),'YYYYMM') ;
    end partition_partante;
    /

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par défaut
    Merci pour ces précisions, c'est très clair.

    Je vais donc partir sur l'idée du job qui me permettra de mettre à jour tous les mois la partition active dans la table de management des partitions.

    Julien.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ne parlez-vous pas simplement de la colonne HIGH_VALUE de la vue DBA_TAB_PARTITIONS ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select table_owner, table_name, partition_name, high_value
      from sys.dba_tab_partitions
     where table_owner not in ('SYS', 'SYSTEM');

  5. #5
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    pour connaitre la dernière partition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select last_partition from (
    select  first_value(partition_name) over (order by partition_position desc) last_partition from user_tab_partitions 
    where table_name='PARTITION_MANAGEMENT'
    )
    where rownum=1 ;
    En quelle version d'Oracle êtes vous par ailleurs?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par défaut
    Merci pour vos réponses ;-)

    Je suis en Oracle 10gR2.

    J'étais parti au début sur les high_value mais ça me faisait un code pas super propre (je suis loin d'être un expert dans ce domaine, voire je débute ^^).
    Sélectionner la dernière partition aurait pu être utile (merci pour le code d'ailleurs, je note ça dans mes petits papiers), mais le problème c'est qu'on peut très bien avoir 50 partitions d'installées jusqu'en 2015 par exemple, donc sélectionner la dernière partition ne me donnerait pas beaucoup d'avantages.

    Finalement, je suis parti sur un nommage de partitions de la forme PARTITION_P_yyyy_mm et ça me permet de manipuler facilement les partitions. La table est mise à jour mensuellement via un job oracle en mettant la partition précédente à 'OLD' et la partition actuelle à 'active'. Je retrouve ma partition précédente via un to_char(add_months(sysdate,-1), 'yyyy_mm').

    Y'avait peut-être plus propre et plus "pro" mais vu que je débute j'ai pas trouvé mieux

    Merci à vous en tout cas.

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Personnellement je n'ai jamais eu besoin d'avoir une table qui référence les partitions. J'utilise plutôt un nom de partition significatif (genre YYYYMMDD).
    HIGH_VALUE n'est pas facile à manipuler car c'est une LONG.
    Cordialement,
    Franck.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par défaut
    Effectivement pachot, la manipulation est difficile des high value. Je les stockais dans un varchar2 mais c'est un peu crade comme façon de faire.

    Les modifs que je fais sont sur un système existant, c'est un besoin d'avoir une table qui référence les partitions, je m'en serais passé aussi

Discussions similaires

  1. Partition by range
    Par info.pascal dans le forum Oracle
    Réponses: 2
    Dernier message: 27/05/2013, 08h51
  2. rebuilt index avec "partition range"
    Par Jorafali dans le forum SQL
    Réponses: 0
    Dernier message: 06/10/2010, 17h56
  3. PB SYNTAXE : partition by list .. .. subpartition by range
    Par theworst dans le forum Administration
    Réponses: 3
    Dernier message: 13/03/2009, 14h08
  4. Partition by range
    Par drpark dans le forum Administration
    Réponses: 0
    Dernier message: 06/10/2008, 21h56
  5. Redimensionner partition Vista mais disque dur mal rangé
    Par Langouste dans le forum Windows Vista
    Réponses: 10
    Dernier message: 22/10/2007, 16h13

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