Vous avez sous la main un dump en ISO et vous souhaitez l'importer en UTF8, tout un programme !
La marche à suivre est la suivante :
- On importe le dump dans un schéma d'une base en ISO
- On exécutera un script byte_to_char.sql pour que le schéma prenne en compte l'UTF8
- On exportera le schéma en UTF8
- On importera le dump en UTF8 dans une base UTF8
Import du dump
je vous laisse avec l'étape une, basique à souhait ;)
Exécution du script byte_to_char.sql
BEGIN
FOR i IN (SELECT
utc.TABLE_NAME,utc.column_name,utc.data_length,utc.data_type
FROM user_tab_cols utc, user_tables ut
WHERE ut.TABLE_NAME = utc.TABLE_NAME
AND utc.data_type IN ('VARCHAR2','CHAR')
AND char_used= 'B'
AND column_name NOT LIKE 'SYS_%')
loop
EXECUTE immediate 'alter table '||i.TABLE_NAME||' modify (
'||i.column_name||' '||i.DATA_TYPE||'('||i.data_length||' CHAR) )';
END loop;
END;
/
Ainsi, à l'issu de son exécution vos colonnes bytes seront en char ce qui permettra lors de l'import, de prendre en compte les caractères accentués sur plus d'un byte.
Export du schéma en UTF8
mknode pipeExp p
export NLS_LANG=AMERICAN_AMERICA.UTF8
gzip MY_UTF8.dmp.gz
nohup exp userid=LOGIN/PASS file=pipeExp grants=n &
l'important ici est la variable d'environnement NLS_LANG à positionner à AMERICAN_AMERICA.UTF8
Import du dump en UTF-8
idem ci dessus, c'est simple à souhait ;)