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 :

migration oracle9 en UTF8


Sujet :

Administration Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut migration oracle9 en UTF8
    Bonjour,

    je migre un base 8.1.7.4 en WE8ISO8859P1 vers une base 9.2.0.8 en UTF8. je fais un export des schémas sur la base source puis un import sur la base cible. j'ai un problème car les caractéres spéciaux (accents...) sont codés sur 2 caractères en UTF8 au lieu de 1 en WE8ISO. Cela provoque des depassements de taille de colonnes et le message suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IMP-00019: row rejected due to ORACLE error 1401
    IMP-00003: ORACLE error 1401 encountered
    ORA-01401: inserted value too large for column
    Je n'ai pas la possibilité de modifier le format des tables.
    Quelqu'un a t'il déjà rencontré ce type de problème?

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    oui, c'est une classique.
    vous devez créer les tables avec le NLS_LENGTH_SEMANTICS correctement positionné (i.e. CHAR) ou spécifier CHAR dans la définition des colonnes VARCHAR2 puis, ensuite, importer le dump IGNORE=Y ROWS=Y

    C'est lié à la structure UTF
    Téléphones= 10 caractères = 10 bytes en ISO, 12 en UTF
    et l'import garde la même structure VARCHAR2(10 BYTES) => VARCHAR2(10 BYTES), et ce quelque soit le NLS_LENGTH_SEMANTICS

    [EDIT]
    le plus simple et le plus propre serait sûrement de migrer la base de 8i en 9i (par upgrade) puis ensuite, de changer le CS
    [/EDIT]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Citation Envoyé par LeoAnderson
    oui, c'est une classique.
    vous devez créer les tables avec le NLS_LENGTH_SEMANTICS correctement positionné (i.e. CHAR) ou spécifier CHAR dans la définition des colonnes VARCHAR2 puis, ensuite, importer le dump IGNORE=Y ROWS=Y

    C'est lié à la structure UTF
    Téléphones= 10 caractères = 10 bytes en ISO, 12 en UTF
    et l'import garde la même structure VARCHAR2(10 BYTES) => VARCHAR2(10 BYTES), et ce quelque soit le NLS_LENGTH_SEMANTICS

    [EDIT]
    le plus simple et le plus propre serait sûrement de migrer la base de 8i en 9i (par upgrade) puis ensuite, de changer le CS
    [/EDIT]

    Je n'ai pas la possibilité de créer les tables car il s'agit d'un migration oracle application 11.0.3 vers oracle e-business 11.5.10. Le shema de données sur la base cible est créé par l'installation standard (rapidwiz).

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    si vous faites un import qui créé les tables, je ne vois pas en quoi vous ne pouvez pas créer les tables à la main ?!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Citation Envoyé par LeoAnderson
    oui, c'est une classique.
    vous devez créer les tables avec le NLS_LENGTH_SEMANTICS correctement positionné (i.e. CHAR) ou spécifier CHAR dans la définition des colonnes VARCHAR2 puis, ensuite, importer le dump IGNORE=Y ROWS=Y

    C'est lié à la structure UTF
    Téléphones= 10 caractères = 10 bytes en ISO, 12 en UTF
    et l'import garde la même structure VARCHAR2(10 BYTES) => VARCHAR2(10 BYTES), et ce quelque soit le NLS_LENGTH_SEMANTICS

    [EDIT]
    le plus simple et le plus propre serait sûrement de migrer la base de 8i en 9i (par upgrade) puis ensuite, de changer le CS
    [/EDIT]
    Je viens d'essayer, ça ne fonctionne pas, j'ai le même message d'erreur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    En effectuant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter database character set internal_use UTF8;
    sur la base 8.1.7.4 en WE8ISO8859P1, puis en faisant un export et un import sur la base cible, ça fonctionne et je retrouve tous mes caractères spéciaux. Ca parait un peu simple?

  7. #7
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Allez-y ! essayez tout et ensuite, à nous de réfléchir ?

    je vous avais conseillé de créer les tables, pas de les importer :

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Citation Envoyé par LeoAnderson
    Allez-y ! essayez tout et ensuite, à nous de réfléchir ?

    je vous avais conseillé de créer les tables, pas de les importer :
    il s'agit d'une base e-business 8, càd plusieurs centaines de tables, ça serait trop long à recréer les tables une par une.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Citation Envoyé par ljoly
    En effectuant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter database character set internal_use UTF8;
    sur la base 8.1.7.4 en WE8ISO8859P1, puis en faisant un export et un import sur la base cible, ça fonctionne et je retrouve tous mes caractères spéciaux. Ca parait un peu simple?
    Qui peut me dire ce que fait exactement le alter database?
    Dans metalink on me conseille d'effectuer également un csscan avant, A quoi ça sert? ça génére juste un report avec les lignes non convertibles ou tronqués?

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Les commandes ALTER DATABASE SET CHARACTER USE ou ALTER DATABASE SET CHARACTER INTERNAL_USE ne font pas de conversion des colonnes contenant des caractères mais change le jeu de caractères déclaré de la base d'après la note Metalink 66320.1.

    CSSCAN permet de vérifier que les données existantes seront bien reconnues dans le nouveau jeu de caractères: il ne doit signaler que des données ChangeLess sinon il y aura incohérence entre le jeu de caractères déclaré de la base et les données de la base

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Citation Envoyé par pifor
    Les commandes ALTER DATABASE SET CHARACTER USE ou ALTER DATABASE SET CHARACTER INTERNAL_USE ne font pas de conversion des colonnes contenant des caractères mais change le jeu de caractères déclaré de la base d'après la note Metalink 66320.1.

    CSSCAN permet de vérifier que les données existantes seront bien reconnues dans le nouveau jeu de caractères: il ne doit signaler que des données ChangeLess sinon il y aura incohérence entre le jeu de caractères déclaré de la base et les données de la base
    Je n'ai que des 'convertible', 'lossy conversion', 'exceed column size'. Connaissez-vous la signification ces valeurs? et les conséquences sur la base de donnée convertie

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    convertible: peut être converti uniquement par export/import.
    lossy: ne peut être converti par aucun moyen.
    exceed column size: les données seront tronquées s'il y a conversion, car la colonne est trop petite (les nouveaux caractères prennent au moins 2 octets au lieu d'un seul).

  13. #13
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par pifor
    convertible: peut être converti uniquement par export/import.
    lossy: ne peut être converti par aucun moyen.
    exceed column size: les données seront tronquées s'il y a conversion, car la colonne est trop petite (les nouveaux caractères prennent au moins 2 octets au lieu d'un seul).
    en d'autres termes et vu que vous avez déjà effectué l'alter database, vous avez pourri vos données !

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    heureusement c'était sur une base de test...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    merci pour les infos

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    Je ne comprends pas, j'ai effectué un scscan, qui m'a renvoyé juste un pb de 'exceed column size', après conversion par 'alter database character set internal_use UTF8' , j'ai des caractères spéciaux qui sont remplacés par des ?. Y a t'il un paramétrage à effectuer (dans la base ou sur le client) afin qu'ils s'affichent correctement.

  17. #17
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    oui, vous devez positionner le NLS_LANG sur le client afin de dire quel jeu de caractères vous souhaitez utiliser.

    Si vous choisissez un jeu qui ne contient pas certains des caractères stockés, vous aurez des ? ou des points d'interrogations inversés à la place.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Par défaut
    J'ai quelque chose de bizarre, pour une même requête

    sur sqlplus sous windows avec NLS_LANG = AMERICAN_AMERICA.UTF8, j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ITEM_DESCRIPTION
    --------------------------------------------------------------------------------
    Schl�ssel Nr. 2H 0418 f�r Taschenbox
    sur sqlplus sous unix avec NLS_LANG = American_America.UTF8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ITEM_DESCRIPTION
    --------------------------------------------------------------------------------
    Schlüssel Nr. 2H 0418 für Taschenbox
    Y a t'il quelque chose d'autre à configurer au niveau du client oracle ou au niveau du listener?

  19. #19
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Essayez avec NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252 et le client sqlplus graphique (sqlplusw.exe) ou Toad ou SQL Developper.

  20. #20
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    le problème est que Oracle ne peut pas faire mieux que le système.

    Il est probable que sous windows l'UTF soit mal géré, notamment sur un vieux Windows et/ou que le SQL*Plus graphique (qui est à éviter à tout prix !) en soit lui-même incapable !

    Ce n'est pas Oracle qui ne fonctionne pas, c'est le programme client et/ou l'OS.
    Essayez sous SQL*Plus en mode texte.

Discussions similaires

  1. Migration ISO8859_1 -> UTF8
    Par Reisubar dans le forum Administration
    Réponses: 2
    Dernier message: 21/07/2009, 19h16
  2. Migration ISO8859 UTF8 dev->prod
    Par deromemont dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/01/2008, 21h44
  3. Migration de oracle9 vers oracle10g
    Par ali.tn dans le forum Oracle
    Réponses: 5
    Dernier message: 19/11/2007, 10h43
  4. Réponses: 15
    Dernier message: 21/03/2006, 17h13
  5. Migration Oracle 8i WE8DEC => Oracle 9i UTF8
    Par stawen dans le forum Oracle
    Réponses: 3
    Dernier message: 06/01/2005, 11h44

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