Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2011, 20h10   #1
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 179
Points : 31
Points : 31
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.
rouliane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 16h49   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
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 :
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;
/
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 20h47   #3
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 179
Points : 31
Points : 31
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.
rouliane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 15h06   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Ne parlez-vous pas simplement de la colonne HIGH_VALUE de la vue DBA_TAB_PARTITIONS ?
Code :
1
2
3
SELECT table_owner, table_name, partition_name, high_value
  FROM sys.dba_tab_partitions
 WHERE table_owner NOT IN ('SYS', 'SYSTEM');
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 13h39   #5
Membre confirmé
 
Avatar de Ahmed AANGOUR
 
Homme Ahmed AANGOUR
DBA Etudes Oracle
Inscription : janvier 2010
Messages : 123
Détails du profil
Informations personnelles :
Nom : Homme Ahmed AANGOUR
Âge : 33
Localisation : France

Informations professionnelles :
Activité : DBA Etudes Oracle

Informations forums :
Inscription : janvier 2010
Messages : 123
Points : 217
Points : 217
pour connaitre la dernière partition:
Code :
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?
__________________
Mon blog Oracle: http://ahmedaangour.blogspot.com/
Ahmed AANGOUR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 20h31   #6
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 179
Points : 31
Points : 31
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.
rouliane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 21h56   #7
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 703
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 703
Points : 1 630
Points : 1 630
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.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 22h11   #8
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 179
Points : 31
Points : 31
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
rouliane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h22.


 
 
 
 
Partenaires

Hébergement Web