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

Oracle Discussion :

[ADMIN 9i] Changement de Datatypes :)


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut [ADMIN 9i] Changement de Datatypes :)
    Bonjour,

    allez une fois de plus, c'est repartit lol

    bon, le but du jeux aujourd'hui c'est de changer le datatype de colonnes PK qui sont référencées en FK dans d'autres tables, on va changer certaines de char(12) en varchar(12) et d'autres de char(12) en char(3)

    La question... :

    Y a t il un moyen moins bourrin que de récupérer les script de tout ce qui va autour des tables à modifier (indexs,PK,FK, etc...), tout dropper, changer les datatypes partout où c'est nécessaire, et enfin recréer tout les indexs et autres .... ?

    Paske sinon j'ai pas fini lol

    Merci d'avance

    EDIT : le but de la manoeuvre est de limiter le grossissement de la DB dans le temps (dans certaines tables on a 70 % de l'espace qui est alloué par des espaces provenant des types CHAR) et limiter les TRIM aussi bien dans les proc stocl que dans le code de l'appli

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    effectivement :

    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
     
    SQL> create table aa ( a char(10)) ;
     
    Table créée.
     
     
    SQL> insert into aa values ('DVP' ) ; 
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> alter table aa modify (a varchar2(10)) ; 
     
    Table modifiée.
     
    SQL> desc aa 
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     A                                                  VARCHAR2(10)
     
    SQL> select * from aa ; 
     
    A
    ----------
    DVP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par jaouad
    effectivement :

    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
     
    SQL> create table aa ( a char(10)) ;
     
    Table créée.
     
     
    SQL> insert into aa values ('DVP' ) ; 
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> alter table aa modify (a varchar2(10)) ; 
     
    Table modifiée.
     
    SQL> desc aa 
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     A                                                  VARCHAR2(10)
     
    SQL> select * from aa ; 
     
    A
    ----------
    DVP
    snif...
    bon bah chu partit pour quelques heures de boulot ....


    Merci quand même

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    euh .. derniere question ....
    comment je pourrais récupérer les scripts de création, un peu comme dans les onglets "Script" de TOAD ....????
    faut se les refaire à la main en fouillant les tables systèmes ?

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    qu'elle est votre version de base de données

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par jaouad
    qu'elle est votre version de base de données
    oups pardon.... 9.2.0

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    c'est le package dbms_metadata :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL>  select dbms_metadata.get_ddl('TABLE','EMP','SCOTT')  from dual ; 
     
    DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT')
    --------------------------------------------------------------------------------
     
      CREATE TABLE "SCOTT"."EMP"
       (    "EMPNO" NUMBER(4,0),
            "ENAME" VARCHAR2(10),

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par jaouad
    c'est le package dbms_metadata :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL>  select dbms_metadata.get_ddl('TABLE','EMP','SCOTT')  from dual ; 
     
    DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT')
    --------------------------------------------------------------------------------
     
      CREATE TABLE "SCOTT"."EMP"
       (    "EMPNO" NUMBER(4,0),
            "ENAME" VARCHAR2(10),
    coool

    excellent

    je crois ke je vais me faire une petite proc stock


    merci beaucoup pour cette aide

    A+

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    avec plaisir

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    on est pas en train de s'égarer là... parce qu'avec un SQL dynamique c'est plié en 2 minutes cette affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FOR i IN (SELECT owner,table_name, column_name, data_length
                      FROM all_tab_columns
                     WHERE data_type = 'CHAR'
                          AND owner NOT LIKE 'SYS%') LOOP
     
    EXECUTE IMMEDIATE 'alter table ' || i.owner || '.'
                                        || i.table_name || ' modify (' || i.column_name 
                                        || ' varchar2(' || i.data_length || '))' ; 
     
    END LOOP;
    Pas besoin de récupérer la recréation des tables et indexes ou contraintes

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par orafrance
    on est pas en train de s'égarer là... parce qu'avec un SQL dynamique c'est plié en 2 minutes cette affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FOR i IN (SELECT owner,table_name, column_name, data_length
                      FROM all_tab_columns
                     WHERE data_type = 'CHAR'
                          AND owner NOT LIKE 'SYS%') LOOP
     
    EXECUTE IMMEDIATE 'alter table ' || i.owner || '.'
                                        || i.table_name || ' modify (' || i.column_name 
                                        || ' varchar2(' || i.data_length || '))' ; 
     
    END LOOP;
    bah le truc c'est que la pluspart des colonnes à modifier sont des PK avec des FK dans les autres tables ...
    et lorsque je tente de modifier le datatype, il me sort une erreur de reference parent..., j'ai plus le message d'erreur en tête exactement...
    et ça provient selon moi des indexs posés sur ces colonnes, d'où le besoin de drop les indexs et contraintes , faire la modifs et ensuite les appliquer
    Pas besoin de récupérer la recréation des tables et indexes ou contraintes

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    il suffit de désactiver toutes les contraintes

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par orafrance
    il suffit de désactiver toutes les contraintes
    ok bah je vais refaire un essai.
    Je te tens au courant en debut d'aprem

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    bon bah on a établit un plan d'action
    on va se le faire barbare vu qu'on doit le faire assez vite, on va faire ça sur une DB à part,
    on a extrait tous les scripts des indexs, contraintes etc... avec le package dbms_metadata

    on va dropper toutes contraintes et indexs

    ensuite on va passer la moulinette d'orafrance
    (on drop tout de meme les constraints sinon il nous met un
    ORA-02267: column type incompatible with referenced column type)

    ensuite on va updater et "trimer" les champs que l'on a passé en varchar

    enfin on fait une serie de rebuilt table

    et pour terminer on recréé tous les contraints et index

    voilà

    merci à tous

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/03/2012, 14h32
  2. Changement du nom d'admin du serveur
    Par Génie dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/11/2008, 21h22
  3. Changement de nom compte Admin
    Par willytito dans le forum Windows XP
    Réponses: 1
    Dernier message: 06/09/2007, 14h43

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