|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 465 ![]() |
Bonjour à tous.
J'ai un petit souci avec la manipulation des partitions, que je ne maîtrise pas encore. J'ai des tables ayant une colonne en Number(3). Pour une évolution, cette colonne doit passer en Number(5). Pour modifier le type Number, la colonne doit être vide. Voici comment je pensais faire pour chaque table: - je crée une colonne temporaire pour préserver les données - je vide la colonne initiale et la modifie en Number(5) - je recopie et supprime la colonne temporaire. Problème: certaines tables sont partitionnées précisément sur cette colonne, et je ne peux pas changer son type. --> je supprime les partitions... sauf que je dois en laisser une (ORA-14083). En dehors du fait que je ne comprends pas pourquoi on ne peut pas supprimer toutes les partitions d'une table, je ne vois pas comment résoudre mon problème à part recréer de nouvelles tables (et partitions) et supprimer les anciennes. Merci de m'éclairer sur le sujet.
|
|
|
00
|
|
|
#2 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Au moins une bonne nouvelle : pour les tables non partitionnées, vous avez parfaitement le droit d'élargir la colonne sans qu'elle soit vide.
C'est effectivement sur les tables partitionnées que ça pose problème. Pour celles-là, DBMS_REDEFINITION me semble être la bonne piste. Et si besoin, des idées chez Tom Kyte qui aborde justement l'erreur ORA-14060 : http://asktom.oracle.com/pls/asktom/...:1392403659992
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#3 | |||
![]() ![]() |
Citation:
Code :
Edit : pas vu la réponse de Pomalaix le temps de faire le script !
__________________
Email : http://scr.im/waldar |
|||
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 465 ![]() |
Pour la modification du type, il est possible que je sois tombé sur une table partitionnée dès le départ. Je vais vérifier.
Concernant le package dbms_redefinition, je n'ai pas de problème de disponibilité. Pas sûr que ce soit la solution la plus simple (mais si je n'ai pas le choix...). Edit: pour la modification du type, effectivement ça fonctionne sur une table non partitionnée. |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 465 ![]() |
Bonjour.
Je continue le sujet en apportant quelques précisions. Il y a environ 500 tables ayant cette colonne à modifier. Pour celles n'étant pas partitionnées, pas de souci donc. Pour les autres, pour l'instant j'envisage la recréation de ces tables (et les index, partitions, etc...). J'essaie de concevoir la logique d'exécution dans un script PL/SQL dynamique. Pour les tables partitionnées: - création de la table cible par un 'CREATE TABLE t_cible as SELECT * FROM t_source where rownum<1' --> j'ai la table avec les contraintes sans les données, ni les index, ni les partitions - modification du type la colonne en Number(5); - création des index --> comment recopier simplement les index? - création des partitions --> j'ai récupéré les noms et j'ai des procédures spécifiques pour les créer - insertion des données, avec probablement un commit séquentiel car on a jusqu'à 18 millions de lignes par table - suppression (ou renommage) des anciennes tables - renommage des nouvelles tables En gros, je cherche le moyen le plus simple de dupliquer des tables, index, partitions et données comprises. |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 465 ![]() |
Bon, on va faire simple: export/import des tables partitionnées.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com