Multitenant: Clone de PDB local e remoto usando DBAASCLI em Exadata Cloud At Customer

Por Vinicius Calixto
Publicado em Julho 2019

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:

  • Alterar a senha de um usuário do banco de dados

  • Iniciar e parar um banco de dados

  • Inicie e pare o Oracle Net listener

  • Exibir informações sobre o Oracle Home

  • Mover um banco de dados para outro Oracle Home

  • Excluir um Oracle Home não usado

  • Executar alterações na configuração do banco de dados

  • Gerenciar bancos de dados plugáveis (PDBs)

  • Execute a recuperação do banco de dados

  • Gerar a master encryption key

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.




HAND ON

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.




Pré requisito:

É 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;

alter user C##CLOUD$SERVICE identified by oracle container=all;



1. Clonando um PDB entre CDB's diferentes no mesmo servidor.

CENÁRIO:

ORIGEM:

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  Renomeando o PDB recém-clonado, para que o PDB clonado não permaneça com a nomenclatura padrão do clone, você pode renomear com o nome desejável.


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.






3   Clonando um PDB Local dentro do mesmo CDB.

CENÁRIO:

ORIGEM:

Cluster: HOMOLOGACAO

dbnode1: 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.

CENÁRIO:

ORIGEM:

Cluster: PRODUÇÃO

dbnode1: exaccprd01vm07

dbnode2: exaccprd02vm07

CDB: CDB122P

PDB: PDB122P

SCAN: exacc10-scan1.us1.ocm.s8888888.oraclecloudatcustomer.com


DESTINO:

Cluster: HOMOLOGACAO

dbnode1: exacchml01vm08

dbnode2: exacchml02vm08

CDB: CDB122H

PDB: CDB122H_PDB122P




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



Referências:

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.