Revisado por Francisco Riccio
Objetivo: Este artigo tem como objetivo orientá-lo de como realizar o clone de PDB no mesmo container e entre containers em diferentes clusters utilizando a ferramenta DBAASCLI no Exadata Cloud At Customer.

O que é Exadata cloud At Customer :
Exadata cloud At Customer é quase é uma réplica dos serviços de cloud pública, que o cliente pode ter instalado em sua casa. As empresas podem ter toda a infraestrutura, o banco de dados e todos os serviços da cloud pública em uma nuvem privada e por um preço mais atrativo, a vantagem de adquirir Exadata Cloud at Customer Enterprise Edition Extreme Performance é que inclui todas as options do Database Enterprise Edition, além de todos os pacotes do Oracle Database Enterprise Manager e todas as opções do Database Enterprise Edition como Active Data Guard, Advanced Analytics, Advanced Compression, AdvancedSecurity, Database In-Memory, Database Vault, Label Security, Multitenant, On-Line Analytical Processing, Partitioning, Real Application Clusters, Real Application Testing, Spatial and Graph, Oracle Database Enterprise Manager Packs, Diagnostics Pack, Tuning Pack, Database Lifecycle Management Pack, Data Masking and Subsetting Pack.
Também é incluído em uma assinatura Exadata Cloud at PaaS , o Oracle Multitenant, permitindo alta densidade de consolidação, provisionamento, clonagem rápidas, correções, atualizações eficientes e gerenciamento simplificado de banco de dados. Esse modelo de assinatura é ideal para clientes sem licenças de bancos de dados Oracle ou clientes que desejam usar os recursos do banco de dados Oracle além do que eles têm licenças atualmente.

O Exadata Cloud at Customer pode ser usado para implantar um grande número de bancos de dados, permitindo uma alta consolidação do banco de dados. Para garantir um desempenho consistente em um ambiente altamente consolidado, ficou claro que também uma das maiores vantagens em utilizar este produto é a licença para utilizar o Multitenant e conseqüentemente a consolidação tendo todos seus bancos segmentados dentro de um único container, o CDB.
Neste artigo abordaremos umas das rotinas mais utilizadas pelas empresas que administram banco de dados, o clone de banco de dados, quem nunca levou horas criando uma nova estrutura para restaurar seu banco de dados através do RMAN ou até mesmo o refresh de do banco de dados através dos utilitários expdp/impd que levam horas, este artigo vem para facilitar esta operação, a Oracle disponibilizou a partir da versão 12.2.0.1 o hot clone, você pode clonar seu PDB de produção ou até mesmo atualizar sua base de homologação em vms clusters diferentes sem a necessidade de indisponibilidade do seu banco de dados de produção, além disso no Exadata Cloud At Customer podemos utilizar o utilitário dbaascli para clone local onde o PDB de origem pode ser copiado para o PDB destino dentro do mesmo CDB ou clone remoto onde pode ser feito o clone do PDB de Origem para outro CDB em outra vm cluster.
Cenários: Existem diversos cenários que este artigo pode ser aplicado, vou citar os três cenários mais comuns, clonando um PDB de outro CDB com character set diferente, atualização de banco de dados de homologação no mesmo cluster e atualização de banco de dados de homologação entre diferentes clusters.
Quando falamos de consolidação, o conceito é agruparmos recursos ou dados para facilitar a administração e reduzir a utilização de recursos não distintos como por como, por exemplo, processos de backgroud, memória cpu etc.
Muitas empresas optam por segmentar seus ambientes por CDB, hospedando dentro do mesmo container PDBS com character set diferentes.
Exemplo: Uma empresa que possui duas aplicações que utilizam no banco de dados character set diferentes, uma aplicação com character set WE8ISO8859P1 e outra com WE8MSWIN1252, na versão 12.2.0.1 ou superior é suportado ter no mesmo container, PDBs com character set diferentes porém na criação do serviço no control plane onde é criado o banco de dados é possível escolher apenas um character set, este método é simples e eficiente pois já configura o PDB dentro da chave de criptografia do CDB, cada PDB terá seu character set lembrando que o CDB que terá os PDBs com diversos tipos de character set deve ser ter o character set UTF-8 para suportar PDBs com distintos character set.

Vamos ver um pouco sobre o que pode ser feito com o DBAASCLI, é importante lembrar que os comandos utilizados neste artigo (local_clone e remote_clone) são suportados apenas para bancos de dados que não estão em uma configuração do Data Guard e usam o Oracle Database versão 12.2.0.1 ou posterior.
Você pode usar o utilitário dbaascli para executar uma variedade de operações na administração do Oracle Database Exadata Cloud, mas hoje abordaremos o procedimento de clone.
Usando o utilitário dbaascli, você pode:
Uma das vantagens de utilizar o utilitário DBAASCLI é que automaticamente o PDB será criado dentro do serviço de criptografia do Oracle permitindo que operações como tablespaces criptografadas possam ser criadas.
Nos dois exemplos a seguir será abordado o cenário onde temos dois containers (CDB), o container CBMODEL foi criado com character WE8MSWIN1252 e o CDB CDB122H1 que foi criado com character UTF8, ambos criados pelo control plane do OCC, automaticamente cada PDB ira herdar o character set de seus containers e assim teremos respectivamente PDB’s nos chracteres set WE8MSWIN1252 e UTF8, este exemplo retrata o cenário mencionado acima onde precisamos ter dentro do mesmo container PDB’s com caracteres set diferentes porem respeitando o charecter set do CDB que é UTF8, o PDB criado no container de destino é apenas para ilustração de que o PDB herda o character set do CDB, ele não será utilizado.
É muito importante que o dbaastools esteja atualizado na última versão do rpm, neste artigo trabalhamos com a versão dbaastools_exa-1.0-1+18.2.3.1.0_190409 (Jan/2019) e até esta versão o suporte da Oracle recomenda como pré requisito a criação do common user C##CLOUD$SERVICE no CDB origem e destino.
Pacote dbaastools:
[root @ exacc0101vm08 ~] # rpm -qa | grep dba
dbaastools_exa-1.0-1 + 18.2.3.1.0_190409.1100.x86_64
Criar usuário abaixo no CDB origem e destino:
OBS: A senha deve ser a mesma senha que foi utilizada na criação do serviço devido a utilização do Wallet.
grant sysoper,sysdba,dba,all privileges to C##CLOUD$SERVICE identified by oracle container=all;
Cluster: HOMOLOGACAO
dbnode1: exacchml01vm08
dbnode2: exacchml02vm08
CDB: CBMODEL
PDB: PDBMODEL
SCAN: exacc10-scan15.us1.ocm.s9090999.oraclecloudatcustomer.com
DESTINO:
Cluster: HOMOLOGACAO
dbnode1: exacchml01vm08
dbnode2: exacchml02vm08
CDB: CDB122H
PDB: CDB122H_PDBMODEL
ORIGEM: CBMODEL1
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
------------------------------------------------------------
NLS_CHARACTERSET WE8MSWIN1252
SQL> alter session set container=PDBMODEL;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDBMODEL
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
----------------------------------------------------------------
NLS_CHARACTERSET WE8MSWIN1252
DESTINO: CDB122H1
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
----------------------------------------------------------
NLS_CHARACTERSET AL32UTF8
SQL> alter session set container=PDBUTF;
Session altered.
SYS > show con_name
CON_NAME
------------------------------
PDBUTF
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------------------------
NLS_CHARACTERSET AL32UTF8
1.1 Acesse o servidor onde está hospedado o CDB de origem e destino.
1.2 Acesse o CDB onde está hospedado o PDB de origem e identifique o nome do CDB e o nome do PDB.
$ . oraenv
ORACLE_SID = [] ? CBMODEL1
SYS> select name from v$database;
NAME
----------------------------------------
CDB122H
SQL> col name format A20
SQL> set lines 300 pages 300
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
PDBMODEL READ WRITE
1.3 Identifique o nome do SCAN.
[oracle@exacchml01vm08 admin]$ srvctl config scan
SCAN name: exacc10-scan15.us1.ocm.s9090999.oraclecloudatcustomer.com, Network: 1
Subnet IPv4: 175.20.38.16/255.255.255.240/bondeth0, static
Subnet IPv6:
SCAN 1 IPv4 VIP: 175.20.38.22
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 2 IPv4 VIP: 175.20.38.23
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 3 IPv4 VIP: 175.20.38.24
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
1.4 Identificação dos Parâmetros
ORACLE_SID
--pdbname
--source_db
--source_db_scan
Banco de dados destino (Ira receber o PDB com character set WE8MSWIN1252).
PDB que será clonado.
CDB que hospeda o PDB que será clonado.
SCAN no cluster que hospeda ambos CDBs
1.5 Utilizando o utilitário DBAASCLI, clone do PDB com character set WE8MSWIN1252 para dentro do CDB com character set UTF-8.
OBS: Repare que o comando “dbaascli pdb remote_clone” não possui informações do CDB de destino, isto é muito importante para que seu clone ocorra com sucesso, você deve configurar como ORACLE_SID do seu CDB de destino.
[oracle@exacchml01vm08 ~]$ . oraenv
ORACLE_SID = [oracle] ? CDB122H1
The Oracle base has been set to /u02/app/oracle
Entre com o comando e em seguida com a senha do usuário sys do CDB CBMODEL
[oracle@exacchml01vm08 ~]$ dbaascli pdb remote_clone --pdbname PDBMODEL --source_db
CBMODEL --source_db_scan exacc10-scan15.us1.ocm.s9090999.oraclecloudatcustomer.com
DBAAS CLI version 18.2.3.1.0
Executing command pdb remote_clone --pdbname PDBMODEL --source_db CBMODEL
--source_db_scan exacc10-scan15.us1.ocm.s9090999.oraclecloudatcustomer.com
Executing: pdb remote_clone
Please enter the password for SYS user for CDB CBMODEL:Please enter SYS password:
Please confirm password:
TNS_DIR is /var/opt/oracle/dbaas_acfs/log/CDB122H/pdb/66560
INFO : pdb remote_clone operation success
[oracle@exacchml01vm08 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 29 19:26:44 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
SYS > select name, open_mode from v$pdbs ;
NAME OPEN_MODE
-----------------------------------------------------
PDB$SEED READ ONLY
CDB122H_PDBMODEL READ WRITE
2 rows selected.
OBS: O PDB recém-clonado herda as senhas de administração do PDB de origem, o PDB clonado é nomeado usando o seguinte formato: dbname_sourcepdbname
1.6 Faça uma conexão para o CDB de destino e verifique que agora teremos no CDB UTF8 o PDB CDB122H_PDBMODEL com character set WE8MSWIN1252.
SYS> select name from v$database;
NAME
----------------------------------------
CDB122H
SYS > show con_name
CON_NAME
------------------------------
CDB$ROOT
SYS > col VALUE form A40
SYS > col PARAMETER form A50
SYS > set lines 100
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
--------------------------------------------------
NLS_CHARACTERSET AL32UTF8
SYS > alter session set container=CDB122H_PDBMODEL;
Session altered.
SYS > show con_name
CON_NAME
------------------------------
CDB122H_PDBMODEL
SQL> col VALUE form A40
SQL> col PARAMETER form A50
SQL> set lines 100
SQL> select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET';
PARAMETER VALUE
-------------------------------------------------------
NLS_CHARACTERSET WE8MSWIN1252
2.1 Acesse o CDB destino, ira identificar o que o PDB recém-clonado com a seguinte descrição CDB122H_PDBMODEL conforme mencionado na observação do passo anterior.
SYS> select name, open_mode from v$pdbs ;
NAME OPEN_MODE
----------------------------------------------------
PDB$SEED READ ONLY
CDB122H_PDBMODEL READ WRITE
2 rows selected.
2.2 Utilizando o utilitário DBAASCLI renomeie o PDB para o nome desejável
[oracle@exacchml01vm08 ~]$ . oraenv
ORACLE_SID = [oracle] ? CDB122H1
The Oracle base has been set to /u02/app/oracle
[oracle@exacchml01vm08 ~]$ dbaascli pdb rename --pdbname CDB122H_PDBMODEL
--newname PDBMODELCSET1252
DBAAS CLI version 18.2.3.1.0
Executing command pdb rename --pdbname CDB122H_PDBMODEL --newname PDBMODELCSET1252
Executing: pdb rename
INFO : pdb rename operation success
Finalizamos o clone do PDB, agora você tem um PDB modelo com character WE8MSWIN1252, ele poderá ser seu PDB template e poderá ser clonado localmente para a criação de novos PDB's com character set WE8MSWIN1252 como mostra o próximo passo.
CENÁRIO:
ORIGEM:
Cluster: HOMOLOGACAOdbnode1: exacchml01vm08
dbnode2: exacchml02vm08
CDB: CDB122H
PDB: PDBMODELCSET1252
SCAN: exacc10-scan15.us1.ocm.s9090999.oraclecloudatcustomer.com
DESTINO:
Cluster: HOMOLOGACAO
dbnode1: exacchml01vm08
dbnode2: exacchml02vm08
CDB: CDB122H
PDB: PDBTESTE
3.1 Acesse o CDB onde está hospedado o PDB de origem de identifique o nome do PDB
[oracle@exacchml01vm08 ~]$ . oraenv
ORACLE_SID = [oracle] ? CDB122H1
The Oracle base has been set to /u02/app/oracle
SYS> select name, open_mode from v$pdbs;
NAME OPEN_MODE
----------------------------------------------------
PDB$SEED READ ONLY
PDBMODELCSET1252 READ WRITE
2 rows selected.
3.2 Utilizando o utilitário DBAASCLI, clone o PDB.
Identificação dos Parâmetros
--pdbname
--target_pdbname
--dbname
Nome do PDB que será clonado (Origem).
Nome do novo PDB.
Especifique o nome do CDB onde os PDBs ficarão hospedados (CDB onde está o PDB Origem).
[oracle@exacchml01vm08 ~]$ dbaascli pdb local_clone --pdbname PDBMODELCSET1252
--target_pdbname PDBTESTE --dbname CDB122H1
DBAAS CLI version 18.2.3.1.0
Executing command pdb local_clone --pdbname PDBMODELCSET1252 --target_pdbname PDBTESTE
Executing: pdb local_clone
INFO : pdb local_clone operation success
4 Clone de PDB entre cluster, neste passo simularemos o clone entre clusters, este procedimento é muito útil para atualização de banco de dados de homologação quando temos os tipos de ambientes segmentados por ambiente onde os containers de produção estão em RAC no cluster de PRODUÇÃO e os containers de homologação estão em RAC no cluster de HOMOLOGACAO.
Cluster: PRODUÇÃO
dbnode1: exaccprd01vm07
dbnode2: exaccprd02vm07
CDB: CDB122P
PDB: PDB122P
SCAN: exacc10-scan1.us1.ocm.s8888888.oraclecloudatcustomer.com
Cluster: HOMOLOGACAO
dbnode1: exacchml01vm08
dbnode2: exacchml02vm08
CDB: CDB122H
PDB: CDB122H_PDB122
4.1 Acesse o servidor onde está hospedado o CDB de origem (Produção).
4.2 Identifique o nome do SCAN.
[oracle@exaccprd01vm07 ~]$ srvctl config scan
SCAN name: exacc10-scan1.us1.ocm.s8888888.oraclecloudatcustomer.com, Network: 1
Subnet IPv4: 175.20.38.0/255.255.255.240/bondeth0, static
Subnet IPv6:
SCAN 1 IPv4 VIP: 175.20.38.6
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 2 IPv4 VIP: 175.20.38.7
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 3 IPv4 VIP: 175.20.38.8
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
4.3 Identifique o CDB e o PDB de origem.
[oracle@exaccprd01vm07 ~]$ . oraenv
ORACLE_SID = [oracle] ? CDB122P1
The Oracle base has been set to /u02/app/oracle
[oracle@exaccprd01vm07 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 1 23:48:39 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
SQL> select name from v$database;
NAME
----------------------------------------
CDB122P
SQL> col name form A40
SQL> set lines 400
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-----------------------------------------------------
PDB$SEED READ ONLY
PDB122P READ WRITE
2 rows selected.
4.4 Acesse o servidor onde está hospedado o CDB de destino (Homologação).
OBS: Repare que o comando “dbaascli pdb remote_clone” não possui informações do CDB de destino, isto é muito importante para que seu clone ocorra com sucesso, você deve configurar como ORACLE_SID do seu CDB de destino.
[oracle@exacchml01vm08 ~]$ . oraenv
ORACLE_SID = [oracle] ? CDB122H1
The Oracle base has been set to /u02/app/oracle
4.5 Clonando um PDB entre Clusters
Entre com o comando e em seguida com a senha do usuário sys do CDB CDB122P
[oracle@exacchml01vm08 ~]$ echo $ORACLE_SID
CDB122H1
[oracle@exacchml01vm08 ~]$ dbaascli pdb remote_clone --pdbname PDB122P --source_db CDB122P
--source_db_scan exacc10-scan1.us1.ocm.s8888888.oraclecloudatcustomer.com
DBAAS CLI version 18.2.3.1.0
Executing command pdb remote_clone --pdbname PDB122P --source_db CDB122P
--source_db_scan exacc10-scan1.us1.ocm.s8888888.oraclecloudatcustomer.com
Executing: pdb remote_clone
Please enter the password for SYS user for CDB CDB122P:Please enter SYS password:
Please confirm password:
TNS_DIR is /var/opt/oracle/dbaas_acfs/log/CDB122H/pdb/23796
INFO : pdb remote_clone operation success
4.6 O clone foi finalizado, acesse o CDB destino, ira identificar o que o PDB recém clonado com a seguinte descrição CDB122H_PDB122P, agora você pode renomear para a nomenclatura desejada.
[oracle@exacchml01vm08 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Tue Apr 2 00:22:28 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
SYS> select name from v$pdbs;
NAME
----------------------------------------
PDB$SEED
CDB122H_PDB122P
Administering Oracle Database Exadata Cloud at Customer - https://docs.oracle.com/en/cloud/cloud-at-customer/exadata-cloud-at-customer/exacc/dbaascli-pdb-remote_clone.html.
Vinicius Calixto atua como administrador de banco de dados Oracle na TOTVS, tem 38 anos, é bacharel em Ciência da Computação e iniciou sua carreira trabalhando com os bancos de dados Oracle e SQL Server e desde o início direcionou seus estudos para as tecnologias Oracle. Possui as certificações OCA 11g, OCP 11G e OCP 12c.
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.