Conversão de Charset Base Oracle (CHAR e NCHAR)

No exemplo abaixo iremos converter uma base US7ASCII para WE8MSWIN1252.

Atenção:

– Sempre execute um backup completo antes de qualquer conversão.
– Backup só é backup quando é testado. Valide seu backup antes de prosseguir.
– Para conversões do Charset, seguir rigorosamente os passos.
– Para conversões NCHAR, muito cuidado com o comando INTERNAL_USE. Você pode perder sua base de dados nesta conversão, farei uma breve explicação do motivo. (E backup sempre!!)

Conversão CHARSET

1 – Crie uma instância com charset US7ASCII (mantenha o NCHAR da base origem);
2 – Configure a variável NLS_LANG para AMERICAN_AMERICA.US7ASCII (e. g.: no prompt do DOS, “set NLS_LANG= AMERICAN_AMERICA.US7ASCII”);
3 – Efetue o Import da base origem (Se você configurou corretamente a NLS_LANG antes de importar, toda a acentuação se manterá integra);
4 – Alteração do characterset para WE8MSWIN1252 conforme procedimento abaixo:

STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET WE8MSWIN1252;
SHUTDOWN IMMEDIATE;
STARTUP;

Conversão NCHAR

ATENÇÃO: Este procedimento não é recomendado. O uso do INTERNAL_USE é restrito e desaconselhável na maioria das situações.
O motivo maior da “não recomendação” é devido a óbvia incompatibilidade deste procedimento.
Você não consegue encaixar a quantidade de informações de um campo AL16UTF16 em um UTF8, a base seria truncada.
Já subir é possível. Ex.: de UTF8 para AL16UTF16 ou UTF-16 ou AL32UTF8…

Procedimento:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
SHUTDOWN IMMEDIATE;

 

Colaboração: Leonardo Bustamante (OCP Oracle)

Você pode gostar...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *