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:
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:
$ 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).