Este post apresenta o novo recurso da Oracle Cloud Infrastructure que permite gerenciar Pluggable Databases (PDBs) via Console em DB System com Container Database. Os testes realizados foram com Oracle Database 19c (RU11), em DB System com Standard Edition e Enterprise High Performance Edition.

O nome oficial da feature é PDB Management for Database Cloud Service, liberado em 22/06/2021.

A documentação está disponível aqui.

Criando um novo PDB

1) Acesse “Oracle Database” -> “Bare Metal, VM and Exadata” -> “DB Systems” e clique no nome do DB System.

2) Clique em Databases e clique no nome do Database (Esse é o Container Database):

3) Clique em Pluggable Databases e depois em “Create Pluggable Database“:

3) Preencha o formulário com o nome do novo PDB, a senha do PDB Admin e a senha da TDE Wallet.

Note que PDB Admin password é uma senha nova sendo atribuída ao usuário administrador do PDB, enquanto a TDE Wallet password of database é a senha da Wallet que foi utilizada ao provisionar o DB System (por padrão é a mesma senha de SYS do Database).

Clique em Create Pluggable Database no rodapé do formulário e espere a mágica acontecer:

Após alguns minutos, PDB criado com sucesso:

Clonando um PDB

Esse recurso permite clonar um PDB localmente, isso é, dentro do mesmo CDB. O recurso de Clone Remoto está disponível somente via linha de comando com DBCLI e via OCI CLI e API.

Acesse a tela de Pluggable Databases novamente seguindo esses passos:

1) Acesse “Oracle Database” -> “Bare Metal, VM and Exadata” -> “DB Systems” e clique no nome do DB System.

2) Acesse Databases e clique no nome do Database (Esse é o Container Database).

3) Clique em Pluggable Databases

4) Escolha um PDB a ser clonado e clique no menu no canto direito, em seguida clique na opção Clone:

2) Informe o nome e senha do novo PDB, também é necessário informar a senha da Wallet do CDB:

3) Clique em Clone PDB e aguarde o procedimento concluir, o tempo vai depender do tamanho do PDB de origem, mas é uma das técnicas de duplicçaão de banco de dados mais rápidas do Oracle Database.

Note que em Work Requests não aparece nada, isso ocorre porque a Word Request de um processo de clonagem é criada no PDB de origem que está sendo clonado, e não no novo PDB, conforme abaixo:

PDB Padrão do DB System Não Aparece na Console

O PDB padrão criado automaticamente no provisionamento do DB System não é listado na tela de gerenciamento de PDBs na Console.

Visão no SQL PLUS:

Visão na Console:

Neste cenário, uma recomendação seria dropar o PDB padrão de forma manual e recriar via Console, assim teria todos os PDBs gerenciáveis via Console.

Para dropar o PDB manualmente via SQL, acesse o DB System com o usuário oracle, acesse o sqlplus e execute:

ALTER PLUGGABLE DATABASE PDB1 CLOSE;
DROP PLUGGABLE DATABASE PDB1 INCLUDING DATAFILES;

Limite de 3 PDB’s com Standard Edition

A partir da versão 19c, a Oracle permite criar até 3 PDBs em um CDB sem a licença de Multitenant. No Standard Edition, essa restrição é aplicada independente do parâmetro MAX_PDBS (que vem com valor padrão igual a 5 no DBS Standard Edition).

Tentativa de criar um terceiro PDB na console (quarto no total, considerando o primeiro que não aparece na console) em um DB System com Oracle Standard Edition apresenta erro:

Mensagem gravada no alert log da instância (acessando o DB System via ssh):

CREATE PLUGGABLE DATABASE "PDB4" ADMIN USER pdbuser identified by * ROLES=(CONNECT)  PARALLEL  file_name_convert=NONE  STORAGE ( MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED)
ORA-65010 signalled during: CREATE PLUGGABLE DATABASE "PDB4" ADMIN USER pdbuser identified by * ROLES=(CONNECT)  PARALLEL  file_name_convert=NONE  STORAGE ( MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED)...
alter pluggable database "PDB4" open
ORA-65011 signalled during: alter pluggable database "PDB4" open...

A mensagem de erro referente ao código 65011 é:

ORA-65010: maximum number of pluggable databases created

Esse comportamento é totalmente esperado e eu criei um DB System com Standard Edition exatamente para testar essa restrição. No detalhamento das mensagens de log da “Work Request” na console, uma mensagem mais amigável é apresentada, mas eu particularmente esperava uma tratativa a nível de console, impossibilitando de criar novos PDBs quando já existissem 3 PDBs no CDB.

Curiosamente o DCS Agent criou 2 JOBs no DBCLI. O primeiro falha com a mensagem de erro original do comando CREATE PLUGGABLE DATABASE, o segundo falha com uma mensagem tratada pelo agente da Cloud:

# dbcli list-jobs

ID                                       Description                                                                 Created                             Status
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
9ffe1f25-f286-45c8-8107-e2d5f13525ae     Provisioning service creation                                               Wednesday, June 30, 2021, 17:45:34 AMT Success
1a82890c-82c0-4c08-980f-fc7b71ec8ebf     SSH keys update                                                             Wednesday, June 30, 2021, 18:37:08 AMT Success
33798b86-4763-4dee-8001-9e2a0f48586f     SSH key delete                                                              Wednesday, June 30, 2021, 18:38:46 AMT Success
c018ba01-206d-43fd-be71-c28a22d18057     Authentication key update for DCS_ADMIN                                     Wednesday, June 30, 2021, 18:40:10 AMT Success
f561bd44-d327-4903-aed3-52fe0ad0aa61     Infra upgrade                                                               Wednesday, June 30, 2021, 18:40:21 AMT Success
e8ccba25-9734-48c8-b8a3-0b972efef399     Manage AHF telemetry                                                        Wednesday, June 30, 2021, 18:43:17 AMT Success
af3eb004-b2f6-4089-8938-fde1b3b9868b     Create Pluggable Database :PDB2 in database:CDB19                           Wednesday, June 30, 2021, 18:44:02 AMT Success
c3c86f25-6b56-4576-9aad-b0797c424048     Create Pluggable Database :PDB3 in database:CDB19                           Wednesday, June 30, 2021, 19:34:29 AMT Success
2a7bcd51-d449-4219-bcfa-da1319365d42     Create Pluggable Database :PDB4 in database:CDB19                           Wednesday, June 30, 2021, 19:35:08 AMT Failure
371895d5-128c-428c-b880-ca83e73d07ff     Create Pluggable Database :PDB4 in database:CDB19                           Wednesday, June 30, 2021, 19:38:38 AMT Failure

# dbcli describe-job -i 2a7bcd51-d449-4219-bcfa-da1319365d42

Job details
----------------------------------------------------------------
                     ID:  2a7bcd51-d449-4219-bcfa-da1319365d42
            Description:  Create Pluggable Database :PDB4 in database:CDB19
                 Status:  Failure
                Created:  June 30, 2021 7:35:08 PM AMT
               Progress:  5%
                Message:  DCS-12000:Failed to create PDB:com.oracle.dcs.commons.exception.DcsTaskFailureException: [[WARNING] ORA-65010: maximum number of pluggable databases created,
 [FATAL] ORA-65011: Pluggable database PDB4 does not exist.,
 ,
 53% complete,
 100% complete,

                  Cause:  An attempt to create the PDB inside CDB failed
                 Action:  Please refer to the dcs-agent, dbca log and resolve the underlying problem

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
task:TaskServiceRequest_991                                              June 30, 2021 7:35:12 PM AMT        June 30, 2021 7:36:36 PM AMT        Failure
task:TaskSequential_992                                                  June 30, 2021 7:35:12 PM AMT        June 30, 2021 7:36:35 PM AMT        Failure
Create pluggable Database:PDB4                                           June 30, 2021 7:35:13 PM AMT        June 30, 2021 7:36:35 PM AMT        Failure

# dbcli describe-job -i 371895d5-128c-428c-b880-ca83e73d07ff

Job details
----------------------------------------------------------------
                     ID:  371895d5-128c-428c-b880-ca83e73d07ff
            Description:  Create Pluggable Database :PDB4 in database:CDB19
                 Status:  Failure
                Created:  June 30, 2021 7:38:38 PM AMT
               Progress:  5%
                Message:  DCS-12000:Failed to create PDB:com.oracle.dcs.commons.exception.DcsTaskFailureException: [[FATAL] [DBT-11506] Creation of more than 3 PDB requires Enterprise Edition license.]
                  Cause:  An attempt to create the PDB inside CDB failed
                 Action:  Please refer to the dcs-agent, dbca log and resolve the underlying problem

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
task:TaskServiceRequest_1356                                             June 30, 2021 7:38:40 PM AMT        June 30, 2021 7:39:01 PM AMT        Failure
task:TaskSequential_1357                                                 June 30, 2021 7:38:40 PM AMT        June 30, 2021 7:39:01 PM AMT        Failure
Create pluggable Database:PDB4                                           June 30, 2021 7:38:41 PM AMT        June 30, 2021 7:39:00 PM AMT        Failure

Status do PDB na Console Não Altera Quando Está Fechado

Ao parar um PDB, o status dele continua como “AVAILABLE” na console, mesmo que ele esteja “MOUNTED” no banco de dados (status que indica que um PDB está fechado / down).

Veja abaixo que PDB2_CLONE teve apenas um Work Request com a operação de “Stop Pluggable Database”, 100% concluída, mas o status fica como AVAILABLE:

Na relação de PDBs também:

Mas o PDB foi fechado com sucesso quando verificamos via SQLPLUS:

Então não conseguimos saber o status real do PDB via console, o que seria apenas um incoveniente se não fosse pela falha grave apresentada a seguir.

Bug Ao Tentar Iniciar o PDB com o DB System Offline

Na OCI ainda não temos uma opção para dar Stop no DB System em si, mas sim no “Node”, que é o servidor Linux que suporta do DB System. Isso gera certa confusão porque o status do DB System fica sempre como AVAILABLE e algumas opções ficam acessíveis na console, quando não deveriam.

Neste exemplo, tentei dar Start no PDB2_CLONE quando o Node estava desligado. A console permitiu realizar essa ação, demorou um tempo e retornou mensagem de erro abaixo:

Após isso, o status do PDB fica como FAILED e não conseguimos realizar mais nenhuma ação de STOP ou START:

Não consegui achar uma solução para esse impasse e abri um chamado na Oracle. Na prática, o PDB está aberto em READ-WRITE quando verificamos via SQLPLUS ou DBCLI:

Não é Possível Fazer Restore de um PDB Específico

Uma das principais capacidades do RMAN a partir da versão 12cR2 com o lançamento do Local Undo (uma tablespace de UNDO por PDB), é a possibilidade de realizar operações de restore/recovery e flashabck database a nivel de PDB sem impactar na disponibilidade do CDB.

Esse é um comportamento desejado quando falamos de consolidação. Sem essa possibiliade, considere um CDB com 5 PDBs produtivos, se você precisasse restaurar o backup de apenas de um deles, todos os outros seriam afetados no processo de restore. Isso é o que acontece se usarmos a opção de Restore disponível na console e acredito que seria o próximo grande passo da OCI com relação ao gerenciamento de PDBs via Console.

Mas ainda é possível fazer restore/recover de um PDB manualmente via RMAN usando o backup automático do DB System como neste exemplo abaixo:

Script em bloco para executar no RMAN:

run{
alter pluggable database pdb2_clone close;
restore pluggable database pdb2_clone;
recover pluggable database pdb2_clone;
alter pluggable database pdb2_clone open;
}

Exemplo do procedimento executando os comandos de forma ad-hoc no RMAN:

[opc@db19h ~]$ sudo su - oracle
Last login: Thu Jul  1 21:48:34 -04 2021 on pts/0
[oracle@db19h ~]$
[oracle@db19h ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Jul 1 21:49:02 2021
Version 19.11.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1604390855)

RMAN> alter pluggable database pdb2_clone close;

using target database control file instead of recovery catalog
Statement processed

RMAN> restore pluggable database pdb2_clone;

Starting restore at 01-JUL-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=187 device type=DISK
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=208 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=21.0.0.1

channel ORA_SBT_TAPE_1: starting datafile backup set restore
channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_1: restoring datafile 00025 to +DATA/ORCL_GRU19J/C6070334E0C4E859E0539900010AFC58/DATAFILE/system.278.1076622411
channel ORA_SBT_TAPE_1: restoring datafile 00026 to +DATA/ORCL_GRU19J/C6070334E0C4E859E0539900010AFC58/DATAFILE/sysaux.280.1076622411
channel ORA_SBT_TAPE_1: restoring datafile 00027 to +DATA/ORCL_GRU19J/C6070334E0C4E859E0539900010AFC58/DATAFILE/undotbs1.277.1076622411
channel ORA_SBT_TAPE_1: restoring datafile 00028 to +DATA/ORCL_GRU19J/C6070334E0C4E859E0539900010AFC58/DATAFILE/users.279.1076622411
channel ORA_SBT_TAPE_1: reading from backup piece DBTRegular-L01625177751263Mba_df_ORCL_1604390855_0e02sr7h_14_1_1_20210701_1076784369_set14
channel ORA_SBT_TAPE_1: piece handle=DBTRegular-L01625177751263Mba_df_ORCL_1604390855_0e02sr7h_14_1_1_20210701_1076784369_set14 tag=DBTREGULAR-L01625177751263MBA
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:15
Finished restore at 01-JUL-21

RMAN> recover pluggable database pdb2_clone;

Starting recover at 01-JUL-21
using channel ORA_DISK_1
using channel ORA_SBT_TAPE_1

starting media recovery

archived log for thread 1 with sequence 4 is already on disk as file +RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_4.271.1076784425
archived log for thread 1 with sequence 5 is already on disk as file +RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_5.272.1076785363
archived log for thread 1 with sequence 6 is already on disk as file +RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_6.274.1076788949
archived log for thread 1 with sequence 7 is already on disk as file +RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_7.275.1076792363
archived log file name=+RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_4.271.1076784425 thread=1 sequence=4
archived log file name=+RECO/ORCL_GRU19J/ARCHIVELOG/2021_07_01/thread_1_seq_5.272.1076785363 thread=1 sequence=5
media recovery complete, elapsed time: 00:00:02
Finished recover at 01-JUL-21

RMAN> alter pluggable database pdb2_clone open;

Statement processed

RMAN>

Conclusão

O gerenciamento de PDBs na Console OCI já era um recurso bastante esperado e é muito bem vindo. Para um lançamento inicial, traz as funcionalidas mais básicas como Criar, Clonar e Deletar PDBs, o que atende a maioria das necessidades de provisionamento cotidianas. Para as próximas inovações espero melhorias como retaurar backup de um PDB específico e a possibildiade de clonar um PDB remotamente entre DB Systems diferentes.

Durante esses testes, a falha mais grave que encontrei foi o fato de o PDB ficar com status FAILED e não permitir mais realizar nenhuma operação após usar a opção START quando do DB System Node está offline. Para esta falha, abri uma Service Request na Oracle reportando sobre a vulnerabilidade operacional e aguardo alguma correção ou recomendação de workaround para recuperar o gerenciamento do PDB na Console.

Outras melhorias que seriam bem vindas, apesar do baixo impacto operacional, seriam:

  • Mostrar o PDB padrão criado automaticamente ao provisionar o DB System
  • Em Standard Edition, aplicar a restrição de 3 PDBs a nível de console já na tentativa de criar um novo PDB
  • Atualizar o Status do PDB quando ele estiver fechado
  • Não permitir nenhuma operação de Pluggable Databases quando o Database estiver Offline

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading