A conversão de charset é uma atividade crítica e sensível em ambientes corporativos, especialmente em cenários multilíngues ou quando se busca conformidade com padrões globais de codificação de caracteres. Sempre que esse tipo de migração é necessário, é comum pensar imediatamente na abordagem tradicional de export/import — um método amplamente conhecido, mas que pode ser demorado e propenso a erros se não for cuidadosamente planejado.
No entanto, a Oracle oferece uma ferramenta especializada para essa finalidade: o Oracle DMU (Database Migration Assistant for Unicode). Trata-se de uma solução gráfica e inteligente, projetada para simplificar o processo de conversão e reduzir os riscos associados à mudança de conjunto de caracteres.
Neste artigo, mostro como utilizar o Oracle DMU para converter o charset de um banco Oracle hospedado no Oracle Cloud Infrastructure (OCI) para AL32UTF8, garantindo integridade, segurança e alta disponibilidade durante todo o processo.
Para ambiente multitenant:
- Se o seu CDB não estiver utilizando o characterset AL32UTF8, crie um novo CDB com esse charset e migre seus PDBs para ele antes de iniciar a conversão.
- A partir do Oracle 12.2, um PDB pode ter um conjunto de caracteres diferente do CDB, desde que o CDB esteja utilizando AL32UTF8 — neste caso, você pode prosseguir normalmente com a conversão.
- Realize todas as etapas de preparação no PDB, e não no CDB.
- O DMU não pode ser utilizado diretamente em um CDB. Ao se conectar ao banco via DMU, utilize a conexão "SYS@PDB AS SYSDBA". Se você tentar se conectar ao CDB, um erro será exibido.
Cenário:
- CDB tstwin32 e PDB PDBWIN32 on premise com characterset WE8MSWIN1252;
- Objetivo: converter para AL32UTF8, padrão global Unicode
Conforme descrito acima, para ambientes multitenant, é preciso que o CDB esteja utilizando o characterset AL32UTF8. Por isso, será necessário primeiramente migrar o PDB PDBWIN32 para um CDB com characterset AL32UTF8.
Ambiente que será migrado para AL32UTF8
[oracle@lamim19c ~]$ sqlplus SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 3 18:20:17 2025 Version 19.23.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. Enter user-name: / as sysdba Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.23.0.0.0 SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDBWIN32 READ WRITE NO SQL> ALTER PLUGGABLE DATABASE PDBWIN32 CLOSE IMMEDIATE; Pluggable database altered. SQL> ALTER PLUGGABLE DATABASE PDBWIN32 UNPLUG INTO '/lamim/pdbwin32.xml'; Pluggable database altered. SQL>
Na sequencia ele será plugado no CDB com characterset AL32UTF8 para que possamos utilizar o DMU. Por ser um ambiente de demonstração e eu estar com falta de espaço no DGDATA, o PDB esta sendo plugado convertendo os dados para o DGRECO.
[oracle@lamim19c ~]$ sqlplus SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 3 18:28:19 2025 Version 19.23.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. Enter user-name: / as sysdba Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.23.0.0.0 SQL> SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; PARAMETER VALUE ---------------------------------------------------------------- ---------------------------------------------------------------- NLS_CHARACTERSET AL32UTF8 SQL> SHOW PDBS; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 LAMIMPDB1 READ WRITE NO SQL> SQL> SQL> CREATE PLUGGABLE DATABASE PDBWIN32 USING '/lamim/pdbwin32.xml' FILE_NAME_CONVERT = ('+DGDATA/', '+DGRECO/'); 2 Pluggable database created. SQL> SQL> ALTER PLUGGABLE DATABASE PDBWIN32 OPEN UPGRADE; Pluggable database altered. SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 LAMIMPDB1 READ WRITE NO 4 PDBWIN32 MIGRATE YES
Feita a migração do PDB para o CDB com characterset AL32UTF8, agora podemos utilizar o DMU.
Requisitos
- Java Development Kit (JDK): O DMU requer o Java SE Development Kit (JDK) versão 11. Certifique-se de instalar a versão correspondente à arquitetura do seu sistema operacional (32 ou 64 bits).
- Sistema Operacional: O DMU é compatível com sistemas operacionais baseados em ASCII, como Windows, Linux, Solaris, HP-UX e AIX. Sistemas baseados em EBCDIC, como IBM z/OS e Fujitsu BS2000, não são suportados.
- Banco de Dados Oracle: O DMU suporta a migração de bancos de dados Oracle a partir da versão 11.2.0.4. Versões anteriores requerem o uso do DMU 2.1, disponível via My Oracle Support.
Etapas da Instalação
- Faça o download da última versão disponível do DMU através do link .
- Extraia arquivo baixado.
[oracle@lamim19c tmp]$ [oracle@lamim19c tmp]$ unzip V1042735-01.zip Archive: V1042735-01.zip creating: dmu/ creating: dmu/configuration/ inflating: dmu/configuration/oracle.dmu.bundles.info creating: dmu/dmu/ creating: dmu/dmu/admin/ inflating: dmu/dmu/admin/after_drop_repository.sql inflating: dmu/dmu/admin/archive_repository.sql inflating: dmu/dmu/admin/create_repository.sql inflating: dmu/dmu/admin/csrepair.plb inflating: dmu/dmu/admin/drop_archived_repository.sql inflating: dmu/dmu/admin/drop_repository.sql inflating: dmu/dmu/admin/drop_repository_without_archived_tables.sql inflating: dmu/dmu/admin/dumasys.plb inflating: dmu/dmu/admin/migrate_repository_from_system_to_sys.sql inflating: dmu/dmu/admin/upgrade_repository_from_19.1.sql inflating: dmu/dmu/admin/upgrade_repository_from_2.1.sql creating: dmu/dmu/bin/ inflating: dmu/dmu/bin/dmu inflating: dmu/dmu/bin/dmu-logging.conf inflating: dmu/dmu/bin/dmu.boot inflating: dmu/dmu/bin/dmu.conf inflating: dmu/dmu/bin/dmu32.boot inflating: dmu/dmu/bin/dmu32.conf inflating: dmu/dmu/bin/dmu32.exe inflating: dmu/dmu/bin/dmu64.boot inflating: dmu/dmu/bin/dmu64.conf inflating: dmu/dmu/bin/dmu64.exe ...
- Ajustar a permissão do executavel.
[root@lamim19c tmp]# chmod +x dmu/dmu/bin/dmu [root@lamim19c tmp]# ls -ltr dmu/dmu/bin/dmu -rwxr-xr-x 1 oracle oinstall 13240 Jan 11 2024 dmu/dmu/bin/dmu [root@lamim19c tmp]#
- Agora, basta executar o dmu. Lembrando que é pre requisito que o java esteja instalado.
[root@lamim19c tmp]# cd dmu/dmu/bin/ [root@lamim19c bin]# [root@lamim19c bin]# pwd /tmp/dmu/dmu/bin [root@lamim19c bin]# ./dmu Database Migration Assistant for Unicode Copyright (c) 2011, 2024, Oracle and/or its affiliates.
Agora vamos configurar a conexão ao nosso PDB PDBWIN32 que foi recém migrado para um CDB com charset AL32UTF8 e que precisamos realizar a migração para UNICODE.
Ao conectar pela primeira vez, será necessário criar o repositório do DMU. Durante a criação, você poderá escolher a tablespace que vai armazenar os dados, desta forma, se desejar, pode criar uma específica.
No exemplo, eu escolho armazenar na USERS.
Concluída a criação do repositório, o próximo passo é realizar o processo de scan. O processo de scan varre todos os dados de colunas do tipo VARCHAR2, CHAR, CLOB e LONG para detectar problemas que podem surgir durante a conversão do charset (neste caso, de WE8MSWIN1252 para AL32UTF8).
Principais validações realizadas:
- Caracteres inválidos para UTF-8.
- Dados que poderão ser truncados após a conversão (por conta de aumento no tamanho em bytes dos caracteres).
- Colunas com sobreposição de byte (ex: acentos codificados de forma irregular).
- Problemas com dados binários armazenados incorretamente como texto.
Após verificar o relatório do scan, vou executar o processo de conversão, através do convert database.
Concluída a conversão com sucesso, podemos fechar o PDB (que estava em modo upgrade) e abrir novamente.
[oracle@lamim19c ~]$ sqlplus SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 3 19:18:15 2025 Version 19.23.0.0.0 Copyright (c) 1982, 2023, Oracle. All rights reserved. Enter user-name: / as sysdba Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.23.0.0.0 SQL> SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 LAMIMPDB1 READ WRITE NO 4 PDBWIN32 READ WRITE YES SQL> ALTER PLUGGABLE DATABASE PDBWIN32 CLOSE IMMEDIATE; Pluggable database altered. SQL> SQL> ALTER PLUGGABLE DATABASE PDBWIN32 OPEN; Pluggable database altered. SQL> SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 LAMIMPDB1 READ WRITE NO 4 PDBWIN32 READ WRITE NO SQL>
A conversão de charset para AL32UTF8 é uma etapa fundamental para garantir compatibilidade internacional, suporte a múltiplos idiomas e aderência aos padrões modernos de codificação de dados. Com o uso do Oracle DMU (Database Migration Assistant for Unicode), esse processo se torna mais seguro, controlado e orientado por diagnóstico.
Fonte:
Comentários
Postar um comentário