Convertendo o Charset de um Banco de Dados Oracle com o DMU

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.







Ao final do processo de scan, é apresentado um relatório do processo, conforme abaixo.


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