J'essaie d'importer un fichier dmp d'une base de données vers une autre. Le problème est que certains caractères spéciaux danois ne sont pas importés correctement car une conversion de la carte de caractères est effectuée pendant l'importation.
C'est l'information que je reçois lorsque je lance l'importation avec imp (voir la note sur la conversion possible des caractères) :
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V10.02.01 via conventional path
import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
. importing USERNAME's objects into USERNAME
. . importing table "TABLE2"
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: værdi er for stor for kolonnen "USERNAME"."TABLE2"."NAME" (faktisk: 32, maksimum: 30)
Column 1 408261
Column 2 KUBEN FÆLLES MÅLER
Chaque caractère spécial (généralement Æ, Ø et Å) utilise 2 caractères au lieu d'un, et les données sont remplies d'espaces, ce qui provoque une erreur car les données contiennent 31 caractères pour ce champ, et le champ est défini comme étant de taille 30.
L'exportation qui a généré le fichier dmp a été exécutée comme suit :
SET CHARACTERSET=WE8PC850
SET NLS_LANG=DANISH
SET NLS_NUMERIC_CHARACTERS=.,
exp username/password@server1 dumpfile.dmp
L'importation a été exécutée comme suit : Comment faire pour que cela fonctionne correctement ?
SET CHARACTERSET=WE8PC850
SET NLS_LANG=DANISH
SET NLS_NUMERIC_CHARACTERS=.,
imp username/password@server2 fromuser=username touser=username commit=y ignore=y file=dumpfile.dmp log=dumpfile.log
Que peut-on faire pour y remédier ? Il semble que le imp
ignore le jeu de caractères utilisé, car le serveur d'importation utilise AL32UTF8 (ce qui est faux).