Usando clone de PDBs para atualizar ambientes. Novas características do Oracle Database 12c que você deveria saber para salvar tempo e melhorar o seu trabalho.

Por Alex Zaballa e Daniel Da Meda
Postado em Julho 2014

A maioria das empresas têm a necessidade de atualizar ambientes como UAT e testes com os dados de produção em um intervalo regular. A frequência de tais atualizações varia de acordo com os critérios da empresa e podem até mesmo ser diários. Até Oracle 11g, isso pode ser feito através do RMAN DUPLICATE, assim como muitos outros métodos manuais ou com scripts. Duplicando um banco de dados via comando RMAN DUPLICATE geralmente consome tempo e recursos, dependendo se você escolheu para realizar uma duplicação com ACTIVE DATABASE ou uma duplicação baseada nos backups.

Com o advento da arquitetura multitenant do Oracle 12c, é possível rodar as bases de dados de produção, bem como as não-produção a partir do mesmo CDB. Embora esta seja uma estratégia controversa, o uso correto do Database Resource Manager e/ou IO Resource Manager pode evitar o excesso de utilização de recursos por um PDB que não é de produção. Rodar ambientes que não são de produção juntamente com os PDBs de produçã, pode trazer ganhos significativos para o DBA em termos de produtividade e velocidade durante o provisionamento ou refresh dos dados de um PDB.
A clonagem de um PDB exige muito menos trabalho do que uma duplicate via RMAN, pelo simples fato de que o dicionário de dados não precisa ser clonado.

O Gerenciamento de PDBs pode ser realizado utilizando qualquer uma das seguintes ferramentas:

  1. SQL*Plus
  2. SQL Developer: O Database Control não existe mais no Oracle 12c. As tarefas de administração de banco de dados podem ser feitas através do SQL Developer.
  3. Enterprise Manager Cloud Control
  4. DBCA: Através do DBCA, o DBA pode executar diversas tarefas de provisionamento de PDBs, como a criação de um novo PDB com base na PDB$SEED, bem como plugar e desplugar PDBs.

A Figura 1 abaixo, demonstra como cada uma das ferramentas pode contribuir para a administração de bases de dados multitenant:

Apesar de que muitas ferramentas podem ser usadas para executar uma variedade de tarefas de banco de dados multitenant, a clonagem de um PDB está disponível apenas via SQL*PLUS, EM Cloud Control ou SQL*Developer.
Neste artigo, vamos realizar um clone de um banco de dados de produção chamado PDBPROD e nomeá-lo para PDBUAT, como se fossemos atualizar um ambiente de UAT baseado na produção. Como existem vários métodos para executar esta tarefa, este artigo irá demonstrar como implementá-los.
Note que uma operação de clonagem de PDB requer que o PDB de origem esteja em READ ONLY antes de realizar o clone. Em alguns ambientes, este requisito podem impedir a utilização da clonagem de PDBs, pois não é aceito downtime. Em tais casos, é aconselhável continuar usando RMAN DUPLICATE DATABASE com a cláusula PLUGGABLE DATABASE.

Ambiente

[oracle@12c admin]$ cat /etc/oracle-release
Oracle Linux Server release 6.3

[oracle@12c admin]$ uname -a
Linux 12c.xps15z.com 2.6.39-200.24.1.el6uek.x86_64 #1 SMP Sat Jun 23 02:39:07 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

[oracle@12c admin]$ hostname
12c.xps15z.com

[oracle@12c admin]$ sqlplus sys@cdb as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Fri May 2 09:54:50 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show parameter create

NAME                                        TYPE        VALUE
------------------------------------   -----------   ------------------------------
create_bitmap_area_size    integer     8388608
create_stored_outlines        string
db_create_file_dest              string        +DATA

SQL> show parameter recover

NAME                                          TYPE             VALUE
------------------------------------     -----------        ------------------------------
db_recovery_file_dest             string            +FRA
db_recovery_file_dest_size   big integer   10000M

SQL> show parameter convert

NAME                                           TYPE       VALUE
------------------------------------      -----------  ------------------------------
db_file_name_convert              string
log_file_name_convert             string
pdb_file_name_convert            string

SQL> show parameter domain
NAME                                           TYPE        VALUE
------------------------------------      -----------   ------------------------------
db_domain                                 string        xps15z.com

SQL> select name from v$pdbs;

NAME
----------------------------------------
PDB$SEED
PDBPROD

Refresh usando o Cloud Control
Iremos agora demonstrar os passos para realizar um clone de PDB utilizando o Oracle Cloud Control 12c:

 

  

 

 

 

  

 

 

  

  

Assim que o job for concluído, um novo target do tipo pluggable database é adicionado ao Cloud Control


Refresh utilizando o SQL*Developer

Dentro do SQL*Developer, podemos proceder com a criação das conexões para o CDB e para o PDB source, o PDBPROD:



Conecte-se ao ROOT database como na imagem a seguir:
Tip: Se o painel DBA não estiver visível, vá ao menu, View e selecione a opção DBA.



No painel DBA, expanda a conexão CDBPROD e depois expanda o nodo Container Database:


Clique com o botão direito no nome do container que você quer clonar e escolha a opção Clone Pluggable Database:


Introduza o nome do novo PDB, bem como o tamanho e as regras para conversão de arquivos:



Você também pode ver a sintaxe SQL que irá ser usada para executar esta ação clicando na aba SQL:


Verifique se o banco de dados de origem está em modo READ ONLY, caso contrário, irá ocorrer o seguinte erro:



Abra o PDB no modo READ ONLY usando o SQL*DEVELOPER:


Andamento do processo de clone:


Ao término, o novo PDB será mostrado em Container Databases:



Se o agente do Cloud Control Management estiver rodando neste host, o Cloud Control saberá automaticamente deste novo PDB após o próximo upload com sucesso do agente para o OMS.

Refresh usando SQL

Fazer o refresh de ambientes através de clone de PDBs é muito simples, requer apenas alguns comandos DDL.
Clonar PDBs através de comandos SQL é muito útil para geração de scripts que podem ser agendados para executar em determinados horários.
Neste exemplo, iremos atualizar o PDBUAT que foi clonado através da interface gráfica, utilizando comandos SQL:
Passos:

  1. Feche o pluggable database PDBUAT para poder apaga-lo, incluindo os datafiles
  2. Apague o pluggable database PDBUAT
  3. Coloque o pluggable database PDBPROD no modo READ ONLY
  4. Utilize o comando CREATE PLUGGABLE DATABASE para realizar o clone
  5. Coloque o pluggable database PDBPROD em modo READ WRITE
  6. Coloque o pluggable database PDBUAT em modo READ WRITE

$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Fri May 2 16:35:07 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> select name, open_mode from v$pdbs;

NAME                                OPEN_MODE
------------------------------   --------------------
PDB$SEED                     READ ONLY
PDBPROD                       READ WRITE
PDBUAT                           READ WRITE

-- Close the PDBUAT pluggable database so that it can be dropped

SQL> alter pluggable database pdbuat close immediate;
Pluggable database altered.

-- Drop the pluggable database and all its data files

SQL> drop pluggable database pdbuat including datafiles;
Pluggable database dropped.

-- Place the source PDBPROD pluggable database in READ ONLY mode

SQL> alter pluggable database pdbprod close immediate;
Pluggable database altered.

SQL> alter pluggable database pdbprod open READ ONLY;
Pluggable database altered.

-- Check default location settings

SQL> show parameter db_create_file_dest;

NAME                                      TYPE      VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest             string     +DATA

SQL> show parameter pdb
NAME                                      TYPE      VALUE
------------------------------------ ----------- ------------------------------
pdb_file_name_convert      string

-- Clone the PDBPROD pluggable database as PDBUAT

SQL> create pluggable database pdbuat from pdbprod;
Pluggable database created.

-- Place the source PDBPROD database in READ WRITE mode

SQL> alter pluggable database pdbprod close;
Pluggable database altered.

SQL> alter pluggable database pdbprod open read write;
Pluggable database altered.

-- Open the newly cloned PDBUAT database in READ WRITE mode

SQL> alter pluggable database pdbuat open read write;
Pluggable database altered.

SQL> select name, open_mode from v$pdbs;

NAME                                 OPEN_MODE
------------------------------    ----------------------
PDB$SEED                      READ ONLY
PDBPROD                       READ WRITE
PDBUAT                          READ WRITE



Alex Zaballa, formado em Análise de Sistemas, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Servidores de Aplicação e Sistemas Operacionais; trabalha com Oracle há 14 anos, é ORACLE ACE, certificado OCM Database 11G e conta com mais de 100 outras certificações em produtos da Oracle. Desde 2007 é funcionário da empresa Júpiter em Angola, alocado em um projeto no Ministério das Finanças. Alex também é fundador do Grupo de Usuários Oracle de Angola (GUOA) e membro do time OraWorld.

Daniel Da Meda,  possui mais de 16 anos de experiência com tecnologias Oracle. Trabalhou como DBA sênior para múltiplas empresas na Europa onde morou por 7 anos. Dentre as empresas que atuou, destacam-se TimeWarner, Johnson&Johnson e British Film Institute. Dentre as certificações Oracle que possui, destaca-se o OCM 11g. Atualmente, Daniel esta trabalhando em Angola/África onde atua como DBA para o Ministério das Finanças de Angola. É especialista em alta disponibilidade, escalabilidade e Performance Tuning. Juntamente com o Alex Zaballa, fundou em 2013, o grupo de Usuários Oracle de Angola (GUOA).