Oracle Cloud DBCS: Falha no Backup com ORA-28361 em Novo PDB sem Master Key (OPEN_NO_MASTER_KEY)

Ao realizar uma migração de um Pluggable Database (PDB), cujo ambiente de origem era on-premise e o destino foi a Oracle Cloud DBCS, identificamos uma falha durante a execução do backup nativo do DBCS. O erro apresentado foi o seguinte:

ORA-28361: master key not yet set

Esse erro ocorre, principalmente, quando o PDB de origem não possui criptografia TDE (Transparent Data Encryption) habilitada. Ao ser migrado para o ambiente DBCS, o PDB permanece com o status OPEN_NO_MASTER_KEY, o que impede a correta realização de operações como backup, entre outras funcionalidades que dependem da chave mestra (master key).

Neste artigo, abordaremos brevemente os conceitos fundamentais da criptografia TDE no Oracle, explicaremos por que esse problema ocorre e apresentaremos, na prática, o passo a passo necessário para solucionar o erro ORA-28361 e restabelecer o funcionamento completo do novo PDB no ambiente da Oracle Cloud.

Para um melhor entendimento deste tema, recomenda-se a leitura das seguintes notas técnicas oficiais disponíveis no My Oracle Support. Elas complementam este artigo com orientações detalhadas sobre o erro OPEN_NO_MASTER_KEY e os procedimentos corretos para ativação da chave de criptografia (master key) em PDBs na Oracle Cloud:

  • [OCI-C]: Newly Created PDB Inside The Container Database Shows Wallet Error “OPEN_NO_MASTER_KEY” (Doc ID 2443398.1)
  • Creating and Activating a Master Encryption Key for a PDB (in OCI and OCI-Classic) (Doc ID 2469398.1)
  • WALLET_STATUS is OPEN_NO_MASTER_KEY in new pdb (Doc ID 3028669.1)

Essas documentações oficiais fornecem instruções práticas e são altamente recomendadas, especialmente para ambientes DBCS em OCI que envolvem a criação de novos PDBs sem chave de criptografia ativa.

Para usar o Oracle Transparent Data Encryption (TDE) em um pluggable database (PDB), você deve criar e ativar uma master encryption key (chave mestra de criptografia) para o PDB.


O que é Transparent Data Encryption (TDE)?

O Transparent Data Encryption (TDE) é um recurso do Oracle Database que permite a criptografia de dados sensíveis armazenados em tabelas e tablespaces, com o objetivo de proteger essas informações contra acessos não autorizados.

Após criptografados, os dados são descriptografados de forma transparente no momento do acesso por usuários ou aplicações autorizadas. Isso significa que, para quem tem permissão, a leitura dos dados ocorre normalmente, sem necessidade de ações manuais para descriptografá-los.

O TDE é especialmente eficaz para proteger os dados armazenados em mídia física — também chamados de dados em repouso (data at rest) — em situações como perda, roubo ou acesso indevido ao meio de armazenamento (por exemplo, datafiles no sistema operacional).

Embora o Oracle Database utilize mecanismos robustos de autenticação, autorização e auditoria para proteger os dados internamente, esses mecanismos não se aplicam diretamente aos arquivos físicos de dados no sistema operacional. Para isso, o TDE atua como uma camada adicional de segurança, criptografando os dados diretamente nesses arquivos.

A fim de evitar a descriptografia não autorizada, o TDE armazena as chaves de criptografia em um módulo de segurança externo ao banco de dados, denominado keystore (repositório de chaves).

Como parte da implementação do TDE, é possível configurar o Oracle Key Vault, uma solução que permite o gerenciamento centralizado dos keystores (também chamados de virtual wallets no contexto do Oracle Key Vault) em toda a infraestrutura da organização.

Por exemplo, é possível carregar um software keystore no Oracle Key Vault, migrar o banco de dados para utilizá-lo como keystore padrão, e então compartilhar seu conteúdo com outros nós do Oracle Real Application Clusters (Oracle RAC) — primários e de contingência (standby) —, otimizando assim as operações administrativas diárias em ambientes com dados criptografados.

________

________

O armazenamento da chave mestra (master key) pode ser realizado de duas formas: localmente (dentro do servidor de banco de dados), por meio do Oracle Wallet, ou de maneira centralizada e segura (externa ao servidor de banco de dados), utilizando o Oracle Key Vault. Ambos os mecanismos têm como finalidade armazenar e proteger a chave mestra do banco de dados.

A chave mestra é a chave principal dentro da arquitetura de criptografia TDE (Transparent Data Encryption). Ela é utilizada para criptografar as chaves de dados, também chamadas de data encryption keys, que são as responsáveis diretas por criptografar os dados sensíveis armazenados no banco de dados — como tabelas, tablespaces, backups e outros objetos persistentes.

Essa abordagem de segurança baseada em múltiplos níveis de chaves garante que, mesmo que os arquivos físicos do banco de dados sejam acessados indevidamente, os dados permanecerão protegidos, desde que a chave mestra não esteja acessível.

________

A seguir, apresentaremos o passo a passo para criar e ativar a master key no novo PDB, além de realizar a recriação do wallet em modo AUTOLOGIN.

Listagem de jobs com status “Failure” no DBCS utilizando o comando dbcli

[root@database ~]# dbcli list-jobs | grep -i Failure
a047a9ac-5fab-4495-8c0a-3d897404c5ee     Create Longterm Backup with TAG-DBTLongterm17443774703478Op for Db:BRAVEO in OSS:b4u6hISKttDARmxAARwI Friday, April 11, 2025, 10:38:39 BRT Failure

________

Após identificar o job com status “Failure”, é necessário consultar os logs correspondentes utilizando o comando dbcli. Para isso, use o parâmetro describe-job juntamente com o ID do job, que pode ser obtido na listagem anterior. Esse comando fornece detalhes completos sobre a execução do job, incluindo mensagens de erro e etapas realizadas.

[root@database ~]# dbcli describe-job -i  a047a9ac-5fab-4495-8c0a-3d897404c5ee  -j
{
  "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
  "status" : "Failure",
  "message" : "DCS-10430:Request failed with ORA-* Errors:ORA-28361: master key not yet set \nError Stack :[RMAN-00601: fatal error in recovery manager,\n RMAN-03004: fatal error during execution of command,\n ORA-01480: trailing null missing from STR bind value,\n ORA-199",
  "errorCode" : "DCS-10430",
  "reports" : [ {
    "taskId" : "TaskSequential_29809",
    "taskName" : "task:TaskSequential_29809",
    "taskResult" : "",
    "startTime" : "April 11, 2025 10:38:40 AM BRT",
    "endTime" : "April 11, 2025 10:39:14 AM BRT",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskZLockWrapper_29808",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "April 11, 2025 10:39:14 AM BRT",
    "message" : null
  }, {
    "taskId" : "TaskServiceRequest_29810",
    "taskName" : "Validate Database backup Configuration",
    "taskResult" : "",
    "startTime" : "April 11, 2025 10:38:40 AM BRT",
    "endTime" : "April 11, 2025 10:39:04 AM BRT",
    "status" : "Success",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_29809",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "CInfo",
    "updatedTime" : "April 11, 2025 10:39:04 AM BRT",
    "message" : null
  }, {
    "taskId" : "TaskParallel_29826",
    "taskName" : "Install object store swift module",
    "taskResult" : "",
    "startTime" : "April 11, 2025 10:38:42 AM BRT",
    "endTime" : "April 11, 2025 10:38:52 AM BRT",
    "status" : "Success",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_29825",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "CInfo",
    "updatedTime" : "April 11, 2025 10:38:52 AM BRT",
    "message" : null
  }, {
    "taskId" : "TaskServiceRequest_29811",
    "taskName" : "Backup Database",
    "taskResult" : "",
    "startTime" : "April 11, 2025 10:39:04 AM BRT",
    "endTime" : "April 11, 2025 10:39:14 AM BRT",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_29809",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "April 11, 2025 10:39:14 AM BRT",
    "message" : null
  }, {
    "taskId" : "TaskSequential_29812",
    "taskName" : "task:TaskSequential_29812",
    "taskResult" : "DCS-10430:Request failed with ORA-* Errors:ORA-28361: master key not yet set \nError Stack :[RMAN-00601: fatal error in recovery manager,\n RMAN-03004: fatal error during execution of command,\n ORA-01480: trailing null missing from STR bind value,\n ORA-199",
    "startTime" : "April 11, 2025 10:39:04 AM BRT",
    "endTime" : "April 11, 2025 10:39:14 AM BRT",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskServiceRequest_29811",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "April 11, 2025 10:39:14 AM BRT",
    "message" : null
  }, {
    "taskId" : "TaskZJsonRpcExt_29846",
    "taskName" : "Database backup",
    "taskResult" : "DCS-10430:Request failed with ORA-* Errors:ORA-28361: master key not yet set \nError Stack :[RMAN-00601: fatal error in recovery manager,\n RMAN-03004: fatal error during execution of command,\n ORA-01480: trailing null missing from STR bind value,\n ORA-199",
    "startTime" : "April 11, 2025 10:39:04 AM BRT",
    "endTime" : "April 11, 2025 10:39:14 AM BRT",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_29812",
    "jobId" : "a047a9ac-5fab-4495-8c0a-3d897404c5ee",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "April 11, 2025 10:39:14 AM BRT",
    "message" : null
  } ],
  "createTimestamp" : "April 11, 2025 10:38:39 AM BRT",
  "resourceList" : [ ],
  "description" : "Create Longterm Backup with TAG-DBTLongterm17443774703478Op for Db:BRAVEO in OSS:b4u6hISKttDARmxAARwI",
  "updatedTime" : "April 11, 2025 10:39:14 AM BRT",
  "percentageProgress" : "33%",
  "cause" : "Request has failed with ORA-* errors during the operation(s).",
  "action" : "Refer to RMAN logs for more information."
}

________

É importante ressaltar que ambos os passos apresentados anteriormente devem ser executados com o usuário root.

Agora, utilizando o usuário oracle, vamos consultar a visão dinâmica v$encryption_wallet para verificar o status da master key e entender melhor a situação atual do keystore.

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Apr 13 16:39:35 2025
Version 19.24.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.24.0.0.0

SQL> col WRL_PARAMETER for a60
SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

WRL_PARAMETER                                               |STATUS                        |WALLET_TYPE
------------------------------------------------------------|------------------------------|--------------------
/opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/           |OPEN                          |AUTOLOGIN
                                                            |OPEN_NO_MASTER_KEY            |AUTOLOGIN

                                                            
SQL> show pdbs ;

    CON_ID|CON_NAME                      |OPEN MODE |RESTRICTED
----------|------------------------------|----------|----------
         2|PDB$SEED                      |READ ONLY |NO
         3|PDB                           |READ WRITE|NO

________

Vamos destacar alguns pontos importantes com base no resultado obtido a partir da consulta à view v$encryption_wallet:

A consulta retornou duas linhas. A primeira linha representa o CDB (Container Database), enquanto as demais linhas representam os PDBs (Pluggable Databases).

Neste caso específico, há apenas um PDB criado, portanto foi retornada uma única linha adicional, cujo status é OPEN_NO_MASTER_KEY. Isso indica que a master key ainda não foi criada ou ativada para esse PDB.

Ao executar o comando SHOW PDBS, é possível visualizar tanto o PDB que precisa da ativação da chave quanto o PDB$SEED. Este último, no entanto, não é considerado no processo, pois trata-se de um template padrão utilizado apenas como base para a criação de novos PDBs, não sendo utilizado diretamente para armazenamento de dados ou operações administrativas.

O que significa o status OPEN_NO_MASTER_KEY no Oracle Database?

No Oracle Database, o status OPEN_NO_MASTER_KEY indica que o keystore (repositório de chaves) está aberto, porém nenhuma chave mestra de criptografia (master encryption key) foi criada ou ativada para o banco de dados atual.​

Esse status é comum em ambientes multitenant, onde um Pluggable Database (PDB) foi recentemente criado ou clonado, mas ainda não possui sua própria chave mestra de criptografia. Mesmo que o keystore esteja acessível, a ausência de uma chave mestra impede operações que dependem de criptografia, como backups, exportações de dados e acesso a dados criptografados.​

Por que cada PDB requer sua própria chave mestra?

Em um ambiente multitenant, cada PDB é isolado e pode ter requisitos de segurança distintos. Portanto, o Oracle Database permite que cada PDB tenha sua própria chave mestra de criptografia, mesmo quando todos compartilham um único keystore. Isso proporciona uma gestão mais granular da segurança e facilita operações como rotação de chaves e exportação/importação de PDBs.​

Neste exemplo, estamos utilizando o Oracle Wallet como forma de armazenamento da master key, o que significa que a chave é armazenada localmente, no próprio servidor de banco de dados. Para localizar o caminho do wallet, é possível verificar o arquivo sqlnet.ora ou consultar o parâmetro da instância de banco de dados wallet_root.

$ cat $ORACLE_HOME/network/admin/sqlnet.ora | grep -i WALLET
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/BRAVEO_DB2/tde)))


$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Apr 13 16:39:35 2025
Version 19.24.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.24.0.0.0

SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------------------------------
wallet_root                          string      /opt/oracle/dcs/commonstore/wallets/ORCL_LAB

Com o banco de dados em operação, vamos renomear o arquivo cwallet.sso para cwallet.sso.old. Essa ação desativa o modo de acesso automático (AUTOLOGIN) ao wallet, exigindo que a abertura do keystore seja feita manualmente por meio de senha.

$ ls -la /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso
-rw------- 1 oracle oinstall 9958 Apr 11 15:13 /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso

$ mv /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso.old

$ ls -la /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso*
-rw------- 1 oracle oinstall 9958 Apr 11 15:13 /opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde/cwallet.sso.old

Após a desativação do AUTOLOGIN da wallet, acessaremos o PDB em questão para criar sua própria master key. Nesse passo, será necessário informar a senha do keystore. Para fins de padronização e facilidade de gestão, utilizaremos a mesma senha já definida para a master key do CDB.

SQL> alter session set container=PDB;

Session altered.

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE open IDENTIFIED BY "Wallet_Password_Here";

keystore altered.

SQL> administer key management set key identified by  "Wallet_Password_Here" with backup;

keystore altered.

SQL> col WRL_PARAMETER for a60
SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

WRL_PARAMETER                                               |STATUS                        |WALLET_TYPE
------------------------------------------------------------|------------------------------|--------------------
                                                            |OPEN                          |PASSWORD

Após a criação da master key do PDB, o próximo passo é recriar o AUTOLOGIN da wallet. Para isso, será necessário informar a senha do keystore. A fim de manter a padronização e facilitar a administração, utilizaremos a mesma senha previamente definida para a master key do CDB.

O último passo consiste em realizar um shutdown immediate seguido de um startup da instância do banco de dados. Em seguida, é recomendada uma nova consulta à view v$encryption_wallet para verificar se o status da wallet e da master key foi atualizado corretamente.

SQL> alter session set container=CDB$ROOT;

Session altered.

SQL>  administer key management create AUTO_LOGIN keystore from keystore '/opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde' identified by  "Wallet_Password_Here" ;

keystore altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup;
ORACLE instance started.

Total System Global Area 1.4361E+10 bytes
Fixed Size                  9151448 bytes
Variable Size            6710886400 bytes
Database Buffers         7616856064 bytes
Redo Buffers               24399872 bytes
Database mounted.
Database opened.
SQL>
SQL> col WRL_PARAMETER for a60
SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

WRL_PARAMETER                                                STATUS                         WALLET_TYPE
------------------------------------------------------------ ------------------------------ --------------------
/opt/oracle/dcs/commonstore/wallets/ORCL_LAB/tde             OPEN                           AUTOLOGIN
                                                             OPEN                           AUTOLOGIN


Entendendo os Arquivos do Oracle Wallet
Para facilitar a compreensão, vamos explicar o papel de cada arquivo presente no diretório onde o Oracle Wallet está armazenado. De forma geral, os dois principais arquivos são:

🔐 ewallet.p12

  • É o arquivo que representa a keystore, ou seja, o repositório seguro onde são armazenadas:
    • Chaves criptográficas (como a master key),
    • Senhas,
    • Certificados digitais e outros dados sensíveis.

🔓 cwallet.sso

  • É o arquivo responsável pelo Single Sign-On (SSO) do wallet.
  • Permite que o banco de dados abra automaticamente o keystore durante o processo de startup, sem necessidade de informar a senha manualmente.

Esses dois arquivos trabalham juntos para garantir segurança e praticidade no gerenciamento das chaves criptográficas dentro do Oracle Database.

$ ls -la | egrep -i '(cwallet\.sso|ewallet\.p12)$'
-rw------- 1 oracle oinstall 9958 Apr 11 15:13 cwallet.sso
-rw------- 1 oracle oinstall 9913 Apr 11 15:12 ewallet.p12

Com todos os passos anteriores concluídos, agora podemos reexecutar o processo de backup para validar a solução implementada.

Que tal resolver agora?