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 06/02/2008, 18h28   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 102
Points : 14
Points : 14
Par défaut manipulation de partitions sur table

Bonsoir,
En Oracle 9i je voudrais créer une table partitionnée par range, sur une valeur de clé XY que je récupère dans une table paramètre en début de traitement.
Cette valeur me permet selon le cas, soit de rajouter une partition à ma table, soit de vider la dernière partition présente puis la renommer avec la nouvelle valeur XY lue sur la table paramètre.
Ce qui donne soit
un alter table add partition XY+1,
ou alors
un truncate table partition XY-1
puis
un alter table rename partition rename XY-1 to XY

Pouvez vous m'aider à trouver les bons DDL et m'alerter sur les problèmes que cela pourrait engendrer, ou pire l'infaisabilité de la solution.

Merci
debdba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 09h29   #2
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
La doc officielle est ici
Tu pourras y trouver tous les ordres DDL dont tu as besoin
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2008, 09h17   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 102
Points : 14
Points : 14
Par défaut manipulation de zone date pour partitionner

Bonjour,

Merci pour le lien.
D'aprés la doc je pourrais créer une table partitionnée par mois et j'aimerais pour chaque partition définir des subpartition par liste sur la valeur du jour dans le mois (partition).
Seulement j'ai un problème comment faire pour isoler la valeur du mois et la valeur du jour dans une zone déclarée date.

Merci pour votre aide
debdba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2008, 14h23   #4
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Code :
1
2
TO_DATE(champ_date,'MM')
TO_DATE(champ_date,'DD')
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2008, 16h11   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 102
Points : 14
Points : 14
merci ,
En revanche ce que je n'arrive pas à savoir c'est si je peux créer une table telle que

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE empdata
( empno number, 
    deptno number, 
    hiredate date,
    salary number)
PARTITION BY RANGE TO_DATE(hiredate,'MM')
SUBPARTITION BY LIST TO_DATE(hiredate,'JJ')
(PARTITION janvier VALUES LESS THAN (to_date('01-02-08','DD-MM-YY'))
 (SUBPARTITION jour1 VALUES ('01'),
(SUBPARTITION jour2 VALUES ('02'),
(SUBPARTITION jour3 VALUES ('0"'),
etc etc

Merci pour votre aide
debdba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2008, 18h13   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 102
Points : 14
Points : 14
j'ai modifié l'ordre de création par ceci

CREATE TABLE testdate
( empno number,
deptno number,
hiredate date,
salary number)
PARTITION BY RANGE (hiredate)
SUBPARTITION BY LIST (hiredate)
(PARTITION janvier VALUES LESS THAN (to_date('01-02-08','DD-MM-YY'))
SUBPARTITION jour1 VALUES ('01'),
SUBPARTITION jour2 VALUES ('02'),
SUBPARTITION jour3 VALUES ('03'),
SUBPARTITION jour4 VALUES ('04')),
PARTITION fevrier VALUES LESS THAN (to_date('01-03-08','DD-MM-YY'))
(SUBPARTITION jour1 VALUES ('01'),
SUBPARTITION jour2 VALUES ('02'),
SUBPARTITION jour3 VALUES ('03'),
SUBPARTITION jour4 VALUES ('04'))
) tablespace tools;


mais malheureusement j'obtiens cette erreur
SQL> @create-table.sql
SUBPARTITION jour1 VALUES ('01'),
*
ERROR at line 9:
ORA-14020: this physical attribute may not be specified for a table partition


Pensez vous qu'il n'est pas possible de créer une partition sur le mois et des subpartition sur le jour déclaré en liste?????
debdba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2008, 19h46   #7
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Pour un partitionnement par liste, on ne peut utiliser qu'une liste de littéraux ou constantes, sinon l'erreur suivante apparaît:

Citation:
ERREUR a la ligne 10 :
ORA-14308: la frontiere de partition doit etre un element de type : string,
datetime, number ou litteral interval, ou NULL.
Une solution possible pourrait consister à ajouter une colonne supplémentaire à votre table qui stocke le jour du mois (à alimenter par trigger par exemple). Dans ce cas là, l'exemple suivant marche en 10.2:
Code :
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
 
SQL> CREATE TABLE testdate
  2  ( empno number,
  3  deptno number,
  4  hiredate date,
  5  hireday number,
  6  salary number)
  7  PARTITION BY RANGE (hiredate)
  8  SUBPARTITION BY LIST (hireday)
  9  (PARTITION janvier VALUES LESS THAN (to_date('01-02-2008','DD-MM-YYYY'))
 10  (
 11  SUBPARTITION janjour1 VALUES (1),
 12  SUBPARTITION janjour2 VALUES (2),
 13  SUBPARTITION janjour3 VALUES (3),
 14  SUBPARTITION janjour4 VALUES (4)
 15  ),
 16  PARTITION fevrier VALUES LESS THAN (to_date('01-03-2008','DD-MM-YYYY'))
 17  (
 18  SUBPARTITION fevjour1 VALUES (1),
 19  SUBPARTITION fevjour2 VALUES (2),
 20  SUBPARTITION fevjour3 VALUES (3),
 21  SUBPARTITION fevjour4 VALUES (4)
 22  )
 23  );
 
TABLE creee.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 10h09   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 102
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 102
Points : 14
Points : 14
Bonjour,
C'est bien dommage car je suis en 9.2, et en plus je n'ai pas la possibilité de rajouter une colonne.
Si quelqu'un voit une autre solution que de partitionner par range sur le jour, afin d'éviter un trop grand nombre de partitions, cela m'aiderait bien.

Merci encore
debdba 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 18h52.


 
 
 
 
Partenaires

Hébergement Web